diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java b/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java
index 00ea20d..b266986 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java
@@ -26,9 +26,10 @@
      *
      * @param primaryCode the unicode of the key being pressed. If the touch is not on a valid key,
      *            the value will be zero.
+     * @param isRepeatKey true if pressing has occurred while key repeat input.
      * @param isSinglePointer true if pressing has occurred while no other key is being pressed.
      */
-    public void onPressKey(int primaryCode, boolean isSinglePointer);
+    public void onPressKey(int primaryCode, boolean isRepeatKey, boolean isSinglePointer);
 
     /**
      * Called when the user releases a key. This is sent after the {@link #onCodeInput} is called.
@@ -102,7 +103,7 @@
 
     public static class Adapter implements KeyboardActionListener {
         @Override
-        public void onPressKey(int primaryCode, boolean isSinglePointer) {}
+        public void onPressKey(int primaryCode, boolean isRepeatKey, boolean isSinglePointer) {}
         @Override
         public void onReleaseKey(int primaryCode, boolean withSliding) {}
         @Override
diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
index f85e604..8cd5b1a 100644
--- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
@@ -246,7 +246,7 @@
                     startTypingStateTimer(currentKey);
                     final KeyboardActionListener listener =
                             keyboardView.getKeyboardActionListener();
-                    listener.onPressKey(code, true /* isSinglePointer */);
+                    listener.onPressKey(code, true /* isRepeatKey */, true /* isSinglePointer */);
                     listener.onCodeInput(code,
                             Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE);
                 }
@@ -987,7 +987,7 @@
         if (key.hasNoPanelAutoMoreKey()) {
             final int moreKeyCode = key.mMoreKeys[0].mCode;
             tracker.onLongPressed();
-            listener.onPressKey(moreKeyCode, true /* isSinglePointer */);
+            listener.onPressKey(moreKeyCode, false /* isRepeatKey */, true /* isSinglePointer */);
             listener.onCodeInput(moreKeyCode,
                     Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE);
             listener.onReleaseKey(moreKeyCode, false /* withSliding */);
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index 5320759..0f4dbd5 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -456,7 +456,8 @@
             return false;
         }
         if (key.isEnabled()) {
-            mListener.onPressKey(key.mCode, getActivePointerTrackerCount() == 1);
+            mListener.onPressKey(key.mCode, false /* isRepeatKey */,
+                    getActivePointerTrackerCount() == 1);
             final boolean keyboardLayoutHasBeenChanged = mKeyboardLayoutHasBeenChanged;
             mKeyboardLayoutHasBeenChanged = false;
             mTimerProxy.startTypingStateTimer(key);
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 8f5e571..7890dbb 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -2677,22 +2677,30 @@
         }
     }
 
+    private void hapticAndAudioFeedback(final int code, final boolean isRepeatKey) {
+        final MainKeyboardView keyboardView = mKeyboardSwitcher.getMainKeyboardView();
+        if (keyboardView != null && keyboardView.isInSlidingKeyInput()) {
+            // No need to feedback while sliding input.
+            return;
+        }
+        if (isRepeatKey && code == Constants.CODE_DELETE && !mConnection.canDeleteCharacters()) {
+            // No need to feedback when repeating delete key will have no effect.
+            return;
+        }
+        AudioAndHapticFeedbackManager.getInstance().hapticAndAudioFeedback(code, keyboardView);
+    }
+
     // Callback of the {@link KeyboardActionListener}. This is called when a key is depressed;
     // release matching call is {@link #onReleaseKey(int,boolean)} below.
     @Override
-    public void onPressKey(final int primaryCode, final boolean isSinglePointer) {
+    public void onPressKey(final int primaryCode, final boolean isRepeatKey,
+            final boolean isSinglePointer) {
         mKeyboardSwitcher.onPressKey(primaryCode, isSinglePointer);
-        final MainKeyboardView mKeyboardView = mKeyboardSwitcher.getMainKeyboardView();
-        final boolean noFeedback = (mKeyboardView != null && mKeyboardView.isInSlidingKeyInput())
-                || (primaryCode == Constants.CODE_DELETE && !mConnection.canDeleteCharacters());
-        if (!noFeedback) {
-            AudioAndHapticFeedbackManager.getInstance().hapticAndAudioFeedback(
-                    primaryCode, mKeyboardView);
-        }
+        hapticAndAudioFeedback(primaryCode, isRepeatKey);
     }
 
     // Callback of the {@link KeyboardActionListener}. This is called when a key is released;
-    // press matching call is {@link #onPressKey(int,boolean)} above.
+    // press matching call is {@link #onPressKey(int,boolean,boolean)} above.
     @Override
     public void onReleaseKey(final int primaryCode, final boolean withSliding) {
         mKeyboardSwitcher.onReleaseKey(primaryCode, withSliding);
