OSDN Git Service

Fix getSwitchState.
authorJeff Brown <jeffbrown@android.com>
Thu, 20 Jan 2011 04:35:47 +0000 (20:35 -0800)
committerJeff Brown <jeffbrown@android.com>
Thu, 20 Jan 2011 04:35:47 +0000 (20:35 -0800)
InputReader::getSwitchState always returns AKEY_STATE_UNKNOWN
because SwitchInputMapper::getSources() returns 0 which cannot
match any source mask including AINPUT_SOURCE_ANY.  As a result
initial lid switch detection is broken.

This change adds a new source constant AINPUT_SOURCE_SWITCH
that indicates that the source has switches.

Change-Id: I5321ecf0ce84f1c2b4535f6c163d3f4dcf9b7a9b

include/ui/Input.h
libs/ui/InputReader.cpp
libs/ui/tests/InputReader_test.cpp

index 8c6018b..4e809d6 100644 (file)
@@ -38,6 +38,15 @@ enum {
     AKEY_EVENT_FLAG_START_TRACKING = 0x40000000
 };
 
+enum {
+    /*
+     * Indicates that an input device has switches.
+     * This input source flag is hidden from the API because switches are only used by the system
+     * and applications have no way to interact with them.
+     */
+    AINPUT_SOURCE_SWITCH = 0x80000000,
+};
+
 /*
  * Maximum number of pointers supported per motion event.
  * Smallest number of pointers is 1.
index 3197ab2..8000b2d 100644 (file)
@@ -806,7 +806,7 @@ SwitchInputMapper::~SwitchInputMapper() {
 }
 
 uint32_t SwitchInputMapper::getSources() {
-    return 0;
+    return AINPUT_SOURCE_SWITCH;
 }
 
 void SwitchInputMapper::process(const RawEvent* rawEvent) {
index de4b05a..c53d9c0 100644 (file)
@@ -1356,7 +1356,7 @@ TEST_F(SwitchInputMapperTest, GetSources) {
     SwitchInputMapper* mapper = new SwitchInputMapper(mDevice);
     addMapperAndConfigure(mapper);
 
-    ASSERT_EQ(uint32_t(0), mapper->getSources());
+    ASSERT_EQ(uint32_t(AINPUT_SOURCE_SWITCH), mapper->getSources());
 }
 
 TEST_F(SwitchInputMapperTest, GetSwitchState) {