summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorSvetoslav Ganov <svetoslavganov@google.com>2012-06-18 11:27:44 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-06-18 11:27:44 -0700
commitec7c7ebf01121d17f7a12e827bd77c024eab54e8 (patch)
tree1d02570b105306215d1d2ec716a807535c751c42 /core
parent9fba9925c58f1b34792cd9edc8ad93b22e772f5b (diff)
parent45a02e0809c14a52aa24658666df0d41ce661857 (diff)
downloadframeworks_base-ec7c7ebf01121d17f7a12e827bd77c024eab54e8.zip
frameworks_base-ec7c7ebf01121d17f7a12e827bd77c024eab54e8.tar.gz
frameworks_base-ec7c7ebf01121d17f7a12e827bd77c024eab54e8.tar.bz2
Merge "API for finding accessibility focus in virtual tree not needed." into jb-dev
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;