Skip to content

Commit 531d586

Browse files
sganovAndroid (Google) Code Review
authored andcommitted
Merge "Accessibility focus search and setting it from hover are performed by the client." into jb-dev
2 parents c1568fe + 8ffe8b3 commit 531d586

File tree

5 files changed

+44
-26
lines changed

5 files changed

+44
-26
lines changed

api/16.txt

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24374,12 +24374,6 @@ package android.view {
2437424374
method protected boolean verifyDrawable(android.graphics.drawable.Drawable);
2437524375
method public boolean willNotCacheDrawing();
2437624376
method public boolean willNotDraw();
24377-
field public static final int ACCESSIBILITY_FOCUS_BACKWARD = 4097; // 0x1001
24378-
field public static final int ACCESSIBILITY_FOCUS_DOWN = 4226; // 0x1082
24379-
field public static final int ACCESSIBILITY_FOCUS_FORWARD = 4098; // 0x1002
24380-
field public static final int ACCESSIBILITY_FOCUS_LEFT = 4113; // 0x1011
24381-
field public static final int ACCESSIBILITY_FOCUS_RIGHT = 4162; // 0x1042
24382-
field public static final int ACCESSIBILITY_FOCUS_UP = 4129; // 0x1021
2438324377
field public static final android.util.Property ALPHA;
2438424378
field public static final int DRAWING_CACHE_QUALITY_AUTO = 0; // 0x0
2438524379
field public static final int DRAWING_CACHE_QUALITY_HIGH = 1048576; // 0x100000
@@ -24401,7 +24395,6 @@ package android.view {
2440124395
field protected static final int[] FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET;
2440224396
field protected static final int[] FOCUSED_STATE_SET;
2440324397
field protected static final int[] FOCUSED_WINDOW_FOCUSED_STATE_SET;
24404-
field public static final int FOCUS_ACCESSIBILITY = 4096; // 0x1000
2440524398
field public static final int FOCUS_BACKWARD = 1; // 0x1
2440624399
field public static final int FOCUS_DOWN = 130; // 0x82
2440724400
field public static final int FOCUS_FORWARD = 2; // 0x2
@@ -25348,7 +25341,6 @@ package android.view.accessibility {
2534825341

2534925342
public abstract class AccessibilityNodeProvider {
2535025343
ctor public AccessibilityNodeProvider();
25351-
method public android.view.accessibility.AccessibilityNodeInfo accessibilityFocusSearch(int, int);
2535225344
method public android.view.accessibility.AccessibilityNodeInfo createAccessibilityNodeInfo(int);
2535325345
method public android.view.accessibility.AccessibilityNodeInfo findAccessibilityFocus(int);
2535425346
method public java.util.List<android.view.accessibility.AccessibilityNodeInfo> findAccessibilityNodeInfosByText(java.lang.String, int);

api/current.txt

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24374,12 +24374,6 @@ package android.view {
2437424374
method protected boolean verifyDrawable(android.graphics.drawable.Drawable);
2437524375
method public boolean willNotCacheDrawing();
2437624376
method public boolean willNotDraw();
24377-
field public static final int ACCESSIBILITY_FOCUS_BACKWARD = 4097; // 0x1001
24378-
field public static final int ACCESSIBILITY_FOCUS_DOWN = 4226; // 0x1082
24379-
field public static final int ACCESSIBILITY_FOCUS_FORWARD = 4098; // 0x1002
24380-
field public static final int ACCESSIBILITY_FOCUS_LEFT = 4113; // 0x1011
24381-
field public static final int ACCESSIBILITY_FOCUS_RIGHT = 4162; // 0x1042
24382-
field public static final int ACCESSIBILITY_FOCUS_UP = 4129; // 0x1021
2438324377
field public static final android.util.Property ALPHA;
2438424378
field public static final int DRAWING_CACHE_QUALITY_AUTO = 0; // 0x0
2438524379
field public static final int DRAWING_CACHE_QUALITY_HIGH = 1048576; // 0x100000
@@ -24401,7 +24395,6 @@ package android.view {
2440124395
field protected static final int[] FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET;
2440224396
field protected static final int[] FOCUSED_STATE_SET;
2440324397
field protected static final int[] FOCUSED_WINDOW_FOCUSED_STATE_SET;
24404-
field public static final int FOCUS_ACCESSIBILITY = 4096; // 0x1000
2440524398
field public static final int FOCUS_BACKWARD = 1; // 0x1
2440624399
field public static final int FOCUS_DOWN = 130; // 0x82
2440724400
field public static final int FOCUS_FORWARD = 2; // 0x2
@@ -25348,7 +25341,6 @@ package android.view.accessibility {
2534825341

2534925342
public abstract class AccessibilityNodeProvider {
2535025343
ctor public AccessibilityNodeProvider();
25351-
method public android.view.accessibility.AccessibilityNodeInfo accessibilityFocusSearch(int, int);
2535225344
method public android.view.accessibility.AccessibilityNodeInfo createAccessibilityNodeInfo(int);
2535325345
method public android.view.accessibility.AccessibilityNodeInfo findAccessibilityFocus(int);
2535425346
method public java.util.List<android.view.accessibility.AccessibilityNodeInfo> findAccessibilityNodeInfosByText(java.lang.String, int);

core/java/android/view/View.java

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,36 +1047,50 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
10471047
/**
10481048
* The accessibility focus which is the current user position when
10491049
* interacting with the accessibility framework.
1050+
*
1051+
* @hide
10501052
*/
10511053
public static final int FOCUS_ACCESSIBILITY = 0x00001000;
10521054

10531055
/**
10541056
* Use with {@link #focusSearch(int)}. Move acessibility focus left.
1057+
*
1058+
* @hide
10551059
*/
10561060
public static final int ACCESSIBILITY_FOCUS_LEFT = FOCUS_LEFT | FOCUS_ACCESSIBILITY;
10571061

10581062
/**
10591063
* Use with {@link #focusSearch(int)}. Move acessibility focus up.
1064+
*
1065+
* @hide
10601066
*/
10611067
public static final int ACCESSIBILITY_FOCUS_UP = FOCUS_UP | FOCUS_ACCESSIBILITY;
10621068

10631069
/**
10641070
* Use with {@link #focusSearch(int)}. Move acessibility focus right.
1071+
*
1072+
* @hide
10651073
*/
10661074
public static final int ACCESSIBILITY_FOCUS_RIGHT = FOCUS_RIGHT | FOCUS_ACCESSIBILITY;
10671075

10681076
/**
10691077
* Use with {@link #focusSearch(int)}. Move acessibility focus down.
1078+
*
1079+
* @hide
10701080
*/
10711081
public static final int ACCESSIBILITY_FOCUS_DOWN = FOCUS_DOWN | FOCUS_ACCESSIBILITY;
10721082

10731083
/**
10741084
* Use with {@link #focusSearch(int)}. Move acessibility focus forward.
1085+
*
1086+
* @hide
10751087
*/
10761088
public static final int ACCESSIBILITY_FOCUS_FORWARD = FOCUS_FORWARD | FOCUS_ACCESSIBILITY;
10771089

10781090
/**
10791091
* Use with {@link #focusSearch(int)}. Move acessibility focus backward.
1092+
*
1093+
* @hide
10801094
*/
10811095
public static final int ACCESSIBILITY_FOCUS_BACKWARD = FOCUS_BACKWARD | FOCUS_ACCESSIBILITY;
10821096

@@ -6333,6 +6347,31 @@ public void clearAccessibilityFocus() {
63336347
}
63346348
}
63356349

6350+
private void sendAccessibilityHoverEvent(int eventType) {
6351+
// Since we are not delivering to a client accessibility events from not
6352+
// important views (unless the clinet request that) we need to fire the
6353+
// event from the deepest view exposed to the client. As a consequence if
6354+
// the user crosses a not exposed view the client will see enter and exit
6355+
// of the exposed predecessor followed by and enter and exit of that same
6356+
// predecessor when entering and exiting the not exposed descendant. This
6357+
// is fine since the client has a clear idea which view is hovered at the
6358+
// price of a couple more events being sent. This is a simple and
6359+
// working solution.
6360+
View source = this;
6361+
while (true) {
6362+
if (source.includeForAccessibility()) {
6363+
source.sendAccessibilityEvent(eventType);
6364+
return;
6365+
}
6366+
ViewParent parent = source.getParent();
6367+
if (parent instanceof View) {
6368+
source = (View) parent;
6369+
} else {
6370+
return;
6371+
}
6372+
}
6373+
}
6374+
63366375
private void requestAccessibilityFocusFromHover() {
63376376
if (includeForAccessibility() && isActionableForAccessibility()) {
63386377
requestAccessibilityFocus();
@@ -7902,16 +7941,15 @@ public boolean onHoverEvent(MotionEvent event) {
79027941
|| action == MotionEvent.ACTION_HOVER_MOVE)
79037942
&& !hasHoveredChild()
79047943
&& pointInView(event.getX(), event.getY())) {
7905-
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_HOVER_ENTER);
7944+
sendAccessibilityHoverEvent(AccessibilityEvent.TYPE_VIEW_HOVER_ENTER);
79067945
mSendingHoverAccessibilityEvents = true;
7907-
requestAccessibilityFocusFromHover();
79087946
}
79097947
} else {
79107948
if (action == MotionEvent.ACTION_HOVER_EXIT
79117949
|| (action == MotionEvent.ACTION_MOVE
79127950
&& !pointInView(event.getX(), event.getY()))) {
79137951
mSendingHoverAccessibilityEvents = false;
7914-
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_HOVER_EXIT);
7952+
sendAccessibilityHoverEvent(AccessibilityEvent.TYPE_VIEW_HOVER_EXIT);
79157953
// If the window does not have input focus we take away accessibility
79167954
// focus as soon as the user stop hovering over the view.
79177955
if (mAttachInfo != null && !mAttachInfo.mHasWindowFocus) {

core/java/android/view/accessibility/AccessibilityNodeInfo.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -469,13 +469,7 @@ public AccessibilityNodeInfo findFocus(int focus) {
469469
* {@link View#FOCUS_LEFT},
470470
* {@link View#FOCUS_RIGHT},
471471
* {@link View#FOCUS_FORWARD},
472-
* {@link View#FOCUS_BACKWARD},
473-
* {@link View#ACCESSIBILITY_FOCUS_FORWARD},
474-
* {@link View#ACCESSIBILITY_FOCUS_BACKWARD},
475-
* {@link View#ACCESSIBILITY_FOCUS_UP},
476-
* {@link View#ACCESSIBILITY_FOCUS_RIGHT},
477-
* {@link View#ACCESSIBILITY_FOCUS_DOWN},
478-
* {@link View#ACCESSIBILITY_FOCUS_LEFT}.
472+
* {@link View#FOCUS_BACKWARD}.
479473
*
480474
* @return The node info for the view that can take accessibility focus.
481475
*/

core/java/android/view/accessibility/AccessibilityNodeProvider.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,8 @@ public AccessibilityNodeInfo findAccessibilityFocus(int virtualViewId) {
180180
*
181181
* @see #createAccessibilityNodeInfo(int)
182182
* @see AccessibilityNodeInfo
183+
*
184+
* @hide
183185
*/
184186
public AccessibilityNodeInfo accessibilityFocusSearch(int direction, int virtualViewId) {
185187
return null;

0 commit comments

Comments
 (0)