Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e5a4a91c authored by Maxim Bogatov's avatar Maxim Bogatov Committed by Android (Google) Code Review
Browse files

Merge "Transfer a11y node with a11y event" into mnc-dev

parents 3ee0c635 2f55a3f0
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -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) {
+8 −3
Original line number Diff line number Diff line
@@ -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 ");
+3 −1
Original line number Diff line number Diff line
@@ -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;
    }

    /**
+39 −18
Original line number Diff line number Diff line
@@ -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;
        boolean important = true;
        mSourceWindowId = UNDEFINED;
        clearSourceNode();
        if (root != null) {
            if (virtualDescendantId == UNDEFINED ||
                    virtualDescendantId == AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
                important = root.isImportantForAccessibility();
                mSourceNode = root.createAccessibilityNodeInfo();
            } else {
            important = true;
                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();