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

Commit 6685f1ba authored by Svetoslav Ganov's avatar Svetoslav Ganov
Browse files

AccessibilityNodeInfo incorrectly cloned.

The code that creates a clone of an AccessibilityNodeInfo was not cloning
the extension objects (CollectionInfo, CollectionItemInfo, and RangeInfo)
and as a result if the original accessibility node info is recycled the
extension objects of the clone are also recycled and now if one tries to
recycle the clone gets an exception that the extension objects are already
recycled. Fun!

bug:10642952

Change-Id: I84192466bff0e865de04b79079e6ceecdffb37a6
parent 93d71945
Loading
Loading
Loading
Loading
+41 −3
Original line number Diff line number Diff line
@@ -2279,9 +2279,12 @@ public class AccessibilityNodeInfo implements Parcelable {
        if (other.mExtras != null && !other.mExtras.isEmpty()) {
            getExtras().putAll(other.mExtras);
        }
        mRangeInfo = other.mRangeInfo;
        mCollectionInfo = other.mCollectionInfo;
        mCollectionItemInfo = other.mCollectionItemInfo;
        mRangeInfo = (other.mRangeInfo != null)
                ? RangeInfo.obtain(other.mRangeInfo) : null;
        mCollectionInfo = (other.mCollectionInfo != null)
                ? CollectionInfo.obtain(other.mCollectionInfo) : null;
        mCollectionItemInfo =  (other.mCollectionItemInfo != null)
                ? CollectionItemInfo.obtain(other.mCollectionItemInfo) : null;
    }

    /**
@@ -2601,6 +2604,17 @@ public class AccessibilityNodeInfo implements Parcelable {
        private float mMax;
        private float mCurrent;

        /**
         * Obtains a pooled instance that is a clone of another one.
         *
         * @param other The instance to clone.
         *
         * @hide
         */
        public static RangeInfo obtain(RangeInfo other) {
            return obtain(other.mType, other.mMin, other.mMax, other.mCurrent);
        }

        /**
         * Obtains a pooled instance.
         *
@@ -2707,6 +2721,18 @@ public class AccessibilityNodeInfo implements Parcelable {
        private int mColumnCount;
        private boolean mHierarchical;

        /**
         * Obtains a pooled instance that is a clone of another one.
         *
         * @param other The instance to clone.
         *
         * @hide
         */
        public static CollectionInfo obtain(CollectionInfo other) {
            return CollectionInfo.obtain(other.mRowCount, other.mColumnCount,
                    other.mHierarchical);
        }

        /**
         * Obtains a pooled instance.
         *
@@ -2795,6 +2821,18 @@ public class AccessibilityNodeInfo implements Parcelable {
        private static final SynchronizedPool<CollectionItemInfo> sPool =
                new SynchronizedPool<CollectionItemInfo>(MAX_POOL_SIZE);

        /**
         * Obtains a pooled instance that is a clone of another one.
         *
         * @param other The instance to clone.
         *
         * @hide
         */
        public static CollectionItemInfo obtain(CollectionItemInfo other) {
            return CollectionItemInfo.obtain(other.mRowIndex, other.mRowSpan,
                    other.mColumnIndex, other.mColumnSpan, other.mHeading);
        }

        /**
         * Obtains a pooled instance.
         *