diff options
| author | 2017-05-26 23:14:55 +0000 | |
|---|---|---|
| committer | 2017-05-26 23:15:01 +0000 | |
| commit | 194a323963ea7fd91d6d55223a20414ba694e66f (patch) | |
| tree | 964039a87c0b831d3b8dbef130d5a8e5349de6df | |
| parent | a50630dd6855149883175e6bb2e62ea20d8ed6e4 (diff) | |
| parent | 651fe9fc2e0a51d6a2123d6d44a6a8b8ed864742 (diff) | |
Merge "Stop populating accessibility nodes with events"
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(); - } } } |