summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorSvetoslav Ganov <svetoslavganov@google.com>2012-06-17 15:07:29 -0700
committerSvetoslav Ganov <svetoslavganov@google.com>2012-06-17 15:07:38 -0700
commit45a02e0809c14a52aa24658666df0d41ce661857 (patch)
tree331cad95192d9753a517d2a15b61b0436d554b39 /core
parent130b4572d1f3df702e5b296a655d15a41f6d4c66 (diff)
downloadframeworks_base-45a02e0809c14a52aa24658666df0d41ce661857.zip
frameworks_base-45a02e0809c14a52aa24658666df0d41ce661857.tar.gz
frameworks_base-45a02e0809c14a52aa24658666df0d41ce661857.tar.bz2
API for finding accessibility focus in virtual tree not needed.
1. The function for finding where the accessibility focus in a virtual node tree presented by an AccessibilityNodeProvider is not needed API since the framework already keeps track of the accessibility focused virtual node in order to draw the focus rectangle. This API adds unnecessary complexity to developers of AccessibilityNodeProviders. bug:6675330 Change-Id: I84774686b06a995073a39e45b8ef22f2cd04b773
Diffstat (limited to 'core')
-rw-r--r--core/java/android/view/AccessibilityInteractionController.java6
-rw-r--r--core/java/android/view/View.java31
-rw-r--r--core/java/android/view/ViewRootImpl.java71
-rw-r--r--core/java/android/view/accessibility/AccessibilityNodeProvider.java2
4 files changed, 42 insertions, 68 deletions
diff --git a/core/java/android/view/AccessibilityInteractionController.java b/core/java/android/view/AccessibilityInteractionController.java
index 29926ca..0aabc44 100644
--- a/core/java/android/view/AccessibilityInteractionController.java
+++ b/core/java/android/view/AccessibilityInteractionController.java
@@ -480,7 +480,10 @@ final class AccessibilityInteractionController {
// focus instead fetching all provider nodes to do the search here.
AccessibilityNodeProvider provider = host.getAccessibilityNodeProvider();
if (provider != null) {
- focused = provider.findAccessibilityFocus(virtualDescendantId);
+ if (mViewRootImpl.mAccessibilityFocusedVirtualView != null) {
+ focused = AccessibilityNodeInfo.obtain(
+ mViewRootImpl.mAccessibilityFocusedVirtualView);
+ }
} else if (virtualDescendantId == View.NO_ID) {
focused = host.createAccessibilityNodeInfo();
}
@@ -804,7 +807,6 @@ final class AccessibilityInteractionController {
if (!(root instanceof ViewGroup)) {
return;
}
- ViewGroup rootGroup = (ViewGroup) root;
HashMap<View, AccessibilityNodeInfo> addedChildren =
new HashMap<View, AccessibilityNodeInfo>();
ArrayList<View> children = mTempViewList;
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index db3ba40..b1caa2f 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -4558,31 +4558,6 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
if ((event.getEventType() & POPULATING_ACCESSIBILITY_EVENT_TYPES) != 0) {
dispatchPopulateAccessibilityEvent(event);
}
- // Intercept accessibility focus events fired by virtual nodes to keep
- // track of accessibility focus position in such nodes.
- final int eventType = event.getEventType();
- switch (eventType) {
- case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED: {
- final long virtualNodeId = AccessibilityNodeInfo.getVirtualDescendantId(
- event.getSourceNodeId());
- if (virtualNodeId != AccessibilityNodeInfo.UNDEFINED) {
- ViewRootImpl viewRootImpl = getViewRootImpl();
- if (viewRootImpl != null) {
- viewRootImpl.setAccessibilityFocusedHost(this);
- }
- }
- } break;
- case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED: {
- final long virtualNodeId = AccessibilityNodeInfo.getVirtualDescendantId(
- event.getSourceNodeId());
- if (virtualNodeId != AccessibilityNodeInfo.UNDEFINED) {
- ViewRootImpl viewRootImpl = getViewRootImpl();
- if (viewRootImpl != null) {
- viewRootImpl.setAccessibilityFocusedHost(null);
- }
- }
- } break;
- }
// In the beginning we called #isShown(), so we know that getParent() is not null.
getParent().requestSendAccessibilityEvent(this, event);
}
@@ -6311,7 +6286,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
mPrivateFlags2 |= ACCESSIBILITY_FOCUSED;
ViewRootImpl viewRootImpl = getViewRootImpl();
if (viewRootImpl != null) {
- viewRootImpl.setAccessibilityFocusedHost(this);
+ viewRootImpl.setAccessibilityFocus(this, null);
}
invalidate();
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
@@ -6342,7 +6317,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
if (viewRootImpl != null) {
View focusHost = viewRootImpl.getAccessibilityFocusedHost();
if (focusHost != null && ViewRootImpl.isViewDescendantOf(focusHost, this)) {
- viewRootImpl.setAccessibilityFocusedHost(null);
+ viewRootImpl.setAccessibilityFocus(null, null);
}
}
}
@@ -7953,7 +7928,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
// 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) {
- getViewRootImpl().setAccessibilityFocusedHost(null);
+ getViewRootImpl().setAccessibilityFocus(null, null);
}
}
}
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 51fd346..6959b84 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -489,7 +489,7 @@ public final class ViewRootImpl implements ViewParent,
// Keep track of the actual window flags supplied by the client.
mClientWindowLayoutFlags = attrs.flags;
- setAccessibilityFocusedHost(null);
+ setAccessibilityFocus(null, null);
if (view instanceof RootViewSurfaceTaker) {
mSurfaceHolderCallback =
@@ -558,7 +558,7 @@ public final class ViewRootImpl implements ViewParent,
mInputChannel = null;
mFallbackEventHandler.setView(null);
unscheduleTraversals();
- setAccessibilityFocusedHost(null);
+ setAccessibilityFocus(null, null);
throw new RuntimeException("Adding window failed", e);
} finally {
if (restore) {
@@ -578,7 +578,7 @@ public final class ViewRootImpl implements ViewParent,
mAdded = false;
mFallbackEventHandler.setView(null);
unscheduleTraversals();
- setAccessibilityFocusedHost(null);
+ setAccessibilityFocus(null, null);
switch (res) {
case WindowManagerImpl.ADD_BAD_APP_TOKEN:
case WindowManagerImpl.ADD_BAD_SUBWINDOW_TOKEN:
@@ -2320,9 +2320,6 @@ public final class ViewRootImpl implements ViewParent,
}
} else {
if (mAccessibilityFocusedVirtualView == null) {
- mAccessibilityFocusedVirtualView = provider.findAccessibilityFocus(View.NO_ID);
- }
- if (mAccessibilityFocusedVirtualView == null) {
return;
}
mAccessibilityFocusedVirtualView.getBoundsInScreen(bounds);
@@ -2498,7 +2495,7 @@ public final class ViewRootImpl implements ViewParent,
return mAccessibilityFocusedVirtualView;
}
- void setAccessibilityFocusedHost(View host) {
+ void setAccessibilityFocus(View view, AccessibilityNodeInfo node) {
// If we have a virtual view with accessibility focus we need
// to clear the focus and invalidate the virtual view bounds.
if (mAccessibilityFocusedVirtualView != null) {
@@ -2526,24 +2523,16 @@ public final class ViewRootImpl implements ViewParent,
provider.performAction(virtualNodeId,
AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS, null);
}
+ focusNode.recycle();
}
if (mAccessibilityFocusedHost != null) {
// Clear accessibility focus in the view.
mAccessibilityFocusedHost.clearAccessibilityFocusNoCallbacks();
}
- // Set the new focus host.
- mAccessibilityFocusedHost = host;
-
- // If the host has a provide find the virtual descendant that has focus.
- if (mAccessibilityFocusedHost != null) {
- AccessibilityNodeProvider provider =
- mAccessibilityFocusedHost.getAccessibilityNodeProvider();
- if (provider != null) {
- mAccessibilityFocusedVirtualView = provider.findAccessibilityFocus(View.NO_ID);
- return;
- }
- }
+ // Set the new focus host and node.
+ mAccessibilityFocusedHost = view;
+ mAccessibilityFocusedVirtualView = node;
}
public void requestChildFocus(View child, View focused) {
@@ -2629,7 +2618,7 @@ public final class ViewRootImpl implements ViewParent,
destroyHardwareRenderer();
- setAccessibilityFocusedHost(null);
+ setAccessibilityFocus(null, null);
mView = null;
mAttachInfo.mRootView = null;
@@ -2910,7 +2899,7 @@ public final class ViewRootImpl implements ViewParent,
mHasHadWindowFocus = true;
}
- setAccessibilityFocusedHost(null);
+ setAccessibilityFocus(null, null);
if (mView != null && mAccessibilityManager.isEnabled()) {
if (hasWindowFocus) {
@@ -2982,7 +2971,7 @@ public final class ViewRootImpl implements ViewParent,
invalidateDisplayLists();
} break;
case MSG_CLEAR_ACCESSIBILITY_FOCUS_HOST: {
- setAccessibilityFocusedHost(null);
+ setAccessibilityFocus(null, null);
} break;
case MSG_DISPATCH_DONE_ANIMATING: {
handleDispatchDoneAnimating();
@@ -4538,29 +4527,35 @@ public final class ViewRootImpl implements ViewParent,
if (mView == null) {
return false;
}
- // Watch for accessibility focus change events from virtual nodes
- // to keep track of accessibility focus being on a virtual node.
+ // Intercept accessibility focus events fired by virtual nodes to keep
+ // track of accessibility focus position in such nodes.
final int eventType = event.getEventType();
switch (eventType) {
case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED: {
- final long sourceId = event.getSourceNodeId();
- // If the event is not from a virtual node we are not interested.
- final int virtualViewId = AccessibilityNodeInfo.getVirtualDescendantId(sourceId);
- if (virtualViewId == AccessibilityNodeInfo.UNDEFINED) {
- break;
+ final long sourceNodeId = event.getSourceNodeId();
+ final int accessibilityViewId = AccessibilityNodeInfo.getAccessibilityViewId(
+ sourceNodeId);
+ View source = mView.findViewByAccessibilityId(accessibilityViewId);
+ if (source != null) {
+ AccessibilityNodeProvider provider = source.getAccessibilityNodeProvider();
+ if (provider != null) {
+ AccessibilityNodeInfo node = provider.createAccessibilityNodeInfo(
+ AccessibilityNodeInfo.getVirtualDescendantId(sourceNodeId));
+ setAccessibilityFocus(source, node);
+ }
}
- final int realViewId = AccessibilityNodeInfo.getAccessibilityViewId(sourceId);
- View focusHost = mView.findViewByAccessibilityId(realViewId);
- setAccessibilityFocusedHost(focusHost);
} break;
case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED: {
- final long sourceId = event.getSourceNodeId();
- // If the event is not from a virtual node we are not interested.
- final int virtualViewId = AccessibilityNodeInfo.getVirtualDescendantId(sourceId);
- if (virtualViewId == AccessibilityNodeInfo.UNDEFINED) {
- break;
+ final long sourceNodeId = event.getSourceNodeId();
+ final int accessibilityViewId = AccessibilityNodeInfo.getAccessibilityViewId(
+ sourceNodeId);
+ View source = mView.findViewByAccessibilityId(accessibilityViewId);
+ if (source != null) {
+ AccessibilityNodeProvider provider = source.getAccessibilityNodeProvider();
+ if (provider != null) {
+ setAccessibilityFocus(null, null);
+ }
}
- setAccessibilityFocusedHost(null);
} break;
}
mAccessibilityManager.sendAccessibilityEvent(event);
diff --git a/core/java/android/view/accessibility/AccessibilityNodeProvider.java b/core/java/android/view/accessibility/AccessibilityNodeProvider.java
index c17cb8a..b3f3cee 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeProvider.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeProvider.java
@@ -150,6 +150,8 @@ public abstract class AccessibilityNodeProvider {
*
* @see #createAccessibilityNodeInfo(int)
* @see AccessibilityNodeInfo
+ *
+ * @hide
*/
public AccessibilityNodeInfo findAccessibilityFocus(int virtualViewId) {
return null;