Loading api/current.xml +6 −6 Original line number Diff line number Diff line Loading @@ -195045,7 +195045,7 @@ visibility="public" > </method> <method name="isCapsLockLatched" <method name="isCapsLockOn" return="boolean" abstract="false" native="false" Loading Loading @@ -195113,7 +195113,7 @@ <parameter name="keyCode" type="int"> </parameter> </method> <method name="isNumLockLatched" <method name="isNumLockOn" return="boolean" abstract="false" native="false" Loading @@ -195135,7 +195135,7 @@ visibility="public" > </method> <method name="isScrollLockLatched" <method name="isScrollLockOn" return="boolean" abstract="false" native="false" Loading Loading @@ -197228,7 +197228,7 @@ visibility="public" > </field> <field name="META_CAPS_LOCK_LATCHED" <field name="META_CAPS_LOCK_ON" type="int" transient="false" volatile="false" Loading Loading @@ -197316,7 +197316,7 @@ visibility="public" > </field> <field name="META_NUM_LOCK_LATCHED" <field name="META_NUM_LOCK_ON" type="int" transient="false" volatile="false" Loading @@ -197327,7 +197327,7 @@ visibility="public" > </field> <field name="META_SCROLL_LOCK_LATCHED" <field name="META_SCROLL_LOCK_ON" type="int" transient="false" volatile="false" core/java/android/view/KeyEvent.java +33 −33 Original line number Diff line number Diff line Loading @@ -674,9 +674,9 @@ public class KeyEvent extends InputEvent implements Parcelable { "META_META_LEFT_ON", "META_META_RIGHT_ON", "0x00080000", "META_CAPS_LOCK_LATCHED", "META_NUM_LOCK_LATCHED", "META_SCROLL_LOCK_LATCHED", "META_CAPS_LOCK_ON", "META_NUM_LOCK_ON", "META_SCROLL_LOCK_ON", "0x00800000", "0x01000000", "0x02000000", Loading Loading @@ -872,31 +872,31 @@ public class KeyEvent extends InputEvent implements Parcelable { public static final int META_META_RIGHT_ON = 0x40000; /** * <p>This mask is used to check whether the CAPS LOCK meta key is latched.</p> * <p>This mask is used to check whether the CAPS LOCK meta key is on.</p> * * @see #isCapsLockLatched() * @see #isCapsLockOn() * @see #getMetaState() * @see #KEYCODE_CAPS_LOCK */ public static final int META_CAPS_LOCK_LATCHED = 0x100000; public static final int META_CAPS_LOCK_ON = 0x100000; /** * <p>This mask is used to check whether the NUM LOCK meta key is latched.</p> * <p>This mask is used to check whether the NUM LOCK meta key is on.</p> * * @see #isNumLockLatched() * @see #isNumLockOn() * @see #getMetaState() * @see #KEYCODE_NUM_LOCK */ public static final int META_NUM_LOCK_LATCHED = 0x200000; public static final int META_NUM_LOCK_ON = 0x200000; /** * <p>This mask is used to check whether the SCROLL LOCK meta key is latched.</p> * <p>This mask is used to check whether the SCROLL LOCK meta key is on.</p> * * @see #isScrollLockLatched() * @see #isScrollLockOn() * @see #getMetaState() * @see #KEYCODE_SCROLL_LOCK */ public static final int META_SCROLL_LOCK_LATCHED = 0x400000; public static final int META_SCROLL_LOCK_ON = 0x400000; /** * This mask is set if the device woke because of this key event. Loading Loading @@ -1411,9 +1411,9 @@ public class KeyEvent extends InputEvent implements Parcelable { * @see #isCtrlPressed() * @see #isMetaPressed() * @see #isFunctionPressed() * @see #isCapsLockLatched() * @see #isNumLockLatched() * @see #isScrollLockLatched() * @see #isCapsLockOn() * @see #isNumLockOn() * @see #isScrollLockOn() * @see #META_ALT_ON * @see #META_ALT_LEFT_ON * @see #META_ALT_RIGHT_ON Loading @@ -1428,9 +1428,9 @@ public class KeyEvent extends InputEvent implements Parcelable { * @see #META_META_ON * @see #META_META_LEFT_ON * @see #META_META_RIGHT_ON * @see #META_CAPS_LOCK_LATCHED * @see #META_NUM_LOCK_LATCHED * @see #META_SCROLL_LOCK_LATCHED * @see #META_CAPS_LOCK_ON * @see #META_NUM_LOCK_ON * @see #META_SCROLL_LOCK_ON */ public final int getMetaState() { return mMetaState; Loading Loading @@ -1551,39 +1551,39 @@ public class KeyEvent extends InputEvent implements Parcelable { } /** * <p>Returns the latched state of the CAPS LOCK meta key.</p> * <p>Returns the locked state of the CAPS LOCK meta key.</p> * * @return true if the CAPS LOCK key is latched, false otherwise * @return true if the CAPS LOCK key is on, false otherwise * * @see #KEYCODE_CAPS_LOCK * @see #META_CAPS_LOCK_LATCHED * @see #META_CAPS_LOCK_ON */ public final boolean isCapsLockLatched() { return (mMetaState & META_CAPS_LOCK_LATCHED) != 0; public final boolean isCapsLockOn() { return (mMetaState & META_CAPS_LOCK_ON) != 0; } /** * <p>Returns the latched state of the NUM LOCK meta key.</p> * <p>Returns the locked state of the NUM LOCK meta key.</p> * * @return true if the NUM LOCK key is latched, false otherwise * @return true if the NUM LOCK key is on, false otherwise * * @see #KEYCODE_NUM_LOCK * @see #META_NUM_LOCK_LATCHED * @see #META_NUM_LOCK_ON */ public final boolean isNumLockLatched() { return (mMetaState & META_NUM_LOCK_LATCHED) != 0; public final boolean isNumLockOn() { return (mMetaState & META_NUM_LOCK_ON) != 0; } /** * <p>Returns the latched state of the SCROLL LOCK meta key.</p> * <p>Returns the locked state of the SCROLL LOCK meta key.</p> * * @return true if the SCROLL LOCK key is latched, false otherwise * @return true if the SCROLL LOCK key is on, false otherwise * * @see #KEYCODE_SCROLL_LOCK * @see #META_SCROLL_LOCK_LATCHED * @see #META_SCROLL_LOCK_ON */ public final boolean isScrollLockLatched() { return (mMetaState & META_SCROLL_LOCK_LATCHED) != 0; public final boolean isScrollLockOn() { return (mMetaState & META_SCROLL_LOCK_ON) != 0; } /** Loading libs/ui/InputReader.cpp +9 −9 Original line number Diff line number Diff line Loading @@ -129,11 +129,11 @@ int32_t updateMetaState(int32_t keyCode, bool down, int32_t oldMetaState) { case AKEYCODE_META_RIGHT: return setEphemeralMetaState(AMETA_META_RIGHT_ON, down, oldMetaState); case AKEYCODE_CAPS_LOCK: return toggleLockedMetaState(AMETA_CAPS_LOCK_LATCHED, down, oldMetaState); return toggleLockedMetaState(AMETA_CAPS_LOCK_ON, down, oldMetaState); case AKEYCODE_NUM_LOCK: return toggleLockedMetaState(AMETA_NUM_LOCK_LATCHED, down, oldMetaState); return toggleLockedMetaState(AMETA_NUM_LOCK_ON, down, oldMetaState); case AKEYCODE_SCROLL_LOCK: return toggleLockedMetaState(AMETA_SCROLL_LOCK_LATCHED, down, oldMetaState); return toggleLockedMetaState(AMETA_SCROLL_LOCK_ON, down, oldMetaState); default: return oldMetaState; } Loading Loading @@ -967,7 +967,7 @@ void KeyboardInputMapper::processKey(nsecs_t when, bool down, int32_t keyCode, if (mAssociatedDisplayId >= 0) { int32_t orientation; if (!getPolicy()->getDisplayInfo(mAssociatedDisplayId, NULL, NULL, & orientation)) { return; orientation = InputReaderPolicyInterface::ROTATION_0; } keyCode = rotateKeyCode(keyCode, orientation); Loading Loading @@ -1058,11 +1058,11 @@ int32_t KeyboardInputMapper::getMetaState() { void KeyboardInputMapper::updateLedStateLocked(bool reset) { updateLedStateForModifierLocked(mLocked.capsLockLedState, LED_CAPSL, AMETA_CAPS_LOCK_LATCHED, reset); AMETA_CAPS_LOCK_ON, reset); updateLedStateForModifierLocked(mLocked.numLockLedState, LED_NUML, AMETA_NUM_LOCK_LATCHED, reset); AMETA_NUM_LOCK_ON, reset); updateLedStateForModifierLocked(mLocked.scrollLockLedState, LED_SCROLLL, AMETA_SCROLL_LOCK_LATCHED, reset); AMETA_SCROLL_LOCK_ON, reset); } void KeyboardInputMapper::updateLedStateForModifierLocked(LockedState::LedState& ledState, Loading Loading @@ -1228,7 +1228,7 @@ void TrackballInputMapper::sync(nsecs_t when) { // Note: getDisplayInfo is non-reentrant so we can continue holding the lock. int32_t orientation; if (! getPolicy()->getDisplayInfo(mAssociatedDisplayId, NULL, NULL, & orientation)) { return; orientation = InputReaderPolicyInterface::ROTATION_0; } float temp; Loading libs/ui/tests/InputReader_test.cpp +99 −1 Original line number Diff line number Diff line Loading @@ -376,6 +376,7 @@ class FakeEventHub : public EventHubInterface { KeyedVector<int32_t, int32_t> scanCodeStates; KeyedVector<int32_t, int32_t> switchStates; KeyedVector<int32_t, KeyInfo> keys; KeyedVector<int32_t, bool> leds; Device(const String8& name, uint32_t classes) : name(name), classes(classes) { Loading Loading @@ -450,6 +451,16 @@ public: device->keys.add(scanCode, info); } void addLed(int32_t deviceId, int32_t led, bool initialState) { Device* device = getDevice(deviceId); device->leds.add(led, initialState); } bool getLedState(int32_t deviceId, int32_t led) { Device* device = getDevice(deviceId); return device->leds.valueFor(led); } Vector<String8>& getExcludedDevices() { return mExcludedDevices; } Loading Loading @@ -584,10 +595,22 @@ private: } virtual bool hasLed(int32_t deviceId, int32_t led) const { return false; Device* device = getDevice(deviceId); return device && device->leds.indexOfKey(led) >= 0; } virtual void setLedState(int32_t deviceId, int32_t led, bool on) { Device* device = getDevice(deviceId); if (device) { ssize_t index = device->leds.indexOfKey(led); if (index >= 0) { device->leds.replaceValueAt(led, on); } else { ADD_FAILURE() << "Attempted to set the state of an LED that the EventHub declared " "was not present. led=" << led; } } } virtual void dump(String8& dump) { Loading Loading @@ -1703,6 +1726,81 @@ TEST_F(KeyboardInputMapperTest, MarkSupportedKeyCodes) { ASSERT_FALSE(flags[1]); } TEST_F(KeyboardInputMapperTest, Process_LockedKeysShouldToggleMetaStateAndLeds) { mFakeEventHub->addLed(DEVICE_ID, LED_CAPSL, true /*initially on*/); mFakeEventHub->addLed(DEVICE_ID, LED_NUML, false /*initially off*/); mFakeEventHub->addLed(DEVICE_ID, LED_SCROLLL, false /*initially off*/); KeyboardInputMapper* mapper = new KeyboardInputMapper(mDevice, -1, AINPUT_SOURCE_KEYBOARD, AINPUT_KEYBOARD_TYPE_ALPHABETIC); addMapperAndConfigure(mapper); // Initialization should have turned all of the lights off. ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_CAPSL)); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_NUML)); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_SCROLLL)); // Toggle caps lock on. process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_CAPSLOCK, AKEYCODE_CAPS_LOCK, 1, 0); process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_CAPSLOCK, AKEYCODE_CAPS_LOCK, 0, 0); ASSERT_TRUE(mFakeEventHub->getLedState(DEVICE_ID, LED_CAPSL)); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_NUML)); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_SCROLLL)); ASSERT_EQ(AMETA_CAPS_LOCK_ON, mapper->getMetaState()); // Toggle num lock on. process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_NUMLOCK, AKEYCODE_NUM_LOCK, 1, 0); process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_NUMLOCK, AKEYCODE_NUM_LOCK, 0, 0); ASSERT_TRUE(mFakeEventHub->getLedState(DEVICE_ID, LED_CAPSL)); ASSERT_TRUE(mFakeEventHub->getLedState(DEVICE_ID, LED_NUML)); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_SCROLLL)); ASSERT_EQ(AMETA_CAPS_LOCK_ON | AMETA_NUM_LOCK_ON, mapper->getMetaState()); // Toggle caps lock off. process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_CAPSLOCK, AKEYCODE_CAPS_LOCK, 1, 0); process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_CAPSLOCK, AKEYCODE_CAPS_LOCK, 1, 0); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_CAPSL)); ASSERT_TRUE(mFakeEventHub->getLedState(DEVICE_ID, LED_NUML)); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_SCROLLL)); ASSERT_EQ(AMETA_NUM_LOCK_ON, mapper->getMetaState()); // Toggle scroll lock on. process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_SCROLLLOCK, AKEYCODE_SCROLL_LOCK, 1, 0); process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_SCROLLLOCK, AKEYCODE_SCROLL_LOCK, 0, 0); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_CAPSL)); ASSERT_TRUE(mFakeEventHub->getLedState(DEVICE_ID, LED_NUML)); ASSERT_TRUE(mFakeEventHub->getLedState(DEVICE_ID, LED_SCROLLL)); ASSERT_EQ(AMETA_NUM_LOCK_ON | AMETA_SCROLL_LOCK_ON, mapper->getMetaState()); // Toggle num lock off. process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_NUMLOCK, AKEYCODE_NUM_LOCK, 1, 0); process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_NUMLOCK, AKEYCODE_NUM_LOCK, 0, 0); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_CAPSL)); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_NUML)); ASSERT_TRUE(mFakeEventHub->getLedState(DEVICE_ID, LED_SCROLLL)); ASSERT_EQ(AMETA_SCROLL_LOCK_ON, mapper->getMetaState()); // Toggle scroll lock off. process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_SCROLLLOCK, AKEYCODE_SCROLL_LOCK, 1, 0); process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_SCROLLLOCK, AKEYCODE_SCROLL_LOCK, 0, 0); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_CAPSL)); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_NUML)); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_SCROLLL)); ASSERT_EQ(AMETA_NONE, mapper->getMetaState()); } // --- TrackballInputMapperTest --- Loading native/include/android/input.h +6 −6 Original line number Diff line number Diff line Loading @@ -116,14 +116,14 @@ enum { /* This mask is used to check whether the right META meta key is pressed. */ AMETA_META_RIGHT_ON = 0x40000, /* This mask is used to check whether the CAPS LOCK meta key is latched. */ AMETA_CAPS_LOCK_LATCHED = 0x100000, /* This mask is used to check whether the CAPS LOCK meta key is on. */ AMETA_CAPS_LOCK_ON = 0x100000, /* This mask is used to check whether the NUM LOCK meta key is latched. */ AMETA_NUM_LOCK_LATCHED = 0x200000, /* This mask is used to check whether the NUM LOCK meta key is on. */ AMETA_NUM_LOCK_ON = 0x200000, /* This mask is used to check whether the SCROLL LOCK meta key is latched. */ AMETA_SCROLL_LOCK_LATCHED = 0x400000, /* This mask is used to check whether the SCROLL LOCK meta key is on. */ AMETA_SCROLL_LOCK_ON = 0x400000, }; /* Loading Loading
api/current.xml +6 −6 Original line number Diff line number Diff line Loading @@ -195045,7 +195045,7 @@ visibility="public" > </method> <method name="isCapsLockLatched" <method name="isCapsLockOn" return="boolean" abstract="false" native="false" Loading Loading @@ -195113,7 +195113,7 @@ <parameter name="keyCode" type="int"> </parameter> </method> <method name="isNumLockLatched" <method name="isNumLockOn" return="boolean" abstract="false" native="false" Loading @@ -195135,7 +195135,7 @@ visibility="public" > </method> <method name="isScrollLockLatched" <method name="isScrollLockOn" return="boolean" abstract="false" native="false" Loading Loading @@ -197228,7 +197228,7 @@ visibility="public" > </field> <field name="META_CAPS_LOCK_LATCHED" <field name="META_CAPS_LOCK_ON" type="int" transient="false" volatile="false" Loading Loading @@ -197316,7 +197316,7 @@ visibility="public" > </field> <field name="META_NUM_LOCK_LATCHED" <field name="META_NUM_LOCK_ON" type="int" transient="false" volatile="false" Loading @@ -197327,7 +197327,7 @@ visibility="public" > </field> <field name="META_SCROLL_LOCK_LATCHED" <field name="META_SCROLL_LOCK_ON" type="int" transient="false" volatile="false"
core/java/android/view/KeyEvent.java +33 −33 Original line number Diff line number Diff line Loading @@ -674,9 +674,9 @@ public class KeyEvent extends InputEvent implements Parcelable { "META_META_LEFT_ON", "META_META_RIGHT_ON", "0x00080000", "META_CAPS_LOCK_LATCHED", "META_NUM_LOCK_LATCHED", "META_SCROLL_LOCK_LATCHED", "META_CAPS_LOCK_ON", "META_NUM_LOCK_ON", "META_SCROLL_LOCK_ON", "0x00800000", "0x01000000", "0x02000000", Loading Loading @@ -872,31 +872,31 @@ public class KeyEvent extends InputEvent implements Parcelable { public static final int META_META_RIGHT_ON = 0x40000; /** * <p>This mask is used to check whether the CAPS LOCK meta key is latched.</p> * <p>This mask is used to check whether the CAPS LOCK meta key is on.</p> * * @see #isCapsLockLatched() * @see #isCapsLockOn() * @see #getMetaState() * @see #KEYCODE_CAPS_LOCK */ public static final int META_CAPS_LOCK_LATCHED = 0x100000; public static final int META_CAPS_LOCK_ON = 0x100000; /** * <p>This mask is used to check whether the NUM LOCK meta key is latched.</p> * <p>This mask is used to check whether the NUM LOCK meta key is on.</p> * * @see #isNumLockLatched() * @see #isNumLockOn() * @see #getMetaState() * @see #KEYCODE_NUM_LOCK */ public static final int META_NUM_LOCK_LATCHED = 0x200000; public static final int META_NUM_LOCK_ON = 0x200000; /** * <p>This mask is used to check whether the SCROLL LOCK meta key is latched.</p> * <p>This mask is used to check whether the SCROLL LOCK meta key is on.</p> * * @see #isScrollLockLatched() * @see #isScrollLockOn() * @see #getMetaState() * @see #KEYCODE_SCROLL_LOCK */ public static final int META_SCROLL_LOCK_LATCHED = 0x400000; public static final int META_SCROLL_LOCK_ON = 0x400000; /** * This mask is set if the device woke because of this key event. Loading Loading @@ -1411,9 +1411,9 @@ public class KeyEvent extends InputEvent implements Parcelable { * @see #isCtrlPressed() * @see #isMetaPressed() * @see #isFunctionPressed() * @see #isCapsLockLatched() * @see #isNumLockLatched() * @see #isScrollLockLatched() * @see #isCapsLockOn() * @see #isNumLockOn() * @see #isScrollLockOn() * @see #META_ALT_ON * @see #META_ALT_LEFT_ON * @see #META_ALT_RIGHT_ON Loading @@ -1428,9 +1428,9 @@ public class KeyEvent extends InputEvent implements Parcelable { * @see #META_META_ON * @see #META_META_LEFT_ON * @see #META_META_RIGHT_ON * @see #META_CAPS_LOCK_LATCHED * @see #META_NUM_LOCK_LATCHED * @see #META_SCROLL_LOCK_LATCHED * @see #META_CAPS_LOCK_ON * @see #META_NUM_LOCK_ON * @see #META_SCROLL_LOCK_ON */ public final int getMetaState() { return mMetaState; Loading Loading @@ -1551,39 +1551,39 @@ public class KeyEvent extends InputEvent implements Parcelable { } /** * <p>Returns the latched state of the CAPS LOCK meta key.</p> * <p>Returns the locked state of the CAPS LOCK meta key.</p> * * @return true if the CAPS LOCK key is latched, false otherwise * @return true if the CAPS LOCK key is on, false otherwise * * @see #KEYCODE_CAPS_LOCK * @see #META_CAPS_LOCK_LATCHED * @see #META_CAPS_LOCK_ON */ public final boolean isCapsLockLatched() { return (mMetaState & META_CAPS_LOCK_LATCHED) != 0; public final boolean isCapsLockOn() { return (mMetaState & META_CAPS_LOCK_ON) != 0; } /** * <p>Returns the latched state of the NUM LOCK meta key.</p> * <p>Returns the locked state of the NUM LOCK meta key.</p> * * @return true if the NUM LOCK key is latched, false otherwise * @return true if the NUM LOCK key is on, false otherwise * * @see #KEYCODE_NUM_LOCK * @see #META_NUM_LOCK_LATCHED * @see #META_NUM_LOCK_ON */ public final boolean isNumLockLatched() { return (mMetaState & META_NUM_LOCK_LATCHED) != 0; public final boolean isNumLockOn() { return (mMetaState & META_NUM_LOCK_ON) != 0; } /** * <p>Returns the latched state of the SCROLL LOCK meta key.</p> * <p>Returns the locked state of the SCROLL LOCK meta key.</p> * * @return true if the SCROLL LOCK key is latched, false otherwise * @return true if the SCROLL LOCK key is on, false otherwise * * @see #KEYCODE_SCROLL_LOCK * @see #META_SCROLL_LOCK_LATCHED * @see #META_SCROLL_LOCK_ON */ public final boolean isScrollLockLatched() { return (mMetaState & META_SCROLL_LOCK_LATCHED) != 0; public final boolean isScrollLockOn() { return (mMetaState & META_SCROLL_LOCK_ON) != 0; } /** Loading
libs/ui/InputReader.cpp +9 −9 Original line number Diff line number Diff line Loading @@ -129,11 +129,11 @@ int32_t updateMetaState(int32_t keyCode, bool down, int32_t oldMetaState) { case AKEYCODE_META_RIGHT: return setEphemeralMetaState(AMETA_META_RIGHT_ON, down, oldMetaState); case AKEYCODE_CAPS_LOCK: return toggleLockedMetaState(AMETA_CAPS_LOCK_LATCHED, down, oldMetaState); return toggleLockedMetaState(AMETA_CAPS_LOCK_ON, down, oldMetaState); case AKEYCODE_NUM_LOCK: return toggleLockedMetaState(AMETA_NUM_LOCK_LATCHED, down, oldMetaState); return toggleLockedMetaState(AMETA_NUM_LOCK_ON, down, oldMetaState); case AKEYCODE_SCROLL_LOCK: return toggleLockedMetaState(AMETA_SCROLL_LOCK_LATCHED, down, oldMetaState); return toggleLockedMetaState(AMETA_SCROLL_LOCK_ON, down, oldMetaState); default: return oldMetaState; } Loading Loading @@ -967,7 +967,7 @@ void KeyboardInputMapper::processKey(nsecs_t when, bool down, int32_t keyCode, if (mAssociatedDisplayId >= 0) { int32_t orientation; if (!getPolicy()->getDisplayInfo(mAssociatedDisplayId, NULL, NULL, & orientation)) { return; orientation = InputReaderPolicyInterface::ROTATION_0; } keyCode = rotateKeyCode(keyCode, orientation); Loading Loading @@ -1058,11 +1058,11 @@ int32_t KeyboardInputMapper::getMetaState() { void KeyboardInputMapper::updateLedStateLocked(bool reset) { updateLedStateForModifierLocked(mLocked.capsLockLedState, LED_CAPSL, AMETA_CAPS_LOCK_LATCHED, reset); AMETA_CAPS_LOCK_ON, reset); updateLedStateForModifierLocked(mLocked.numLockLedState, LED_NUML, AMETA_NUM_LOCK_LATCHED, reset); AMETA_NUM_LOCK_ON, reset); updateLedStateForModifierLocked(mLocked.scrollLockLedState, LED_SCROLLL, AMETA_SCROLL_LOCK_LATCHED, reset); AMETA_SCROLL_LOCK_ON, reset); } void KeyboardInputMapper::updateLedStateForModifierLocked(LockedState::LedState& ledState, Loading Loading @@ -1228,7 +1228,7 @@ void TrackballInputMapper::sync(nsecs_t when) { // Note: getDisplayInfo is non-reentrant so we can continue holding the lock. int32_t orientation; if (! getPolicy()->getDisplayInfo(mAssociatedDisplayId, NULL, NULL, & orientation)) { return; orientation = InputReaderPolicyInterface::ROTATION_0; } float temp; Loading
libs/ui/tests/InputReader_test.cpp +99 −1 Original line number Diff line number Diff line Loading @@ -376,6 +376,7 @@ class FakeEventHub : public EventHubInterface { KeyedVector<int32_t, int32_t> scanCodeStates; KeyedVector<int32_t, int32_t> switchStates; KeyedVector<int32_t, KeyInfo> keys; KeyedVector<int32_t, bool> leds; Device(const String8& name, uint32_t classes) : name(name), classes(classes) { Loading Loading @@ -450,6 +451,16 @@ public: device->keys.add(scanCode, info); } void addLed(int32_t deviceId, int32_t led, bool initialState) { Device* device = getDevice(deviceId); device->leds.add(led, initialState); } bool getLedState(int32_t deviceId, int32_t led) { Device* device = getDevice(deviceId); return device->leds.valueFor(led); } Vector<String8>& getExcludedDevices() { return mExcludedDevices; } Loading Loading @@ -584,10 +595,22 @@ private: } virtual bool hasLed(int32_t deviceId, int32_t led) const { return false; Device* device = getDevice(deviceId); return device && device->leds.indexOfKey(led) >= 0; } virtual void setLedState(int32_t deviceId, int32_t led, bool on) { Device* device = getDevice(deviceId); if (device) { ssize_t index = device->leds.indexOfKey(led); if (index >= 0) { device->leds.replaceValueAt(led, on); } else { ADD_FAILURE() << "Attempted to set the state of an LED that the EventHub declared " "was not present. led=" << led; } } } virtual void dump(String8& dump) { Loading Loading @@ -1703,6 +1726,81 @@ TEST_F(KeyboardInputMapperTest, MarkSupportedKeyCodes) { ASSERT_FALSE(flags[1]); } TEST_F(KeyboardInputMapperTest, Process_LockedKeysShouldToggleMetaStateAndLeds) { mFakeEventHub->addLed(DEVICE_ID, LED_CAPSL, true /*initially on*/); mFakeEventHub->addLed(DEVICE_ID, LED_NUML, false /*initially off*/); mFakeEventHub->addLed(DEVICE_ID, LED_SCROLLL, false /*initially off*/); KeyboardInputMapper* mapper = new KeyboardInputMapper(mDevice, -1, AINPUT_SOURCE_KEYBOARD, AINPUT_KEYBOARD_TYPE_ALPHABETIC); addMapperAndConfigure(mapper); // Initialization should have turned all of the lights off. ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_CAPSL)); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_NUML)); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_SCROLLL)); // Toggle caps lock on. process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_CAPSLOCK, AKEYCODE_CAPS_LOCK, 1, 0); process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_CAPSLOCK, AKEYCODE_CAPS_LOCK, 0, 0); ASSERT_TRUE(mFakeEventHub->getLedState(DEVICE_ID, LED_CAPSL)); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_NUML)); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_SCROLLL)); ASSERT_EQ(AMETA_CAPS_LOCK_ON, mapper->getMetaState()); // Toggle num lock on. process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_NUMLOCK, AKEYCODE_NUM_LOCK, 1, 0); process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_NUMLOCK, AKEYCODE_NUM_LOCK, 0, 0); ASSERT_TRUE(mFakeEventHub->getLedState(DEVICE_ID, LED_CAPSL)); ASSERT_TRUE(mFakeEventHub->getLedState(DEVICE_ID, LED_NUML)); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_SCROLLL)); ASSERT_EQ(AMETA_CAPS_LOCK_ON | AMETA_NUM_LOCK_ON, mapper->getMetaState()); // Toggle caps lock off. process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_CAPSLOCK, AKEYCODE_CAPS_LOCK, 1, 0); process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_CAPSLOCK, AKEYCODE_CAPS_LOCK, 1, 0); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_CAPSL)); ASSERT_TRUE(mFakeEventHub->getLedState(DEVICE_ID, LED_NUML)); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_SCROLLL)); ASSERT_EQ(AMETA_NUM_LOCK_ON, mapper->getMetaState()); // Toggle scroll lock on. process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_SCROLLLOCK, AKEYCODE_SCROLL_LOCK, 1, 0); process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_SCROLLLOCK, AKEYCODE_SCROLL_LOCK, 0, 0); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_CAPSL)); ASSERT_TRUE(mFakeEventHub->getLedState(DEVICE_ID, LED_NUML)); ASSERT_TRUE(mFakeEventHub->getLedState(DEVICE_ID, LED_SCROLLL)); ASSERT_EQ(AMETA_NUM_LOCK_ON | AMETA_SCROLL_LOCK_ON, mapper->getMetaState()); // Toggle num lock off. process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_NUMLOCK, AKEYCODE_NUM_LOCK, 1, 0); process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_NUMLOCK, AKEYCODE_NUM_LOCK, 0, 0); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_CAPSL)); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_NUML)); ASSERT_TRUE(mFakeEventHub->getLedState(DEVICE_ID, LED_SCROLLL)); ASSERT_EQ(AMETA_SCROLL_LOCK_ON, mapper->getMetaState()); // Toggle scroll lock off. process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_SCROLLLOCK, AKEYCODE_SCROLL_LOCK, 1, 0); process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_SCROLLLOCK, AKEYCODE_SCROLL_LOCK, 0, 0); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_CAPSL)); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_NUML)); ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_SCROLLL)); ASSERT_EQ(AMETA_NONE, mapper->getMetaState()); } // --- TrackballInputMapperTest --- Loading
native/include/android/input.h +6 −6 Original line number Diff line number Diff line Loading @@ -116,14 +116,14 @@ enum { /* This mask is used to check whether the right META meta key is pressed. */ AMETA_META_RIGHT_ON = 0x40000, /* This mask is used to check whether the CAPS LOCK meta key is latched. */ AMETA_CAPS_LOCK_LATCHED = 0x100000, /* This mask is used to check whether the CAPS LOCK meta key is on. */ AMETA_CAPS_LOCK_ON = 0x100000, /* This mask is used to check whether the NUM LOCK meta key is latched. */ AMETA_NUM_LOCK_LATCHED = 0x200000, /* This mask is used to check whether the NUM LOCK meta key is on. */ AMETA_NUM_LOCK_ON = 0x200000, /* This mask is used to check whether the SCROLL LOCK meta key is latched. */ AMETA_SCROLL_LOCK_LATCHED = 0x400000, /* This mask is used to check whether the SCROLL LOCK meta key is on. */ AMETA_SCROLL_LOCK_ON = 0x400000, }; /* Loading