diff options
author | Jeff Brown <jeffbrown@google.com> | 2011-01-18 15:10:10 -0800 |
---|---|---|
committer | Jeff Brown <jeffbrown@google.com> | 2011-01-18 15:10:45 -0800 |
commit | fe50892af3b365806a767298dfd8e86447682581 (patch) | |
tree | 87df90a1ee452db7b6c096570e51181bcd919e74 /services/jni | |
parent | c10803924e45e9a607b3c5bb74316c0a84d78cd8 (diff) | |
download | frameworks_base-fe50892af3b365806a767298dfd8e86447682581.zip frameworks_base-fe50892af3b365806a767298dfd8e86447682581.tar.gz frameworks_base-fe50892af3b365806a767298dfd8e86447682581.tar.bz2 |
Filter virtual keys after touches.
Adds a new virtualKeyQuietTimeMillis configuration resource that sets
the duration for which virtual keys will be dropped after recent touches
on screen. The default value is 0; it is intended to be overridden
per device using a resource overlay.
This change is designed to help in two cases:
1. Swipes from touchscreen into virtual key area.
2. Accidental taps in virtual key area while using on-screen keyboard.
Bug: 3089163
Change-Id: Ib912d4f8a4df9966a39cd537d3ec7c24afab7225
Diffstat (limited to 'services/jni')
-rw-r--r-- | services/jni/com_android_server_InputManager.cpp | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/services/jni/com_android_server_InputManager.cpp b/services/jni/com_android_server_InputManager.cpp index e04e4c3..5b329bb 100644 --- a/services/jni/com_android_server_InputManager.cpp +++ b/services/jni/com_android_server_InputManager.cpp @@ -62,6 +62,7 @@ static struct { jmethodID checkInjectEventsPermission; jmethodID filterTouchEvents; jmethodID filterJumpyTouchEvents; + jmethodID getVirtualKeyQuietTimeMillis; jmethodID getExcludedDeviceNames; jmethodID getMaxEventsPerSecond; jmethodID getPointerLayer; @@ -159,6 +160,7 @@ public: int32_t* width, int32_t* height, int32_t* orientation); virtual bool filterTouchEvents(); virtual bool filterJumpyTouchEvents(); + virtual nsecs_t getVirtualKeyQuietTime(); virtual void getExcludedDeviceNames(Vector<String8>& outExcludedDeviceNames); virtual sp<PointerControllerInterface> obtainPointerController(int32_t deviceId); @@ -191,6 +193,7 @@ private: // Cached filtering policies. int32_t mFilterTouchEvents; int32_t mFilterJumpyTouchEvents; + nsecs_t mVirtualKeyQuietTime; // Cached throttling policy. int32_t mMaxEventsPerSecond; @@ -219,7 +222,7 @@ private: NativeInputManager::NativeInputManager(jobject callbacksObj) : - mFilterTouchEvents(-1), mFilterJumpyTouchEvents(-1), + mFilterTouchEvents(-1), mFilterJumpyTouchEvents(-1), mVirtualKeyQuietTime(-1), mMaxEventsPerSecond(-1) { JNIEnv* env = jniEnv(); @@ -355,6 +358,24 @@ bool NativeInputManager::filterJumpyTouchEvents() { return mFilterJumpyTouchEvents; } +nsecs_t NativeInputManager::getVirtualKeyQuietTime() { + if (mVirtualKeyQuietTime < 0) { + JNIEnv* env = jniEnv(); + + jint result = env->CallIntMethod(mCallbacksObj, + gCallbacksClassInfo.getVirtualKeyQuietTimeMillis); + if (checkAndClearExceptionFromCallback(env, "getVirtualKeyQuietTimeMillis")) { + result = 0; + } + if (result < 0) { + result = 0; + } + + mVirtualKeyQuietTime = milliseconds_to_nanoseconds(result); + } + return mVirtualKeyQuietTime; +} + void NativeInputManager::getExcludedDeviceNames(Vector<String8>& outExcludedDeviceNames) { outExcludedDeviceNames.clear(); @@ -1155,6 +1176,9 @@ int register_android_server_InputManager(JNIEnv* env) { GET_METHOD_ID(gCallbacksClassInfo.filterJumpyTouchEvents, gCallbacksClassInfo.clazz, "filterJumpyTouchEvents", "()Z"); + GET_METHOD_ID(gCallbacksClassInfo.getVirtualKeyQuietTimeMillis, gCallbacksClassInfo.clazz, + "getVirtualKeyQuietTimeMillis", "()I"); + GET_METHOD_ID(gCallbacksClassInfo.getExcludedDeviceNames, gCallbacksClassInfo.clazz, "getExcludedDeviceNames", "()[Ljava/lang/String;"); |