diff options
author | Svetoslav Ganov <svetoslavganov@google.com> | 2012-06-18 10:32:16 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2012-06-18 10:32:16 -0700 |
commit | 11832db437d04d71dec9a78382138b2dd6518e37 (patch) | |
tree | 40a47d1d992de45441e8641176056c1fc7ea61b8 /core | |
parent | d18d623fe95ccf1c8aace064d0fcdd2818c19578 (diff) | |
parent | 531d5866d8e2529e2ae1c6ef12202119753bec03 (diff) | |
download | frameworks_base-11832db437d04d71dec9a78382138b2dd6518e37.zip frameworks_base-11832db437d04d71dec9a78382138b2dd6518e37.tar.gz frameworks_base-11832db437d04d71dec9a78382138b2dd6518e37.tar.bz2 |
am 531d5866: Merge "Accessibility focus search and setting it from hover are performed by the client." into jb-dev
* commit '531d5866d8e2529e2ae1c6ef12202119753bec03':
Accessibility focus search and setting it from hover are performed by the client.
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/view/View.java | 44 | ||||
-rw-r--r-- | core/java/android/view/accessibility/AccessibilityNodeInfo.java | 8 | ||||
-rw-r--r-- | core/java/android/view/accessibility/AccessibilityNodeProvider.java | 2 |
3 files changed, 44 insertions, 10 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 816b631..db3ba40 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -1047,36 +1047,50 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal /** * The accessibility focus which is the current user position when * interacting with the accessibility framework. + * + * @hide */ public static final int FOCUS_ACCESSIBILITY = 0x00001000; /** * Use with {@link #focusSearch(int)}. Move acessibility focus left. + * + * @hide */ public static final int ACCESSIBILITY_FOCUS_LEFT = FOCUS_LEFT | FOCUS_ACCESSIBILITY; /** * Use with {@link #focusSearch(int)}. Move acessibility focus up. + * + * @hide */ public static final int ACCESSIBILITY_FOCUS_UP = FOCUS_UP | FOCUS_ACCESSIBILITY; /** * Use with {@link #focusSearch(int)}. Move acessibility focus right. + * + * @hide */ public static final int ACCESSIBILITY_FOCUS_RIGHT = FOCUS_RIGHT | FOCUS_ACCESSIBILITY; /** * Use with {@link #focusSearch(int)}. Move acessibility focus down. + * + * @hide */ public static final int ACCESSIBILITY_FOCUS_DOWN = FOCUS_DOWN | FOCUS_ACCESSIBILITY; /** * Use with {@link #focusSearch(int)}. Move acessibility focus forward. + * + * @hide */ public static final int ACCESSIBILITY_FOCUS_FORWARD = FOCUS_FORWARD | FOCUS_ACCESSIBILITY; /** * Use with {@link #focusSearch(int)}. Move acessibility focus backward. + * + * @hide */ public static final int ACCESSIBILITY_FOCUS_BACKWARD = FOCUS_BACKWARD | FOCUS_ACCESSIBILITY; @@ -6333,6 +6347,31 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal } } + private void sendAccessibilityHoverEvent(int eventType) { + // Since we are not delivering to a client accessibility events from not + // important views (unless the clinet request that) we need to fire the + // event from the deepest view exposed to the client. As a consequence if + // the user crosses a not exposed view the client will see enter and exit + // of the exposed predecessor followed by and enter and exit of that same + // predecessor when entering and exiting the not exposed descendant. This + // is fine since the client has a clear idea which view is hovered at the + // price of a couple more events being sent. This is a simple and + // working solution. + View source = this; + while (true) { + if (source.includeForAccessibility()) { + source.sendAccessibilityEvent(eventType); + return; + } + ViewParent parent = source.getParent(); + if (parent instanceof View) { + source = (View) parent; + } else { + return; + } + } + } + private void requestAccessibilityFocusFromHover() { if (includeForAccessibility() && isActionableForAccessibility()) { requestAccessibilityFocus(); @@ -7902,16 +7941,15 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal || action == MotionEvent.ACTION_HOVER_MOVE) && !hasHoveredChild() && pointInView(event.getX(), event.getY())) { - sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_HOVER_ENTER); + sendAccessibilityHoverEvent(AccessibilityEvent.TYPE_VIEW_HOVER_ENTER); mSendingHoverAccessibilityEvents = true; - requestAccessibilityFocusFromHover(); } } else { if (action == MotionEvent.ACTION_HOVER_EXIT || (action == MotionEvent.ACTION_MOVE && !pointInView(event.getX(), event.getY()))) { mSendingHoverAccessibilityEvents = false; - sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_HOVER_EXIT); + sendAccessibilityHoverEvent(AccessibilityEvent.TYPE_VIEW_HOVER_EXIT); // If the window does not have input focus we take away accessibility // focus as soon as the user stop hovering over the view. if (mAttachInfo != null && !mAttachInfo.mHasWindowFocus) { diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java index 3834fd6..3ad3a55 100644 --- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java +++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java @@ -469,13 +469,7 @@ public class AccessibilityNodeInfo implements Parcelable { * {@link View#FOCUS_LEFT}, * {@link View#FOCUS_RIGHT}, * {@link View#FOCUS_FORWARD}, - * {@link View#FOCUS_BACKWARD}, - * {@link View#ACCESSIBILITY_FOCUS_FORWARD}, - * {@link View#ACCESSIBILITY_FOCUS_BACKWARD}, - * {@link View#ACCESSIBILITY_FOCUS_UP}, - * {@link View#ACCESSIBILITY_FOCUS_RIGHT}, - * {@link View#ACCESSIBILITY_FOCUS_DOWN}, - * {@link View#ACCESSIBILITY_FOCUS_LEFT}. + * {@link View#FOCUS_BACKWARD}. * * @return The node info for the view that can take accessibility focus. */ diff --git a/core/java/android/view/accessibility/AccessibilityNodeProvider.java b/core/java/android/view/accessibility/AccessibilityNodeProvider.java index e60716d..c17cb8a 100644 --- a/core/java/android/view/accessibility/AccessibilityNodeProvider.java +++ b/core/java/android/view/accessibility/AccessibilityNodeProvider.java @@ -180,6 +180,8 @@ public abstract class AccessibilityNodeProvider { * * @see #createAccessibilityNodeInfo(int) * @see AccessibilityNodeInfo + * + * @hide */ public AccessibilityNodeInfo accessibilityFocusSearch(int direction, int virtualViewId) { return null; |