From 07b726c86b1d0b22e51b08cb4234f8212864d9f9 Mon Sep 17 00:00:00 2001 From: Svetoslav Ganov Date: Mon, 30 Apr 2012 12:24:57 -0700 Subject: [PATCH] Enabling accessibility focus only if explore by touch is on. 1. Now we will enable the accessibility focus only if Explore by Touch is enabled. Enabling this feature allows a blind user to touch the screen and set the accessibility focus at this location as well as get spoken feedback. Also an accessibility service can move the accessibility as a result of user gestures detected only if Explore by Touch is enabled. Since we will handle some gestures by default if not accessibility service does so to provide reasonable built-in navigation of the UI by "objects" we need the accessibility focus functionality. bug:6383361 Change-Id: I13ce6072a90f5838c7656379788144c99a772bf0 --- core/java/android/view/View.java | 3 ++- core/java/android/view/ViewRootImpl.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 588bb06b9d78c..a300639ba5e17 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -5942,7 +5942,8 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal * @hide */ public boolean requestAccessibilityFocus() { - if (!AccessibilityManager.getInstance(mContext).isEnabled()) { + AccessibilityManager manager = AccessibilityManager.getInstance(mContext); + if (!manager.isEnabled() || !manager.isTouchExplorationEnabled()) { return false; } if ((mViewFlags & VISIBILITY_MASK) != VISIBLE) { diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index c5c7746d4d11f..aabe0434888e6 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -2316,7 +2316,8 @@ public final class ViewRootImpl implements ViewParent, * @param canvas The canvas on which to draw. */ private void drawAccessibilityFocusedDrawableIfNeeded(Canvas canvas) { - if (!AccessibilityManager.getInstance(mView.mContext).isEnabled()) { + AccessibilityManager manager = AccessibilityManager.getInstance(mView.mContext); + if (!manager.isEnabled() || !manager.isTouchExplorationEnabled()) { return; } if (mAccessibilityFocusedHost == null || mAccessibilityFocusedHost.mAttachInfo == null) {