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.
This commit is contained in:
Svetoslav Ganov
2012-06-18 10:32:16 -07:00
committed by Android Git Automerger
5 changed files with 44 additions and 26 deletions

View File

@@ -24374,12 +24374,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
@@ -24401,7 +24395,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
@@ -25348,7 +25341,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);

View File

@@ -24375,12 +24375,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
@@ -24402,7 +24396,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
@@ -25349,7 +25342,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);

View File

@@ -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) {

View File

@@ -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.
*/

View File

@@ -180,6 +180,8 @@ public abstract class AccessibilityNodeProvider {
*
* @see #createAccessibilityNodeInfo(int)
* @see AccessibilityNodeInfo
*
* @hide
*/
public AccessibilityNodeInfo accessibilityFocusSearch(int direction, int virtualViewId) {
return null;