From f2eba97cc09c86f9a84b61cccf3f233e1fb85a6c Mon Sep 17 00:00:00 2001 From: alanv Date: Tue, 15 May 2012 15:11:12 -0700 Subject: Make LatinIME keys accessibility focusable, clickable. Also fix speech for labeled keys. Bug: 6498563 Change-Id: I094d4db0e57fa373759a63eb3354b1ab3ab0f525 --- .../accessibility/AccessibleKeyboardViewProxy.java | 49 +++++++++++----------- 1 file changed, 24 insertions(+), 25 deletions(-) (limited to 'java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java') diff --git a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java index 34817ba4e..1b0e488bc 100644 --- a/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java +++ b/java/src/com/android/inputmethod/accessibility/AccessibleKeyboardViewProxy.java @@ -21,10 +21,10 @@ import android.inputmethodservice.InputMethodService; import android.support.v4.view.AccessibilityDelegateCompat; import android.support.v4.view.ViewCompat; import android.support.v4.view.accessibility.AccessibilityEventCompat; +import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; -import android.view.accessibility.AccessibilityEvent; import com.android.inputmethod.keyboard.Key; import com.android.inputmethod.keyboard.Keyboard; @@ -91,13 +91,7 @@ public class AccessibleKeyboardViewProxy extends AccessibilityDelegateCompat { */ @Override public AccessibilityEntityProvider getAccessibilityNodeProvider(View host) { - // 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 AccessibilityEntityProvider(mView, mInputMethod); - } - return mAccessibilityNodeProvider; + return getAccessibilityNodeProvider(); } /** @@ -120,7 +114,7 @@ public class AccessibleKeyboardViewProxy extends AccessibilityDelegateCompat { // Make sure we're not getting an EXIT event because the user slid // off the keyboard area, then force a key press. if (pointInView(x, y)) { - tracker.onRegisterKey(key); + getAccessibilityNodeProvider().simulateKeyPress(key); } //$FALL-THROUGH$ case MotionEvent.ACTION_HOVER_ENTER: @@ -136,6 +130,19 @@ public class AccessibleKeyboardViewProxy extends AccessibilityDelegateCompat { return false; } + /** + * @return A lazily-instantiated node provider for this view proxy. + */ + private AccessibilityEntityProvider 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 AccessibilityEntityProvider(mView, mInputMethod); + } + return mAccessibilityNodeProvider; + } + /** * Utility method to determine whether the given point, in local * coordinates, is inside the view, where the area of the view is contracted @@ -191,32 +198,24 @@ public class AccessibleKeyboardViewProxy extends AccessibilityDelegateCompat { return false; } + final AccessibilityEntityProvider provider = getAccessibilityNodeProvider(); + switch (event.getAction()) { case MotionEvent.ACTION_HOVER_ENTER: - sendAccessibilityEventForKey(key, AccessibilityEventCompat.TYPE_VIEW_HOVER_ENTER); + provider.sendAccessibilityEventForKey( + key, AccessibilityEventCompat.TYPE_VIEW_HOVER_ENTER); + provider.performActionForKey( + key, AccessibilityNodeInfoCompat.ACTION_ACCESSIBILITY_FOCUS, null); break; case MotionEvent.ACTION_HOVER_EXIT: - sendAccessibilityEventForKey(key, AccessibilityEventCompat.TYPE_VIEW_HOVER_EXIT); + provider.sendAccessibilityEventForKey( + key, AccessibilityEventCompat.TYPE_VIEW_HOVER_EXIT); break; } return true; } - /** - * Populates and sends an {@link AccessibilityEvent} for the specified key. - * - * @param key The key to send an event for. - * @param eventType The type of event to send. - */ - private void sendAccessibilityEventForKey(Key key, int eventType) { - final AccessibilityEntityProvider nodeProvider = getAccessibilityNodeProvider(null); - final AccessibilityEvent event = nodeProvider.createAccessibilityEvent(key, eventType); - - // Propagates the event up the view hierarchy. - mView.getParent().requestSendAccessibilityEvent(mView, event); - } - /** * Notifies the user of changes in the keyboard shift state. */ -- cgit v1.2.3-83-g751a