diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java
index d95c5b0..739758c 100644
--- a/core/java/android/view/ViewConfiguration.java
+++ b/core/java/android/view/ViewConfiguration.java
@@ -74,11 +74,16 @@
     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 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 77cec5d..fc32d5a 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.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 @@
             
             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 00d0af1..3be3b1b 100644
--- a/services/jni/com_android_server_InputManager.cpp
+++ b/services/jni/com_android_server_InputManager.cpp
@@ -67,6 +67,8 @@
     jmethodID filterJumpyTouchEvents;
     jmethodID getVirtualKeyQuietTimeMillis;
     jmethodID getExcludedDeviceNames;
+    jmethodID getKeyRepeatTimeout;
+    jmethodID getKeyRepeatDelay;
     jmethodID getMaxEventsPerSecond;
     jmethodID getPointerLayer;
     jmethodID getPointerIcon;
@@ -199,6 +201,10 @@
     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 @@
 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 @@
         // 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 @@
     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");
 
