From 7b90d2c432fd7ffbf0022fac9db921cf39197ac6 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Tue, 20 May 2014 15:07:45 +0900 Subject: [PATCH] Refactor accessibility classes to be more generic Change-Id: Ifad1905f304bccdc39f0d5fbcab8a6353e0b4f76 --- ...ava => KeyboardAccessibilityDelegate.java} | 54 ++++++++++--------- ...=> KeyboardAccessibilityNodeProvider.java} | 7 +-- .../keyboard/MainKeyboardView.java | 15 +++--- 3 files changed, 39 insertions(+), 37 deletions(-) rename java/src/com/android/inputmethod/accessibility/{MainKeyboardAccessibilityDelegate.java => KeyboardAccessibilityDelegate.java} (88%) rename java/src/com/android/inputmethod/accessibility/{MainKeyboardAccessibilityNodeProvider.java => KeyboardAccessibilityNodeProvider.java} (97%) diff --git a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java similarity index 88% rename from java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java rename to java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java index 10929424b..7bf1c9fb2 100644 --- a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java +++ b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java @@ -32,11 +32,11 @@ import com.android.inputmethod.keyboard.Key; import com.android.inputmethod.keyboard.KeyDetector; import com.android.inputmethod.keyboard.Keyboard; import com.android.inputmethod.keyboard.KeyboardId; -import com.android.inputmethod.keyboard.MainKeyboardView; +import com.android.inputmethod.keyboard.KeyboardView; import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.utils.SubtypeLocaleUtils; -public final class MainKeyboardAccessibilityDelegate extends AccessibilityDelegateCompat { +public class KeyboardAccessibilityDelegate extends AccessibilityDelegateCompat { /** Map of keyboard modes to resource IDs. */ private static final SparseIntArray KEYBOARD_MODE_RES_IDS = new SparseIntArray(); @@ -52,9 +52,10 @@ public final class MainKeyboardAccessibilityDelegate extends AccessibilityDelega KEYBOARD_MODE_RES_IDS.put(KeyboardId.MODE_URL, R.string.keyboard_mode_url); } - private final MainKeyboardView mView; + private final KeyboardView mKeyboardView; + private final KeyDetector mKeyDetector; private Keyboard mKeyboard; - private MainKeyboardAccessibilityNodeProvider mAccessibilityNodeProvider; + private KeyboardAccessibilityNodeProvider mAccessibilityNodeProvider; private Key mLastHoverKey = null; @@ -67,14 +68,17 @@ public final class MainKeyboardAccessibilityDelegate extends AccessibilityDelega private int mLastKeyboardMode = KEYBOARD_IS_HIDDEN; private static final int KEYBOARD_IS_HIDDEN = -1; - public MainKeyboardAccessibilityDelegate(final MainKeyboardView view) { - final Context context = view.getContext(); + public KeyboardAccessibilityDelegate(final KeyboardView keyboardView, + final KeyDetector keyDetector) { + super(); + final Context context = keyboardView.getContext(); mEdgeSlop = context.getResources().getDimensionPixelSize( R.dimen.config_accessibility_edge_slop); - mView = view; + mKeyboardView = keyboardView; + mKeyDetector = keyDetector; // Ensure that the view has an accessibility delegate. - ViewCompat.setAccessibilityDelegate(view, this); + ViewCompat.setAccessibilityDelegate(keyboardView, this); } /** @@ -144,7 +148,7 @@ public final class MainKeyboardAccessibilityDelegate extends AccessibilityDelega * @param keyboard The new keyboard. */ private void announceKeyboardMode(final Keyboard keyboard) { - final Context context = mView.getContext(); + final Context context = mKeyboardView.getContext(); final int modeTextResId = KEYBOARD_MODE_RES_IDS.get(keyboard.mId.mMode); if (modeTextResId == 0) { return; @@ -194,7 +198,7 @@ public final class MainKeyboardAccessibilityDelegate extends AccessibilityDelega default: return; } - final String text = mView.getContext().getString(resId); + final String text = mKeyboardView.getContext().getString(resId); sendWindowStateChanged(text); } @@ -202,7 +206,7 @@ public final class MainKeyboardAccessibilityDelegate extends AccessibilityDelega * Announces that the keyboard has been hidden. */ private void announceKeyboardHidden() { - final Context context = mView.getContext(); + final Context context = mKeyboardView.getContext(); final String text = context.getString(R.string.announce_keyboard_hidden); sendWindowStateChanged(text); @@ -216,13 +220,13 @@ public final class MainKeyboardAccessibilityDelegate extends AccessibilityDelega private void sendWindowStateChanged(final String text) { final AccessibilityEvent stateChange = AccessibilityEvent.obtain( AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); - mView.onInitializeAccessibilityEvent(stateChange); + mKeyboardView.onInitializeAccessibilityEvent(stateChange); stateChange.getText().add(text); stateChange.setContentDescription(null); - final ViewParent parent = mView.getParent(); + final ViewParent parent = mKeyboardView.getParent(); if (parent != null) { - parent.requestSendAccessibilityEvent(mView, stateChange); + parent.requestSendAccessibilityEvent(mKeyboardView, stateChange); } } @@ -235,7 +239,7 @@ public final class MainKeyboardAccessibilityDelegate extends AccessibilityDelega * @return The accessibility node provider for the current keyboard. */ @Override - public MainKeyboardAccessibilityNodeProvider getAccessibilityNodeProvider(final View host) { + public KeyboardAccessibilityNodeProvider getAccessibilityNodeProvider(final View host) { return getAccessibilityNodeProvider(); } @@ -243,18 +247,16 @@ public final class MainKeyboardAccessibilityDelegate extends AccessibilityDelega * Receives hover events when touch exploration is turned on in SDK versions ICS and higher. * * @param event The hover event. - * @param keyDetector The {@link KeyDetector} to determine on which key the event - * is hovering. * @return {@code true} if the event is handled */ - public boolean dispatchHoverEvent(final MotionEvent event, final KeyDetector keyDetector) { + public boolean dispatchHoverEvent(final MotionEvent event) { final int x = (int) event.getX(); final int y = (int) event.getY(); final Key previousKey = mLastHoverKey; final Key key; if (pointInView(x, y)) { - key = keyDetector.detectHitKey(x, y); + key = mKeyDetector.detectHitKey(x, y); } else { key = null; } @@ -283,12 +285,12 @@ public final class MainKeyboardAccessibilityDelegate extends AccessibilityDelega /** * @return A lazily-instantiated node provider for this view delegate. */ - private MainKeyboardAccessibilityNodeProvider getAccessibilityNodeProvider() { + private KeyboardAccessibilityNodeProvider getAccessibilityNodeProvider() { // Instantiate the provide only when requested. Since the system // will call this method multiple times it is a good practice to // cache the provider instance. if (mAccessibilityNodeProvider == null) { - mAccessibilityNodeProvider = new MainKeyboardAccessibilityNodeProvider(mView); + mAccessibilityNodeProvider = new KeyboardAccessibilityNodeProvider(mKeyboardView); } return mAccessibilityNodeProvider; } @@ -302,8 +304,8 @@ public final class MainKeyboardAccessibilityDelegate extends AccessibilityDelega */ private boolean pointInView(final int localX, final int localY) { return (localX >= mEdgeSlop) && (localY >= mEdgeSlop) - && (localX < (mView.getWidth() - mEdgeSlop)) - && (localY < (mView.getHeight() - mEdgeSlop)); + && (localX < (mKeyboardView.getWidth() - mEdgeSlop)) + && (localY < (mKeyboardView.getHeight() - mEdgeSlop)); } /** @@ -318,7 +320,7 @@ public final class MainKeyboardAccessibilityDelegate extends AccessibilityDelega final long downTime = SystemClock.uptimeMillis(); final MotionEvent downEvent = MotionEvent.obtain( downTime, downTime, MotionEvent.ACTION_DOWN, x, y, 0); - mView.onTouchEvent(downEvent); + mKeyboardView.onTouchEvent(downEvent); downEvent.recycle(); return downTime; } @@ -334,7 +336,7 @@ public final class MainKeyboardAccessibilityDelegate extends AccessibilityDelega final int y = key.getHitBox().centerY(); final MotionEvent upEvent = MotionEvent.obtain( downTime, SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, x, y, 0); - mView.onTouchEvent(upEvent); + mKeyboardView.onTouchEvent(upEvent); upEvent.recycle(); } @@ -373,7 +375,7 @@ public final class MainKeyboardAccessibilityDelegate extends AccessibilityDelega if (key == null) { return false; } - final MainKeyboardAccessibilityNodeProvider provider = getAccessibilityNodeProvider(); + final KeyboardAccessibilityNodeProvider provider = getAccessibilityNodeProvider(); switch (event.getAction()) { case MotionEvent.ACTION_HOVER_ENTER: diff --git a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityNodeProvider.java b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java similarity index 97% rename from java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityNodeProvider.java rename to java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java index f69d316c9..cddd1c7ed 100644 --- a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityNodeProvider.java +++ b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java @@ -47,8 +47,8 @@ import java.util.List; * virtual views, thus conveying their logical structure. *

*/ -public final class MainKeyboardAccessibilityNodeProvider extends AccessibilityNodeProviderCompat { - private static final String TAG = MainKeyboardAccessibilityNodeProvider.class.getSimpleName(); +public final class KeyboardAccessibilityNodeProvider extends AccessibilityNodeProviderCompat { + private static final String TAG = KeyboardAccessibilityNodeProvider.class.getSimpleName(); private static final int UNDEFINED = Integer.MIN_VALUE; private final KeyCodeDescriptionMapper mKeyCodeDescriptionMapper; @@ -69,7 +69,8 @@ public final class MainKeyboardAccessibilityNodeProvider extends AccessibilityNo /** The current keyboard. */ private Keyboard mKeyboard; - public MainKeyboardAccessibilityNodeProvider(final KeyboardView keyboardView) { + public KeyboardAccessibilityNodeProvider(final KeyboardView keyboardView) { + super(); mKeyCodeDescriptionMapper = KeyCodeDescriptionMapper.getInstance(); mAccessibilityUtils = AccessibilityUtils.getInstance(); mKeyboardView = keyboardView; diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java index 26b6dd06a..a8a23db22 100644 --- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java @@ -38,7 +38,7 @@ import android.view.inputmethod.InputMethodSubtype; import android.widget.TextView; import com.android.inputmethod.accessibility.AccessibilityUtils; -import com.android.inputmethod.accessibility.MainKeyboardAccessibilityDelegate; +import com.android.inputmethod.accessibility.KeyboardAccessibilityDelegate; import com.android.inputmethod.annotations.ExternallyReferenced; import com.android.inputmethod.keyboard.internal.DrawingHandler; import com.android.inputmethod.keyboard.internal.DrawingPreviewPlacerView; @@ -170,7 +170,7 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack private final DrawingHandler mDrawingHandler = new DrawingHandler(this); - private final MainKeyboardAccessibilityDelegate mAccessibilityDelegate; + private final KeyboardAccessibilityDelegate mAccessibilityDelegate; public MainKeyboardView(final Context context, final AttributeSet attrs) { this(context, attrs, R.attr.mainKeyboardViewStyle); @@ -269,7 +269,7 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack mLanguageOnSpacebarHorizontalMargin = (int)getResources().getDimension( R.dimen.config_language_on_spacebar_horizontal_margin); - mAccessibilityDelegate = new MainKeyboardAccessibilityDelegate(this); + mAccessibilityDelegate = new KeyboardAccessibilityDelegate(this, mKeyDetector); } @Override @@ -773,12 +773,11 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack */ @Override public boolean dispatchHoverEvent(final MotionEvent event) { - if (AccessibilityUtils.getInstance().isTouchExplorationEnabled()) { - return mAccessibilityDelegate.dispatchHoverEvent(event, mKeyDetector); + if (!AccessibilityUtils.getInstance().isTouchExplorationEnabled()) { + // Reflection doesn't support calling superclass methods. + return false; } - - // Reflection doesn't support calling superclass methods. - return false; + return mAccessibilityDelegate.dispatchHoverEvent(event); } public void updateShortcutKey(final boolean available) {