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

Commit 878b4cef authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Correctly parcel LongSparseArray<String>"

parents d3ba36e3 badc09c7
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -2822,12 +2822,12 @@ public class AppOpsManager {
                            LongSparseArray.StringParcelling.class);

            return new OpFeatureEntry.Builder(source.readBoolean(),
                    (LongSparseLongArray) longSparseLongArrayParcelling.unparcel(source),
                    (LongSparseLongArray) longSparseLongArrayParcelling.unparcel(source),
                    (LongSparseLongArray) longSparseLongArrayParcelling.unparcel(source),
                    (LongSparseLongArray) longSparseLongArrayParcelling.unparcel(source),
                    (LongSparseArray<String>) longSparseStringArrayParcelling.unparcel(source),
                    (LongSparseArray<String>) longSparseStringArrayParcelling.unparcel(source));
                    longSparseLongArrayParcelling.unparcel(source),
                    longSparseLongArrayParcelling.unparcel(source),
                    longSparseLongArrayParcelling.unparcel(source),
                    longSparseLongArrayParcelling.unparcel(source),
                    longSparseStringArrayParcelling.unparcel(source),
                    longSparseStringArrayParcelling.unparcel(source));
        }
    }

+12 −53
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package android.util;

import android.os.Parcel;
import android.os.Parcelable;

import com.android.internal.util.ArrayUtils;
import com.android.internal.util.GrowingArrayUtils;
@@ -25,6 +24,8 @@ import com.android.internal.util.Preconditions;

import libcore.util.EmptyArray;

import java.util.Arrays;

/**
 * SparseArray mapping longs to Objects.  Unlike a normal array of Objects,
 * there can be gaps in the indices.  It is intended to be more memory efficient
@@ -450,22 +451,25 @@ public class LongSparseArray<E> implements Cloneable {
    /**
     * @hide
     */
    public static class StringParcelling implements com.android.internal.util.Parcelling {
    public static class StringParcelling implements
            com.android.internal.util.Parcelling<LongSparseArray<String>> {
        @Override
        public void parcel(Object item, Parcel dest, int parcelFlags) {
            if (item == null) {
        public void parcel(LongSparseArray<String> array, Parcel dest, int parcelFlags) {
            if (array == null) {
                dest.writeInt(-1);
                return;
            }

            LongSparseArray<String> array = (LongSparseArray<String>) item;
            dest.writeInt(array.mSize);
            int size = array.mSize;

            dest.writeInt(size);
            dest.writeLongArray(array.mKeys);
            dest.writeStringArray((String[]) array.mValues);

            dest.writeStringArray(Arrays.copyOfRange(array.mValues, 0, size, String[].class));
        }

        @Override
        public Object unparcel(Parcel source) {
        public LongSparseArray<String> unparcel(Parcel source) {
            int size = source.readInt();
            if (size == -1) {
                return null;
@@ -490,49 +494,4 @@ public class LongSparseArray<E> implements Cloneable {
            return array;
        }
    }

    /**
     * @hide
     */
    public static class Parcelling<T extends Parcelable> implements
            com.android.internal.util.Parcelling {
        @Override
        public void parcel(Object item, Parcel dest, int parcelFlags) {
            if (item == null) {
                dest.writeInt(-1);
                return;
            }

            LongSparseArray<T> array = (LongSparseArray<T>) item;
            dest.writeInt(array.mSize);
            dest.writeLongArray(array.mKeys);
            dest.writeParcelableArray((T[]) array.mValues, parcelFlags);
        }

        @Override
        public Object unparcel(Parcel source) {
            int size = source.readInt();
            if (size == -1) {
                return null;
            }

            LongSparseArray<T> array = new LongSparseArray<>(0);
            array.mSize = size;
            array.mKeys = source.createLongArray();
            array.mValues = source.readParcelableArray(null);

            // Make sure array is sane
            Preconditions.checkArgument(array.mKeys.length >= size);
            Preconditions.checkArgument(array.mValues.length >= size);

            if (size > 0) {
                long last = array.mKeys[0];
                for (int i = 1; i < size; i++) {
                    Preconditions.checkArgument(last < array.mKeys[i]);
                }
            }

            return array;
        }
    }
}
+5 −5
Original line number Diff line number Diff line
@@ -289,22 +289,22 @@ public class LongSparseLongArray implements Cloneable {
    /**
     * @hide
     */
    public static class Parcelling implements com.android.internal.util.Parcelling {
    public static class Parcelling implements
            com.android.internal.util.Parcelling<LongSparseLongArray> {
        @Override
        public void parcel(Object item, Parcel dest, int parcelFlags) {
            if (item == null) {
        public void parcel(LongSparseLongArray array, Parcel dest, int parcelFlags) {
            if (array == null) {
                dest.writeInt(-1);
                return;
            }

            LongSparseLongArray array = (LongSparseLongArray) item;
            dest.writeInt(array.mSize);
            dest.writeLongArray(array.mKeys);
            dest.writeLongArray(array.mValues);
        }

        @Override
        public Object unparcel(Parcel source) {
        public LongSparseLongArray unparcel(Parcel source) {
            int size = source.readInt();
            if (size == -1) {
                return null;