diff options
| -rw-r--r-- | api/16.txt | 8 | ||||
| -rw-r--r-- | api/current.txt | 8 | ||||
| -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 |
5 files changed, 44 insertions, 26 deletions
diff --git a/api/16.txt b/api/16.txt index eb09d851fa0f..ec3a308977e0 100644 --- a/api/16.txt +++ b/api/16.txt @@ -24358,12 +24358,6 @@ package android.view { method protected boolean verifyDrawable(android.graphics.drawable.Drawable); method public boolean willNotCacheDrawing(); method public boolean willNotDraw(); - field public static final int ACCESSIBILITY_FOCUS_BACKWARD = 4097; // 0x1001 - field public static final int ACCESSIBILITY_FOCUS_DOWN = 4226; // 0x1082 - field public static final int ACCESSIBILITY_FOCUS_FORWARD = 4098; // 0x1002 - field public static final int ACCESSIBILITY_FOCUS_LEFT = 4113; // 0x1011 - field public static final int ACCESSIBILITY_FOCUS_RIGHT = 4162; // 0x1042 - field public static final int ACCESSIBILITY_FOCUS_UP = 4129; // 0x1021 field public static final android.util.Property ALPHA; field public static final int DRAWING_CACHE_QUALITY_AUTO = 0; // 0x0 field public static final int DRAWING_CACHE_QUALITY_HIGH = 1048576; // 0x100000 @@ -24385,7 +24379,6 @@ package android.view { field protected static final int[] FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET; field protected static final int[] FOCUSED_STATE_SET; field protected static final int[] FOCUSED_WINDOW_FOCUSED_STATE_SET; - field public static final int FOCUS_ACCESSIBILITY = 4096; // 0x1000 field public static final int FOCUS_BACKWARD = 1; // 0x1 field public static final int FOCUS_DOWN = 130; // 0x82 field public static final int FOCUS_FORWARD = 2; // 0x2 @@ -25332,7 +25325,6 @@ package android.view.accessibility { public abstract class AccessibilityNodeProvider { ctor public AccessibilityNodeProvider(); - method public android.view.accessibility.AccessibilityNodeInfo accessibilityFocusSearch(int, int); method public android.view.accessibility.AccessibilityNodeInfo createAccessibilityNodeInfo(int); method public android.view.accessibility.AccessibilityNodeInfo findAccessibilityFocus(int); method public java.util.List<android.view.accessibility.AccessibilityNodeInfo> findAccessibilityNodeInfosByText(java.lang.String, int); diff --git a/api/current.txt b/api/current.txt index a62698ef351b..9c3a3b431778 100644 --- a/api/current.txt +++ b/api/current.txt @@ -24369,12 +24369,6 @@ package android.view { method protected boolean verifyDrawable(android.graphics.drawable.Drawable); method public boolean willNotCacheDrawing(); method public boolean willNotDraw(); - field public static final int ACCESSIBILITY_FOCUS_BACKWARD = 4097; // 0x1001 - field public static final int ACCESSIBILITY_FOCUS_DOWN = 4226; // 0x1082 - field public static final int ACCESSIBILITY_FOCUS_FORWARD = 4098; // 0x1002 - field public static final int ACCESSIBILITY_FOCUS_LEFT = 4113; // 0x1011 - field public static final int ACCESSIBILITY_FOCUS_RIGHT = 4162; // 0x1042 - field public static final int ACCESSIBILITY_FOCUS_UP = 4129; // 0x1021 field public static final android.util.Property ALPHA; field public static final int DRAWING_CACHE_QUALITY_AUTO = 0; // 0x0 field public static final int DRAWING_CACHE_QUALITY_HIGH = 1048576; // 0x100000 @@ -24396,7 +24390,6 @@ package android.view { field protected static final int[] FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET; field protected static final int[] FOCUSED_STATE_SET; field protected static final int[] FOCUSED_WINDOW_FOCUSED_STATE_SET; - field public static final int FOCUS_ACCESSIBILITY = 4096; // 0x1000 field public static final int FOCUS_BACKWARD = 1; // 0x1 field public static final int FOCUS_DOWN = 130; // 0x82 field public static final int FOCUS_FORWARD = 2; // 0x2 @@ -25343,7 +25336,6 @@ package android.view.accessibility { public abstract class AccessibilityNodeProvider { ctor public AccessibilityNodeProvider(); - method public android.view.accessibility.AccessibilityNodeInfo accessibilityFocusSearch(int, int); method public android.view.accessibility.AccessibilityNodeInfo createAccessibilityNodeInfo(int); method public android.view.accessibility.AccessibilityNodeInfo findAccessibilityFocus(int); method public java.util.List<android.view.accessibility.AccessibilityNodeInfo> findAccessibilityNodeInfosByText(java.lang.String, int); diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 816b631bf987..db3ba405c271 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 3834fd67a08e..3ad3a5557053 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 e60716d96e60..c17cb8ac0082 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; |