summaryrefslogtreecommitdiffstats
path: root/core/java/android/view/ViewAncestor.java
diff options
context:
space:
mode:
authorSvetoslav Ganov <svetoslavganov@google.com>2011-06-10 12:38:36 -0700
committerSvetoslav Ganov <svetoslavganov@google.com>2011-06-10 12:43:00 -0700
commit8dffad68c7aa7da9a3d73d1ee41f3c4460f733b4 (patch)
treeacd8e9b265e0c9e25387e7752d6e930efb26bda5 /core/java/android/view/ViewAncestor.java
parent679dd99cdce72683816e6ac75e4f0e68ca6ad51c (diff)
downloadframeworks_base-8dffad68c7aa7da9a3d73d1ee41f3c4460f733b4.zip
frameworks_base-8dffad68c7aa7da9a3d73d1ee41f3c4460f733b4.tar.gz
frameworks_base-8dffad68c7aa7da9a3d73d1ee41f3c4460f733b4.tar.bz2
Bug fixes in the accessibility interrogation APIs
1. AccessibilityNodeInfo was not overriding equals. 2. ViewAncestor was not calling the callback for setting the result of an interrogation request thus making the system process wait upto the maximal timeout. Change-Id: I040a3c12d97f48aee319ba6414879546e71e9b8e
Diffstat (limited to 'core/java/android/view/ViewAncestor.java')
-rw-r--r--core/java/android/view/ViewAncestor.java122
1 files changed, 60 insertions, 62 deletions
diff --git a/core/java/android/view/ViewAncestor.java b/core/java/android/view/ViewAncestor.java
index d587788..17d7454 100644
--- a/core/java/android/view/ViewAncestor.java
+++ b/core/java/android/view/ViewAncestor.java
@@ -4364,17 +4364,16 @@ public final class ViewAncestor extends Handler implements ViewParent,
final IAccessibilityInteractionConnectionCallback callback =
(IAccessibilityInteractionConnectionCallback) message.obj;
- View root = ViewAncestor.this.mView;
- if (root == null) {
- return;
- }
-
- FindByAccessibilitytIdPredicate predicate = mFindByAccessibilityIdPredicate;
- predicate.init(accessibilityId);
-
- View target = root.findViewByPredicate(predicate);
- if (target != null) {
- AccessibilityNodeInfo info = target.createAccessibilityNodeInfo();
+ AccessibilityNodeInfo info = null;
+ try {
+ FindByAccessibilitytIdPredicate predicate = mFindByAccessibilityIdPredicate;
+ predicate.init(accessibilityId);
+ View root = ViewAncestor.this.mView;
+ View target = root.findViewByPredicate(predicate);
+ if (target != null) {
+ info = target.createAccessibilityNodeInfo();
+ }
+ } finally {
try {
callback.setFindAccessibilityNodeInfoResult(info, interactionId);
} catch (RemoteException re) {
@@ -4399,13 +4398,14 @@ public final class ViewAncestor extends Handler implements ViewParent,
final IAccessibilityInteractionConnectionCallback callback =
(IAccessibilityInteractionConnectionCallback) message.obj;
- View root = ViewAncestor.this.mView;
- if (root == null) {
- return;
- }
- View target = root.findViewById(viewId);
- if (target != null) {
- AccessibilityNodeInfo info = target.createAccessibilityNodeInfo();
+ AccessibilityNodeInfo info = null;
+ try {
+ View root = ViewAncestor.this.mView;
+ View target = root.findViewById(viewId);
+ if (target != null) {
+ info = target.createAccessibilityNodeInfo();
+ }
+ } finally {
try {
callback.setFindAccessibilityNodeInfoResult(info, interactionId);
} catch (RemoteException re) {
@@ -4434,32 +4434,32 @@ public final class ViewAncestor extends Handler implements ViewParent,
(IAccessibilityInteractionConnectionCallback) args.arg2;
mPool.release(args);
- View root = ViewAncestor.this.mView;
- if (root == null) {
- return;
- }
-
- ArrayList<View> foundViews = mAttachInfo.mFocusablesTempList;
- foundViews.clear();
+ List<AccessibilityNodeInfo> infos = null;
+ try {
+ View root = ViewAncestor.this.mView;
- root.findViewsWithText(foundViews, text);
- if (foundViews.isEmpty()) {
- return;
- }
+ ArrayList<View> foundViews = mAttachInfo.mFocusablesTempList;
+ foundViews.clear();
- List<AccessibilityNodeInfo> infos = mTempAccessibilityNodeInfoList;
- infos.clear();
+ root.findViewsWithText(foundViews, text);
+ if (foundViews.isEmpty()) {
+ return;
+ }
- final int viewCount = foundViews.size();
- for (int i = 0; i < viewCount; i++) {
- View foundView = foundViews.get(i);
- infos.add(foundView.createAccessibilityNodeInfo());
- }
+ infos = mTempAccessibilityNodeInfoList;
+ infos.clear();
- try {
- callback.setFindAccessibilityNodeInfosResult(infos, interactionId);
- } catch (RemoteException re) {
- /* ignore - the other side will time out */
+ final int viewCount = foundViews.size();
+ for (int i = 0; i < viewCount; i++) {
+ View foundView = foundViews.get(i);
+ infos.add(foundView.createAccessibilityNodeInfo());
+ }
+ } finally {
+ try {
+ callback.setFindAccessibilityNodeInfosResult(infos, interactionId);
+ } catch (RemoteException re) {
+ /* ignore - the other side will time out */
+ }
}
}
@@ -4485,30 +4485,28 @@ public final class ViewAncestor extends Handler implements ViewParent,
(IAccessibilityInteractionConnectionCallback) args.arg1;
mPool.release(args);
- if (ViewAncestor.this.mView == null) {
- return;
- }
-
boolean succeeded = false;
- switch (action) {
- case AccessibilityNodeInfo.ACTION_FOCUS: {
- succeeded = performActionFocus(accessibilityId);
- } break;
- case AccessibilityNodeInfo.ACTION_CLEAR_FOCUS: {
- succeeded = performActionClearFocus(accessibilityId);
- } break;
- case AccessibilityNodeInfo.ACTION_SELECT: {
- succeeded = performActionSelect(accessibilityId);
- } break;
- case AccessibilityNodeInfo.ACTION_CLEAR_SELECTION: {
- succeeded = performActionClearSelection(accessibilityId);
- } break;
- }
-
try {
- callback.setPerformAccessibilityActionResult(succeeded, interactionId);
- } catch (RemoteException re) {
- /* ignore - the other side will time out */
+ switch (action) {
+ case AccessibilityNodeInfo.ACTION_FOCUS: {
+ succeeded = performActionFocus(accessibilityId);
+ } break;
+ case AccessibilityNodeInfo.ACTION_CLEAR_FOCUS: {
+ succeeded = performActionClearFocus(accessibilityId);
+ } break;
+ case AccessibilityNodeInfo.ACTION_SELECT: {
+ succeeded = performActionSelect(accessibilityId);
+ } break;
+ case AccessibilityNodeInfo.ACTION_CLEAR_SELECTION: {
+ succeeded = performActionClearSelection(accessibilityId);
+ } break;
+ }
+ } finally {
+ try {
+ callback.setPerformAccessibilityActionResult(succeeded, interactionId);
+ } catch (RemoteException re) {
+ /* ignore - the other side will time out */
+ }
}
}