summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/ViewAncestor.java122
-rw-r--r--core/java/android/view/accessibility/AccessibilityNodeInfo.java21
2 files changed, 81 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 */
+ }
}
}
diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
index a4801fd..5fa65b4 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
@@ -870,6 +870,27 @@ public class AccessibilityNodeInfo implements Parcelable {
}
@Override
+ public boolean equals(Object object) {
+ if (this == object) {
+ return true;
+ }
+ if (object == null) {
+ return false;
+ }
+ if (getClass() != object.getClass()) {
+ return false;
+ }
+ AccessibilityNodeInfo other = (AccessibilityNodeInfo) object;
+ if (mAccessibilityViewId != other.mAccessibilityViewId) {
+ return false;
+ }
+ if (mAccessibilityWindowId != other.mAccessibilityWindowId) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
public int hashCode() {
final int prime = 31;
int result = 1;