Merge "Inputflinger: hook up key event replacement processing" into mnc-dr-dev
This commit is contained in:
commit
a2f78b44ee
@ -438,10 +438,12 @@ bool EventHub::markSupportedKeyCodes(int32_t deviceId, size_t numCodes,
|
||||
return false;
|
||||
}
|
||||
|
||||
status_t EventHub::mapKey(int32_t deviceId, int32_t scanCode, int32_t usageCode,
|
||||
int32_t* outKeycode, uint32_t* outFlags) const {
|
||||
status_t EventHub::mapKey(int32_t deviceId,
|
||||
int32_t scanCode, int32_t usageCode, int32_t metaState,
|
||||
int32_t* outKeycode, int32_t* outMetaState, uint32_t* outFlags) const {
|
||||
AutoMutex _l(mLock);
|
||||
Device* device = getDeviceLocked(deviceId);
|
||||
status_t status = NAME_NOT_FOUND;
|
||||
|
||||
if (device) {
|
||||
// Check the key character map first.
|
||||
@ -449,22 +451,34 @@ status_t EventHub::mapKey(int32_t deviceId, int32_t scanCode, int32_t usageCode,
|
||||
if (kcm != NULL) {
|
||||
if (!kcm->mapKey(scanCode, usageCode, outKeycode)) {
|
||||
*outFlags = 0;
|
||||
return NO_ERROR;
|
||||
status = NO_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
// Check the key layout next.
|
||||
if (device->keyMap.haveKeyLayout()) {
|
||||
if (status != NO_ERROR && device->keyMap.haveKeyLayout()) {
|
||||
if (!device->keyMap.keyLayoutMap->mapKey(
|
||||
scanCode, usageCode, outKeycode, outFlags)) {
|
||||
return NO_ERROR;
|
||||
status = NO_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
if (status == NO_ERROR) {
|
||||
if (kcm != NULL) {
|
||||
kcm->tryRemapKey(*outKeycode, metaState, outKeycode, outMetaState);
|
||||
} else {
|
||||
*outMetaState = metaState;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*outKeycode = 0;
|
||||
*outFlags = 0;
|
||||
return NAME_NOT_FOUND;
|
||||
if (status != NO_ERROR) {
|
||||
*outKeycode = 0;
|
||||
*outFlags = 0;
|
||||
*outMetaState = metaState;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
status_t EventHub::mapAxis(int32_t deviceId, int32_t scanCode, AxisInfo* outAxisInfo) const {
|
||||
|
@ -197,8 +197,9 @@ public:
|
||||
|
||||
virtual bool hasInputProperty(int32_t deviceId, int property) const = 0;
|
||||
|
||||
virtual status_t mapKey(int32_t deviceId, int32_t scanCode, int32_t usageCode,
|
||||
int32_t* outKeycode, uint32_t* outFlags) const = 0;
|
||||
virtual status_t mapKey(int32_t deviceId,
|
||||
int32_t scanCode, int32_t usageCode, int32_t metaState,
|
||||
int32_t* outKeycode, int32_t *outMetaState, uint32_t* outFlags) const = 0;
|
||||
|
||||
virtual status_t mapAxis(int32_t deviceId, int32_t scanCode,
|
||||
AxisInfo* outAxisInfo) const = 0;
|
||||
@ -285,8 +286,9 @@ public:
|
||||
|
||||
virtual bool hasInputProperty(int32_t deviceId, int property) const;
|
||||
|
||||
virtual status_t mapKey(int32_t deviceId, int32_t scanCode, int32_t usageCode,
|
||||
int32_t* outKeycode, uint32_t* outFlags) const;
|
||||
virtual status_t mapKey(int32_t deviceId,
|
||||
int32_t scanCode, int32_t usageCode, int32_t metaState,
|
||||
int32_t* outKeycode, int32_t *outMetaState, uint32_t* outFlags) const;
|
||||
|
||||
virtual status_t mapAxis(int32_t deviceId, int32_t scanCode,
|
||||
AxisInfo* outAxisInfo) const;
|
||||
|
@ -2177,13 +2177,7 @@ void KeyboardInputMapper::process(const RawEvent* rawEvent) {
|
||||
mCurrentHidUsage = 0;
|
||||
|
||||
if (isKeyboardOrGamepadKey(scanCode)) {
|
||||
int32_t keyCode;
|
||||
uint32_t flags;
|
||||
if (getEventHub()->mapKey(getDeviceId(), scanCode, usageCode, &keyCode, &flags)) {
|
||||
keyCode = AKEYCODE_UNKNOWN;
|
||||
flags = 0;
|
||||
}
|
||||
processKey(rawEvent->when, rawEvent->value != 0, keyCode, scanCode, flags);
|
||||
processKey(rawEvent->when, rawEvent->value != 0, scanCode, usageCode);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -2208,8 +2202,18 @@ bool KeyboardInputMapper::isKeyboardOrGamepadKey(int32_t scanCode) {
|
||||
|| (scanCode >= BTN_JOYSTICK && scanCode < BTN_DIGI);
|
||||
}
|
||||
|
||||
void KeyboardInputMapper::processKey(nsecs_t when, bool down, int32_t keyCode,
|
||||
int32_t scanCode, uint32_t policyFlags) {
|
||||
void KeyboardInputMapper::processKey(nsecs_t when, bool down, int32_t scanCode,
|
||||
int32_t usageCode) {
|
||||
int32_t keyCode;
|
||||
int32_t keyMetaState;
|
||||
uint32_t policyFlags;
|
||||
|
||||
if (getEventHub()->mapKey(getDeviceId(), scanCode, usageCode, mMetaState,
|
||||
&keyCode, &keyMetaState, &policyFlags)) {
|
||||
keyCode = AKEYCODE_UNKNOWN;
|
||||
keyMetaState = mMetaState;
|
||||
policyFlags = 0;
|
||||
}
|
||||
|
||||
if (down) {
|
||||
// Rotate key codes according to orientation if needed.
|
||||
@ -2262,6 +2266,12 @@ void KeyboardInputMapper::processKey(nsecs_t when, bool down, int32_t keyCode,
|
||||
if (metaStateChanged) {
|
||||
mMetaState = newMetaState;
|
||||
updateLedState(false);
|
||||
|
||||
// If global meta state changed send it along with the key.
|
||||
// If it has not changed then we'll use what keymap gave us,
|
||||
// since key replacement logic might temporarily reset a few
|
||||
// meta bits for given key.
|
||||
keyMetaState = newMetaState;
|
||||
}
|
||||
|
||||
nsecs_t downTime = mDownTime;
|
||||
@ -2289,7 +2299,7 @@ void KeyboardInputMapper::processKey(nsecs_t when, bool down, int32_t keyCode,
|
||||
|
||||
NotifyKeyArgs args(when, getDeviceId(), mSource, policyFlags,
|
||||
down ? AKEY_EVENT_ACTION_DOWN : AKEY_EVENT_ACTION_UP,
|
||||
AKEY_EVENT_FLAG_FROM_SYSTEM, keyCode, scanCode, newMetaState, downTime);
|
||||
AKEY_EVENT_FLAG_FROM_SYSTEM, keyCode, scanCode, keyMetaState, downTime);
|
||||
getListener()->notifyKey(&args);
|
||||
}
|
||||
|
||||
@ -3543,8 +3553,10 @@ void TouchInputMapper::configureVirtualKeys() {
|
||||
|
||||
virtualKey.scanCode = virtualKeyDefinition.scanCode;
|
||||
int32_t keyCode;
|
||||
int32_t dummyKeyMetaState;
|
||||
uint32_t flags;
|
||||
if (getEventHub()->mapKey(getDeviceId(), virtualKey.scanCode, 0, &keyCode, &flags)) {
|
||||
if (getEventHub()->mapKey(getDeviceId(), virtualKey.scanCode, 0, 0,
|
||||
&keyCode, &dummyKeyMetaState, &flags)) {
|
||||
ALOGW(INDENT "VirtualKey %d: could not obtain key code, ignoring",
|
||||
virtualKey.scanCode);
|
||||
mVirtualKeys.pop(); // drop the key
|
||||
|
@ -1154,8 +1154,7 @@ private:
|
||||
|
||||
bool isKeyboardOrGamepadKey(int32_t scanCode);
|
||||
|
||||
void processKey(nsecs_t when, bool down, int32_t keyCode, int32_t scanCode,
|
||||
uint32_t policyFlags);
|
||||
void processKey(nsecs_t when, bool down, int32_t scanCode, int32_t usageCode);
|
||||
|
||||
ssize_t findKeyDown(int32_t scanCode);
|
||||
|
||||
|
@ -518,8 +518,9 @@ private:
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual status_t mapKey(int32_t deviceId, int32_t scanCode, int32_t usageCode,
|
||||
int32_t* outKeycode, uint32_t* outFlags) const {
|
||||
virtual status_t mapKey(int32_t deviceId,
|
||||
int32_t scanCode, int32_t usageCode, int32_t metaState,
|
||||
int32_t* outKeycode, int32_t *outMetaState, uint32_t* outFlags) const {
|
||||
Device* device = getDevice(deviceId);
|
||||
if (device) {
|
||||
const KeyInfo* key = getKey(device, scanCode, usageCode);
|
||||
@ -530,6 +531,9 @@ private:
|
||||
if (outFlags) {
|
||||
*outFlags = key->flags;
|
||||
}
|
||||
if (outMetaState) {
|
||||
*outMetaState = metaState;
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user