From e9d9b37b5a6b4841ba477e7b9358037cfaef726a Mon Sep 17 00:00:00 2001
From: "Tadashi G. Takaoka" <takaoka@google.com>
Date: Fri, 13 Jun 2014 13:33:19 +0900
Subject: [PATCH] Add EmojiPageKeyboardAccessibilityDelegate

Because EmojiPageKeyboardView doesn't use PointerTracker to handle
MotionEvent, a dedicated accessibility delegate is needed. Then the
recent tab can be updated even with accessibility mode on.

Bug: 15582599
Change-Id: I63d75b9aca21ec44f1f77d2eaaf2ba7813992183
---
 .../keyboard/emoji/EmojiPageKeyboardView.java | 20 +++++++++++++++++--
 .../android/inputmethod/latin/Constants.java  |  6 +++---
 2 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java
index 80ba60c82c..a34dbef4be 100644
--- a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java
@@ -55,7 +55,22 @@ final class EmojiPageKeyboardView extends KeyboardView implements
     private OnKeyEventListener mListener = EMPTY_LISTENER;
     private final KeyDetector mKeyDetector = new KeyDetector();
     private final GestureDetector mGestureDetector;
-    private KeyboardAccessibilityDelegate<EmojiPageKeyboardView> mAccessibilityDelegate;
+    private EmojiPageKeyboardAccessibilityDelegate mAccessibilityDelegate;
+
+    private static final class EmojiPageKeyboardAccessibilityDelegate
+            extends KeyboardAccessibilityDelegate<EmojiPageKeyboardView> {
+        public EmojiPageKeyboardAccessibilityDelegate(final EmojiPageKeyboardView keyboardView,
+                final KeyDetector keyDetector) {
+            super(keyboardView, keyDetector);
+        }
+
+        @Override
+        protected void simulateTouchEvent(int touchAction, MotionEvent hoverEvent) {
+            final MotionEvent touchEvent = synthesizeTouchEvent(touchAction, hoverEvent);
+            mKeyboardView.onTouchEvent(touchEvent);
+            touchEvent.recycle();
+        }
+    }
 
     public EmojiPageKeyboardView(final Context context, final AttributeSet attrs) {
         this(context, attrs, R.attr.keyboardViewStyle);
@@ -82,7 +97,8 @@ final class EmojiPageKeyboardView extends KeyboardView implements
         mKeyDetector.setKeyboard(keyboard, 0 /* correctionX */, 0 /* correctionY */);
         if (AccessibilityUtils.getInstance().isAccessibilityEnabled()) {
             if (mAccessibilityDelegate == null) {
-                mAccessibilityDelegate = new KeyboardAccessibilityDelegate<>(this, mKeyDetector);
+                mAccessibilityDelegate = new EmojiPageKeyboardAccessibilityDelegate(
+                        this, mKeyDetector);
             }
             mAccessibilityDelegate.setKeyboard(keyboard);
         } else {
diff --git a/java/src/com/android/inputmethod/latin/Constants.java b/java/src/com/android/inputmethod/latin/Constants.java
index fa51436de8..f9339361a8 100644
--- a/java/src/com/android/inputmethod/latin/Constants.java
+++ b/java/src/com/android/inputmethod/latin/Constants.java
@@ -263,10 +263,10 @@ public final class Constants {
         case CODE_ENTER: return "enter";
         case CODE_SPACE: return "space";
         default:
-            if (code < CODE_SPACE) return String.format("\\u%02x", code);
+            if (code < CODE_SPACE) return String.format("\\u%02X", code);
             if (code < 0x100) return String.format("%c", code);
-            if (code < 0x10000) return String.format("\\u04x", code);
-            return String.format("\\U%05x", code);
+            if (code < 0x10000) return String.format("\\u%04X", code);
+            return String.format("\\U%05X", code);
         }
     }
 
-- 
GitLab