diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java b/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java
index 8640912891ed45901cc8b5cb0944e30054facafd..6f5420882b13a78f194eadd96344d0ab50554b83 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java
@@ -76,4 +76,21 @@ public interface KeyboardActionListener {
      * @return true if the request has been consumed, false otherwise.
      */
     public boolean onCustomRequest(int requestCode);
+
+    public static class Adapter implements KeyboardActionListener {
+        @Override
+        public void onPress(int primaryCode, boolean withSliding) {}
+        @Override
+        public void onRelease(int primaryCode, boolean withSliding) {}
+        @Override
+        public void onCodeInput(int primaryCode, int[] keyCodes, int x, int y) {}
+        @Override
+        public void onTextInput(CharSequence text) {}
+        @Override
+        public void onCancelInput() {}
+        @Override
+        public boolean onCustomRequest(int requestCode) {
+            return false;
+        }
+    }
 }
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index b61947232efbd0a38def7e1b383d000cc211230e..7ae62200d7fdb593f33bef5f2a929db8290bd9d3 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -139,20 +139,8 @@ public class PointerTracker {
     private boolean mIgnoreModifierKey;
 
     // Empty {@link KeyboardActionListener}
-    private static final KeyboardActionListener EMPTY_LISTENER = new KeyboardActionListener() {
-        @Override
-        public void onPress(int primaryCode, boolean withSliding) {}
-        @Override
-        public void onRelease(int primaryCode, boolean withSliding) {}
-        @Override
-        public void onCodeInput(int primaryCode, int[] keyCodes, int x, int y) {}
-        @Override
-        public void onTextInput(CharSequence text) {}
-        @Override
-        public void onCancelInput() {}
-        @Override
-        public boolean onCustomRequest(int requestCode) { return false; }
-    };
+    private static final KeyboardActionListener EMPTY_LISTENER =
+            new KeyboardActionListener.Adapter();
 
     public static void init(boolean hasDistinctMultitouch, Context context) {
         if (hasDistinctMultitouch) {
diff --git a/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java b/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java
index 8b8b27b39c141db60bbf07654870170c042183a4..c4428dc60e805a855d511eab87e33492d2f14cff 100644
--- a/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java
@@ -101,7 +101,8 @@ public class PopupMiniKeyboardView extends KeyboardView implements PopupPanel {
         public void cancelKeyTimers() {}
     };
 
-    private final KeyboardActionListener mMiniKeyboardListener = new KeyboardActionListener() {
+    private final KeyboardActionListener mMiniKeyboardListener =
+            new KeyboardActionListener.Adapter() {
         @Override
         public void onCodeInput(int primaryCode, int[] keyCodes, int x, int y) {
             mListener.onCodeInput(primaryCode, keyCodes, x, y);
@@ -125,8 +126,6 @@ public class PopupMiniKeyboardView extends KeyboardView implements PopupPanel {
         public void onRelease(int primaryCode, boolean withSliding) {
             mListener.onRelease(primaryCode, withSliding);
         }
-        @Override
-        public boolean onCustomRequest(int requestCode) { return false; }
     };
 
     public PopupMiniKeyboardView(Context context, AttributeSet attrs) {