am e5a4a91c: Merge "Transfer a11y node with a11y event" into mnc-dev
* commit 'e5a4a91c0129222ac9900a76906f951df5b0ffae': Transfer a11y node with a11y event
This commit is contained in:
@@ -6032,7 +6032,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
public AccessibilityNodeInfo createAccessibilityNodeInfoInternal() {
|
||||
AccessibilityNodeProvider provider = getAccessibilityNodeProvider();
|
||||
if (provider != null) {
|
||||
return provider.createAccessibilityNodeInfo(View.NO_ID);
|
||||
return provider.createAccessibilityNodeInfo(AccessibilityNodeProvider.HOST_VIEW_ID);
|
||||
} else {
|
||||
AccessibilityNodeInfo info = AccessibilityNodeInfo.obtain(this);
|
||||
onInitializeAccessibilityNodeInfo(info);
|
||||
@@ -6326,6 +6326,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
* @hide
|
||||
*/
|
||||
public void onInitializeAccessibilityNodeInfoInternal(AccessibilityNodeInfo info) {
|
||||
if (mAttachInfo == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Rect bounds = mAttachInfo.mTmpInvalRect;
|
||||
|
||||
getDrawingRect(bounds);
|
||||
@@ -8774,7 +8778,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
* @hide
|
||||
*/
|
||||
public void notifyViewAccessibilityStateChangedIfNeeded(int changeType) {
|
||||
if (!AccessibilityManager.getInstance(mContext).isEnabled()) {
|
||||
if (!AccessibilityManager.getInstance(mContext).isEnabled() || mAttachInfo == null) {
|
||||
return;
|
||||
}
|
||||
if (mSendViewStateChangedAccessibilityEvent == null) {
|
||||
@@ -8796,7 +8800,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
|
||||
* @hide
|
||||
*/
|
||||
public void notifySubtreeAccessibilityStateChangedIfNeeded() {
|
||||
if (!AccessibilityManager.getInstance(mContext).isEnabled()) {
|
||||
if (!AccessibilityManager.getInstance(mContext).isEnabled() || mAttachInfo == null) {
|
||||
return;
|
||||
}
|
||||
if ((mPrivateFlags2 & PFLAG2_SUBTREE_ACCESSIBILITY_STATE_CHANGED) == 0) {
|
||||
|
||||
@@ -1115,7 +1115,7 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par
|
||||
record.mParcelableData = parcel.readParcelable(null);
|
||||
parcel.readList(record.mText, null);
|
||||
record.mSourceWindowId = parcel.readInt();
|
||||
record.mSourceNodeId = parcel.readLong();
|
||||
record.mSourceNode = parcel.readParcelable(null);
|
||||
record.mSealed = (parcel.readInt() == 1);
|
||||
}
|
||||
|
||||
@@ -1167,7 +1167,10 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par
|
||||
parcel.writeParcelable(record.mParcelableData, flags);
|
||||
parcel.writeList(record.mText);
|
||||
parcel.writeInt(record.mSourceWindowId);
|
||||
parcel.writeLong(record.mSourceNodeId);
|
||||
// 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.writeInt(record.mSealed ? 1 : 0);
|
||||
}
|
||||
|
||||
@@ -1191,7 +1194,9 @@ public final class AccessibilityEvent extends AccessibilityRecord implements Par
|
||||
builder.append("\n");
|
||||
builder.append("; ContentChangeTypes: ").append(mContentChangeTypes);
|
||||
builder.append("; sourceWindowId: ").append(mSourceWindowId);
|
||||
builder.append("; mSourceNodeId: ").append(mSourceNodeId);
|
||||
if (mSourceNode != null) {
|
||||
builder.append("; mSourceNodeId: ").append(mSourceNode.getSourceNodeId());
|
||||
}
|
||||
for (int i = 0; i < getRecordCount(); i++) {
|
||||
final AccessibilityRecord record = getRecord(i);
|
||||
builder.append(" Record ");
|
||||
|
||||
@@ -2821,7 +2821,7 @@ public class AccessibilityNodeInfo implements Parcelable {
|
||||
* @param parcel A parcel containing the state of a {@link AccessibilityNodeInfo}.
|
||||
*/
|
||||
private void initFromParcel(Parcel parcel) {
|
||||
mSealed = (parcel.readInt() == 1);
|
||||
final boolean sealed = (parcel.readInt() == 1);
|
||||
mSourceNodeId = parcel.readLong();
|
||||
mWindowId = parcel.readInt();
|
||||
mParentNodeId = parcel.readLong();
|
||||
@@ -2911,6 +2911,8 @@ public class AccessibilityNodeInfo implements Parcelable {
|
||||
parcel.readInt() == 1,
|
||||
parcel.readInt() == 1);
|
||||
}
|
||||
|
||||
mSealed = sealed;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -90,7 +90,7 @@ public class AccessibilityRecord {
|
||||
|
||||
int mAddedCount= UNDEFINED;
|
||||
int mRemovedCount = UNDEFINED;
|
||||
long mSourceNodeId = AccessibilityNodeInfo.makeNodeId(UNDEFINED, UNDEFINED);
|
||||
AccessibilityNodeInfo mSourceNode;
|
||||
int mSourceWindowId = UNDEFINED;
|
||||
|
||||
CharSequence mClassName;
|
||||
@@ -135,16 +135,24 @@ public class AccessibilityRecord {
|
||||
*/
|
||||
public void setSource(View root, int virtualDescendantId) {
|
||||
enforceNotSealed();
|
||||
final boolean important;
|
||||
if (virtualDescendantId == UNDEFINED) {
|
||||
important = (root != null) ? root.isImportantForAccessibility() : true;
|
||||
} else {
|
||||
important = true;
|
||||
boolean important = true;
|
||||
mSourceWindowId = UNDEFINED;
|
||||
clearSourceNode();
|
||||
if (root != null) {
|
||||
if (virtualDescendantId == UNDEFINED ||
|
||||
virtualDescendantId == AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
|
||||
important = root.isImportantForAccessibility();
|
||||
mSourceNode = root.createAccessibilityNodeInfo();
|
||||
} else {
|
||||
AccessibilityNodeProvider provider = root.getAccessibilityNodeProvider();
|
||||
if (provider != null) {
|
||||
mSourceNode = provider.createAccessibilityNodeInfo(virtualDescendantId);
|
||||
}
|
||||
}
|
||||
|
||||
mSourceWindowId = root.getAccessibilityWindowId();
|
||||
}
|
||||
setBooleanProperty(PROPERTY_IMPORTANT_FOR_ACCESSIBILITY, important);
|
||||
mSourceWindowId = (root != null) ? root.getAccessibilityWindowId() : UNDEFINED;
|
||||
final int rootViewId = (root != null) ? root.getAccessibilityViewId() : UNDEFINED;
|
||||
mSourceNodeId = AccessibilityNodeInfo.makeNodeId(rootViewId, virtualDescendantId);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -158,13 +166,11 @@ public class AccessibilityRecord {
|
||||
*/
|
||||
public AccessibilityNodeInfo getSource() {
|
||||
enforceSealed();
|
||||
if (mConnectionId == UNDEFINED || mSourceWindowId == UNDEFINED
|
||||
|| AccessibilityNodeInfo.getAccessibilityViewId(mSourceNodeId) == UNDEFINED) {
|
||||
return null;
|
||||
if (mSourceNode != null) {
|
||||
return AccessibilityNodeInfo.obtain(mSourceNode);
|
||||
}
|
||||
AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance();
|
||||
return client.findAccessibilityNodeInfoByAccessibilityId(mConnectionId, mSourceWindowId,
|
||||
mSourceNodeId, false, GET_SOURCE_PREFETCH_FLAGS);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -619,7 +625,7 @@ public class AccessibilityRecord {
|
||||
* @hide
|
||||
*/
|
||||
public long getSourceNodeId() {
|
||||
return mSourceNodeId;
|
||||
return mSourceNode != null ? mSourceNode.getSourceNodeId() : UNDEFINED;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -633,6 +639,9 @@ public class AccessibilityRecord {
|
||||
public void setConnectionId(int connectionId) {
|
||||
enforceNotSealed();
|
||||
mConnectionId = connectionId;
|
||||
if (mSourceNode != null) {
|
||||
mSourceNode.setConnectionId(mConnectionId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -644,6 +653,9 @@ public class AccessibilityRecord {
|
||||
*/
|
||||
public void setSealed(boolean sealed) {
|
||||
mSealed = sealed;
|
||||
if (mSourceNode != null) {
|
||||
mSourceNode.setSealed(sealed);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -782,7 +794,9 @@ public class AccessibilityRecord {
|
||||
mParcelableData = record.mParcelableData;
|
||||
mText.addAll(record.mText);
|
||||
mSourceWindowId = record.mSourceWindowId;
|
||||
mSourceNodeId = record.mSourceNodeId;
|
||||
if (record.mSourceNode != null) {
|
||||
mSourceNode = AccessibilityNodeInfo.obtain(record.mSourceNode);
|
||||
}
|
||||
mConnectionId = record.mConnectionId;
|
||||
}
|
||||
|
||||
@@ -807,11 +821,18 @@ public class AccessibilityRecord {
|
||||
mBeforeText = null;
|
||||
mParcelableData = null;
|
||||
mText.clear();
|
||||
mSourceNodeId = AccessibilityNodeInfo.makeNodeId(UNDEFINED, UNDEFINED);
|
||||
clearSourceNode();
|
||||
mSourceWindowId = UNDEFINED;
|
||||
mConnectionId = UNDEFINED;
|
||||
}
|
||||
|
||||
private void clearSourceNode() {
|
||||
if (mSourceNode != null) {
|
||||
mSourceNode.recycle();
|
||||
mSourceNode = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
|
||||
Reference in New Issue
Block a user