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:
Maxim Bogatov
2015-06-23 19:38:11 +00:00
committed by Android Git Automerger
4 changed files with 57 additions and 25 deletions

View File

@@ -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) {

View File

@@ -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 ");

View File

@@ -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;
}
/**

View File

@@ -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();