summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Phil Weaver <pweaver@google.com> 2017-05-26 23:14:55 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2017-05-26 23:15:01 +0000
commit194a323963ea7fd91d6d55223a20414ba694e66f (patch)
tree964039a87c0b831d3b8dbef130d5a8e5349de6df
parenta50630dd6855149883175e6bb2e62ea20d8ed6e4 (diff)
parent651fe9fc2e0a51d6a2123d6d44a6a8b8ed864742 (diff)
Merge "Stop populating accessibility nodes with events"
-rw-r--r--core/java/android/view/accessibility/AccessibilityEvent.java11
-rw-r--r--core/java/android/view/accessibility/AccessibilityNodeInfo.java1
-rw-r--r--core/java/android/view/accessibility/AccessibilityRecord.java77
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java10
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java9
5 files changed, 29 insertions, 79 deletions
diff --git a/core/java/android/view/accessibility/AccessibilityEvent.java b/core/java/android/view/accessibility/AccessibilityEvent.java
index 330aae923129..9dd0fb0eb85e 100644
--- a/core/java/android/view/accessibility/AccessibilityEvent.java
+++ b/core/java/android/view/accessibility/AccessibilityEvent.java
@@ -1127,7 +1127,7 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par
record.mParcelableData = parcel.readParcelable(null);
parcel.readList(record.mText, null);
record.mSourceWindowId = parcel.readInt();
- record.mSourceNode = parcel.readParcelable(null);
+ record.mSourceNodeId = parcel.readLong();
record.mSealed = (parcel.readInt() == 1);
}
@@ -1179,10 +1179,7 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par
parcel.writeParcelable(record.mParcelableData, flags);
parcel.writeList(record.mText);
parcel.writeInt(record.mSourceWindowId);
- // create copy of the node here because the node would be recycled just after it is written
- // to parcel
- parcel.writeParcelable(record.mSourceNode != null ?
- AccessibilityNodeInfo.obtain(record.mSourceNode) : null, flags);
+ parcel.writeLong(record.mSourceNodeId);
parcel.writeInt(record.mSealed ? 1 : 0);
}
@@ -1207,9 +1204,7 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par
builder.append("; ContentChangeTypes: ").append(
contentChangeTypesToString(mContentChangeTypes));
builder.append("; sourceWindowId: ").append(mSourceWindowId);
- if (mSourceNode != null) {
- builder.append("; mSourceNodeId: ").append(mSourceNode.getSourceNodeId());
- }
+ builder.append("; mSourceNodeId: ").append(mSourceNodeId);
for (int i = 0; i < getRecordCount(); i++) {
final AccessibilityRecord record = getRecord(i);
builder.append(" Record ");
diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
index 3bf8d27e8630..82a6de7019b2 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
@@ -90,7 +90,6 @@ public class AccessibilityNodeInfo implements Parcelable {
/** @hide */
public static final int UNDEFINED_SELECTION_INDEX = -1;
- /* Special IDs for node source IDs */
/** @hide */
public static final int UNDEFINED_ITEM_ID = Integer.MAX_VALUE;
diff --git a/core/java/android/view/accessibility/AccessibilityRecord.java b/core/java/android/view/accessibility/AccessibilityRecord.java
index 3f1fece3eff4..c6057ec4d1a7 100644
--- a/core/java/android/view/accessibility/AccessibilityRecord.java
+++ b/core/java/android/view/accessibility/AccessibilityRecord.java
@@ -16,6 +16,7 @@
package android.view.accessibility;
+import android.annotation.Nullable;
import android.os.Parcelable;
import android.view.View;
@@ -90,7 +91,7 @@ public class AccessibilityRecord {
int mAddedCount= UNDEFINED;
int mRemovedCount = UNDEFINED;
- AccessibilityNodeInfo mSourceNode;
+ long mSourceNodeId = AccessibilityNodeInfo.UNDEFINED_NODE_ID;
int mSourceWindowId = AccessibilityWindowInfo.UNDEFINED_WINDOW_ID;
CharSequence mClassName;
@@ -116,7 +117,7 @@ public class AccessibilityRecord {
* @throws IllegalStateException If called from an AccessibilityService.
*/
public void setSource(View source) {
- setSource(source, UNDEFINED);
+ setSource(source, AccessibilityNodeInfo.UNDEFINED_ITEM_ID);
}
/**
@@ -133,46 +134,28 @@ public class AccessibilityRecord {
* @param root The root of the virtual subtree.
* @param virtualDescendantId The id of the virtual descendant.
*/
- public void setSource(View root, int virtualDescendantId) {
+ public void setSource(@Nullable View root, int virtualDescendantId) {
enforceNotSealed();
boolean important = true;
+ int rootViewId = AccessibilityNodeInfo.UNDEFINED_ITEM_ID;
mSourceWindowId = AccessibilityWindowInfo.UNDEFINED_WINDOW_ID;
- clearSourceNode();
if (root != null) {
- if (virtualDescendantId == View.NO_ID
- || virtualDescendantId == AccessibilityNodeInfo.UNDEFINED_ITEM_ID
- || virtualDescendantId == AccessibilityNodeProvider.HOST_VIEW_ID) {
- important = root.isImportantForAccessibility();
- mSourceNode = root.createAccessibilityNodeInfo();
- } else {
- AccessibilityNodeProvider provider = root.getAccessibilityNodeProvider();
- if (provider != null) {
- mSourceNode = provider.createAccessibilityNodeInfo(virtualDescendantId);
- }
- }
-
+ important = root.isImportantForAccessibility();
+ rootViewId = root.getAccessibilityViewId();
mSourceWindowId = root.getAccessibilityWindowId();
}
setBooleanProperty(PROPERTY_IMPORTANT_FOR_ACCESSIBILITY, important);
+ mSourceNodeId = AccessibilityNodeInfo.makeNodeId(rootViewId, virtualDescendantId);
}
/**
- * Set the source directly to an AccessibilityNodeInfo rather than indirectly via a View
- *
- * @param info The source
+ * Set the source node ID directly
*
+ * @param sourceNodeId The source node Id
* @hide
*/
- public void setSource(AccessibilityNodeInfo info) {
- enforceNotSealed();
- clearSourceNode();
- mSourceWindowId = AccessibilityWindowInfo.UNDEFINED_WINDOW_ID;
- if (info != null) {
- mSourceNode = AccessibilityNodeInfo.obtain(info);
- setBooleanProperty(PROPERTY_IMPORTANT_FOR_ACCESSIBILITY,
- mSourceNode.isImportantForAccessibility());
- mSourceWindowId = info.getWindowId();
- }
+ public void setSourceNodeId(long sourceNodeId) {
+ mSourceNodeId = sourceNodeId;
}
/**
@@ -186,11 +169,15 @@ public class AccessibilityRecord {
*/
public AccessibilityNodeInfo getSource() {
enforceSealed();
- if (mSourceNode != null) {
- return AccessibilityNodeInfo.obtain(mSourceNode);
+ if ((mConnectionId == UNDEFINED)
+ || (mSourceWindowId == AccessibilityWindowInfo.UNDEFINED_WINDOW_ID)
+ || (AccessibilityNodeInfo.getAccessibilityViewId(mSourceNodeId)
+ == AccessibilityNodeInfo.UNDEFINED_ITEM_ID)) {
+ return null;
}
-
- return null;
+ AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance();
+ return client.findAccessibilityNodeInfoByAccessibilityId(mConnectionId, mSourceWindowId,
+ mSourceNodeId, false, GET_SOURCE_PREFETCH_FLAGS, null);
}
/**
@@ -647,7 +634,7 @@ public class AccessibilityRecord {
* @hide
*/
public long getSourceNodeId() {
- return mSourceNode != null ? mSourceNode.getSourceNodeId() : UNDEFINED;
+ return mSourceNodeId;
}
/**
@@ -661,9 +648,6 @@ public class AccessibilityRecord {
public void setConnectionId(int connectionId) {
enforceNotSealed();
mConnectionId = connectionId;
- if (mSourceNode != null) {
- mSourceNode.setConnectionId(mConnectionId);
- }
}
/**
@@ -675,9 +659,6 @@ public class AccessibilityRecord {
*/
public void setSealed(boolean sealed) {
mSealed = sealed;
- if (mSourceNode != null) {
- mSourceNode.setSealed(sealed);
- }
}
/**
@@ -816,9 +797,7 @@ public class AccessibilityRecord {
mParcelableData = record.mParcelableData;
mText.addAll(record.mText);
mSourceWindowId = record.mSourceWindowId;
- if (record.mSourceNode != null) {
- mSourceNode = AccessibilityNodeInfo.obtain(record.mSourceNode);
- }
+ mSourceNodeId = record.mSourceNodeId;
mConnectionId = record.mConnectionId;
}
@@ -843,19 +822,11 @@ public class AccessibilityRecord {
mBeforeText = null;
mParcelableData = null;
mText.clear();
- clearSourceNode();
- mSourceWindowId = UNDEFINED;
+ mSourceNodeId = AccessibilityNodeInfo.UNDEFINED_ITEM_ID;
+ mSourceWindowId = AccessibilityWindowInfo.UNDEFINED_WINDOW_ID;
mConnectionId = UNDEFINED;
}
- private void clearSourceNode() {
- if (mSourceNode != null) {
- mSourceNode.recycle();
- mSourceNode = null;
- }
-
- }
-
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
index c35fdd5c5781..8c3d38d29903 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
@@ -376,10 +376,7 @@ public class PipTouchHandler {
if (!mSendingHoverAccessibilityEvents) {
AccessibilityEvent event = AccessibilityEvent.obtain(
AccessibilityEvent.TYPE_VIEW_HOVER_ENTER);
- AccessibilityNodeInfo info =
- PipAccessibilityInteractionConnection.obtainRootAccessibilityNodeInfo();
- event.setSource(info);
- info.recycle();
+ event.setSourceNodeId(AccessibilityNodeInfo.ROOT_NODE_ID);
mAccessibilityManager.sendAccessibilityEvent(event);
mSendingHoverAccessibilityEvents = true;
}
@@ -389,10 +386,7 @@ public class PipTouchHandler {
if (mSendingHoverAccessibilityEvents) {
AccessibilityEvent event = AccessibilityEvent.obtain(
AccessibilityEvent.TYPE_VIEW_HOVER_EXIT);
- AccessibilityNodeInfo info =
- PipAccessibilityInteractionConnection.obtainRootAccessibilityNodeInfo();
- event.setSource(info);
- info.recycle();
+ event.setSourceNodeId(AccessibilityNodeInfo.ROOT_NODE_ID);
mAccessibilityManager.sendAccessibilityEvent(event);
mSendingHoverAccessibilityEvents = false;
}
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index fa78f10f3e85..9e2f52a875b5 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -487,15 +487,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
if (pip != null) {
int pipId = pip.getId();
event.setWindowId(pipId);
- event.setSealed(true);
- AccessibilityNodeInfo info = event.getSource();
- info.setSealed(false);
- event.setSealed(false);
- if (info != null) {
- info.setSourceNodeId(info.getSourceNodeId(), pipId);
- event.setSource(info);
- info.recycle();
- }
}
}