diff options
| -rw-r--r-- | core/java/android/view/ViewConfiguration.java | 27 | ||||
| -rw-r--r-- | services/java/com/android/server/wm/InputManager.java | 13 | ||||
| -rw-r--r-- | services/jni/com_android_server_InputManager.cpp | 40 |
3 files changed, 72 insertions, 8 deletions
diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java index d95c5b0cd775..739758c8c79f 100644 --- a/core/java/android/view/ViewConfiguration.java +++ b/core/java/android/view/ViewConfiguration.java @@ -74,11 +74,16 @@ public class ViewConfiguration { private static final int PRESSED_STATE_DURATION = 125; /** - * Defines the duration in milliseconds before a press turns into + * Defines the default duration in milliseconds before a press turns into * a long press */ - private static final int DEFAULTLONG_PRESS_TIMEOUT = 500; - + private static final int DEFAULT_LONG_PRESS_TIMEOUT = 500; + + /** + * Defines the time between successive key repeats in milliseconds. + */ + private static final int KEY_REPEAT_DELAY = 50; + /** * Defines the duration in milliseconds a user needs to hold down the * appropriate button to bring up the global actions dialog (power off, @@ -330,7 +335,21 @@ public class ViewConfiguration { */ public static int getLongPressTimeout() { return AppGlobals.getIntCoreSetting(Settings.Secure.LONG_PRESS_TIMEOUT, - DEFAULTLONG_PRESS_TIMEOUT); + DEFAULT_LONG_PRESS_TIMEOUT); + } + + /** + * @return the time before the first key repeat in milliseconds. + */ + public static int getKeyRepeatTimeout() { + return getLongPressTimeout(); + } + + /** + * @return the time between successive key repeats in milliseconds. + */ + public static int getKeyRepeatDelay() { + return KEY_REPEAT_DELAY; } /** diff --git a/services/java/com/android/server/wm/InputManager.java b/services/java/com/android/server/wm/InputManager.java index 77cec5d737ec..fc32d5a91761 100644 --- a/services/java/com/android/server/wm/InputManager.java +++ b/services/java/com/android/server/wm/InputManager.java @@ -40,6 +40,7 @@ import android.view.InputDevice; import android.view.InputEvent; import android.view.KeyEvent; import android.view.Surface; +import android.view.ViewConfiguration; import android.view.WindowManager; import java.io.File; @@ -529,7 +530,17 @@ public class InputManager { return names.toArray(new String[names.size()]); } - + + @SuppressWarnings("unused") + public int getKeyRepeatTimeout() { + return ViewConfiguration.getKeyRepeatTimeout(); + } + + @SuppressWarnings("unused") + public int getKeyRepeatDelay() { + return ViewConfiguration.getKeyRepeatDelay(); + } + @SuppressWarnings("unused") public int getMaxEventsPerSecond() { int result = 0; diff --git a/services/jni/com_android_server_InputManager.cpp b/services/jni/com_android_server_InputManager.cpp index 00d0af1c0f37..3be3b1b03aa8 100644 --- a/services/jni/com_android_server_InputManager.cpp +++ b/services/jni/com_android_server_InputManager.cpp @@ -67,6 +67,8 @@ static struct { jmethodID filterJumpyTouchEvents; jmethodID getVirtualKeyQuietTimeMillis; jmethodID getExcludedDeviceNames; + jmethodID getKeyRepeatTimeout; + jmethodID getKeyRepeatDelay; jmethodID getMaxEventsPerSecond; jmethodID getPointerLayer; jmethodID getPointerIcon; @@ -199,6 +201,10 @@ private: int32_t mFilterJumpyTouchEvents; nsecs_t mVirtualKeyQuietTime; + // Cached key repeat policy. + nsecs_t mKeyRepeatTimeout; + nsecs_t mKeyRepeatDelay; + // Cached throttling policy. int32_t mMaxEventsPerSecond; @@ -234,6 +240,7 @@ private: NativeInputManager::NativeInputManager(jobject callbacksObj, const sp<Looper>& looper) : mLooper(looper), mFilterTouchEvents(-1), mFilterJumpyTouchEvents(-1), mVirtualKeyQuietTime(-1), + mKeyRepeatTimeout(-1), mKeyRepeatDelay(-1), mMaxEventsPerSecond(-1) { JNIEnv* env = jniEnv(); @@ -526,13 +533,34 @@ nsecs_t NativeInputManager::getKeyRepeatTimeout() { // Disable key repeat when the screen is off. return -1; } else { - // TODO use ViewConfiguration.getLongPressTimeout() - return milliseconds_to_nanoseconds(500); + if (mKeyRepeatTimeout < 0) { + JNIEnv* env = jniEnv(); + + jint result = env->CallIntMethod(mCallbacksObj, + gCallbacksClassInfo.getKeyRepeatTimeout); + if (checkAndClearExceptionFromCallback(env, "getKeyRepeatTimeout")) { + result = 500; + } + + mKeyRepeatTimeout = milliseconds_to_nanoseconds(result); + } + return mKeyRepeatTimeout; } } nsecs_t NativeInputManager::getKeyRepeatDelay() { - return milliseconds_to_nanoseconds(50); + if (mKeyRepeatDelay < 0) { + JNIEnv* env = jniEnv(); + + jint result = env->CallIntMethod(mCallbacksObj, + gCallbacksClassInfo.getKeyRepeatDelay); + if (checkAndClearExceptionFromCallback(env, "getKeyRepeatDelay")) { + result = 50; + } + + mKeyRepeatDelay = milliseconds_to_nanoseconds(result); + } + return mKeyRepeatDelay; } int32_t NativeInputManager::getMaxEventsPerSecond() { @@ -1262,6 +1290,12 @@ int register_android_server_InputManager(JNIEnv* env) { GET_METHOD_ID(gCallbacksClassInfo.getExcludedDeviceNames, gCallbacksClassInfo.clazz, "getExcludedDeviceNames", "()[Ljava/lang/String;"); + GET_METHOD_ID(gCallbacksClassInfo.getKeyRepeatTimeout, gCallbacksClassInfo.clazz, + "getKeyRepeatTimeout", "()I"); + + GET_METHOD_ID(gCallbacksClassInfo.getKeyRepeatDelay, gCallbacksClassInfo.clazz, + "getKeyRepeatDelay", "()I"); + GET_METHOD_ID(gCallbacksClassInfo.getMaxEventsPerSecond, gCallbacksClassInfo.clazz, "getMaxEventsPerSecond", "()I"); |