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

Commit 861d2e12 authored by Bernardo Rufino's avatar Bernardo Rufino Committed by Gerrit Code Review
Browse files

Merge "Correct Parcel value types"

parents d3199a60 5539926c
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -1048,7 +1048,7 @@ public class BaseBundle {
     */
    char getChar(String key, char defaultValue) {
        unparcel();
        Object o = getValue(key);
        Object o = mMap.get(key);
        if (o == null) {
            return defaultValue;
        }
@@ -1451,7 +1451,7 @@ public class BaseBundle {
    @Nullable
    short[] getShortArray(@Nullable String key) {
        unparcel();
        Object o = getValue(key);
        Object o = mMap.get(key);
        if (o == null) {
            return null;
        }
@@ -1474,7 +1474,7 @@ public class BaseBundle {
    @Nullable
    char[] getCharArray(@Nullable String key) {
        unparcel();
        Object o = getValue(key);
        Object o = mMap.get(key);
        if (o == null) {
            return null;
        }
@@ -1543,7 +1543,7 @@ public class BaseBundle {
    @Nullable
    float[] getFloatArray(@Nullable String key) {
        unparcel();
        Object o = getValue(key);
        Object o = mMap.get(key);
        if (o == null) {
            return null;
        }
+91 −2
Original line number Diff line number Diff line
@@ -263,6 +263,10 @@ public final class Parcel {
    private static final int VAL_SIZE = 26;
    private static final int VAL_SIZEF = 27;
    private static final int VAL_DOUBLEARRAY = 28;
    private static final int VAL_CHAR = 29;
    private static final int VAL_SHORTARRAY = 30;
    private static final int VAL_CHARARRAY = 31;
    private static final int VAL_FLOATARRAY = 32;

    // The initial int32 in a Binder call's reply Parcel header:
    // Keep these in sync with libbinder's binder/Status.h.
@@ -1319,6 +1323,46 @@ public final class Parcel {
        }
    }

    /** @hide */
    public void writeShortArray(@Nullable short[] val) {
        if (val != null) {
            int n = val.length;
            writeInt(n);
            for (int i = 0; i < n; i++) {
                writeInt(val[i]);
            }
        } else {
            writeInt(-1);
        }
    }

    /** @hide */
    @Nullable
    public short[] createShortArray() {
        int n = readInt();
        if (n >= 0 && n <= (dataAvail() >> 2)) {
            short[] val = new short[n];
            for (int i = 0; i < n; i++) {
                val[i] = (short) readInt();
            }
            return val;
        } else {
            return null;
        }
    }

    /** @hide */
    public void readShortArray(@NonNull short[] val) {
        int n = readInt();
        if (n == val.length) {
            for (int i = 0; i < n; i++) {
                val[i] = (short) readInt();
            }
        } else {
            throw new RuntimeException("bad array lengths");
        }
    }

    public final void writeCharArray(@Nullable char[] val) {
        if (val != null) {
            int N = val.length;
@@ -1984,6 +2028,14 @@ public final class Parcel {
            return VAL_SIZE;
        } else if (v instanceof double[]) {
            return VAL_DOUBLEARRAY;
        } else if (v instanceof Character) {
            return VAL_CHAR;
        } else if (v instanceof short[]) {
            return VAL_SHORTARRAY;
        } else if (v instanceof char[]) {
            return VAL_CHARARRAY;
        } else  if (v instanceof float[]) {
            return VAL_FLOATARRAY;
        } else {
            Class<?> clazz = v.getClass();
            if (clazz.isArray() && clazz.getComponentType() == Object.class) {
@@ -2086,6 +2138,18 @@ public final class Parcel {
            case VAL_DOUBLEARRAY:
                writeDoubleArray((double[]) v);
                break;
            case VAL_CHAR:
                writeInt((Character) v);
                break;
            case VAL_SHORTARRAY:
                writeShortArray((short[]) v);
                break;
            case VAL_CHARARRAY:
                writeCharArray((char[]) v);
                break;
            case VAL_FLOATARRAY:
                writeFloatArray((float[]) v);
                break;
            case VAL_OBJECTARRAY:
                writeArray((Object[]) v);
                break;
@@ -3696,6 +3760,22 @@ public final class Parcel {
                object = createDoubleArray();
                break;

            case VAL_CHAR:
                object = (char) readInt();
                break;

            case VAL_SHORTARRAY:
                object = createShortArray();
                break;

            case VAL_CHARARRAY:
                object = createCharArray();
                break;

            case VAL_FLOATARRAY:
                object = createFloatArray();
                break;

            default:
                int off = dataPosition() - 4;
                throw new RuntimeException(
@@ -3711,12 +3791,17 @@ public final class Parcel {
    }

    private boolean isLengthPrefixed(int type) {
        // In general, we want custom types and containers of custom types to be length-prefixed,
        // this allows clients (eg. Bundle) to skip their content during deserialization. The
        // exception to this is Bundle, since Bundle is already length-prefixed and already copies
        // the correspondent section of the parcel internally.
        switch (type) {
            case VAL_MAP:
            case VAL_PARCELABLE:
            case VAL_PARCELABLEARRAY:
            case VAL_LIST:
            case VAL_SPARSEARRAY:
            case VAL_BUNDLE:
            case VAL_PARCELABLEARRAY:
            case VAL_OBJECTARRAY:
            case VAL_SERIALIZABLE:
                return true;
            default:
@@ -4249,6 +4334,10 @@ public final class Parcel {
            case VAL_SIZE: return "VAL_SIZE";
            case VAL_SIZEF: return "VAL_SIZEF";
            case VAL_DOUBLEARRAY: return "VAL_DOUBLEARRAY";
            case VAL_CHAR: return "VAL_CHAR";
            case VAL_SHORTARRAY: return "VAL_SHORTARRAY";
            case VAL_CHARARRAY: return "VAL_CHARARRAY";
            case VAL_FLOATARRAY: return "VAL_FLOATARRAY";
            case VAL_OBJECTARRAY: return "VAL_OBJECTARRAY";
            case VAL_SERIALIZABLE: return "VAL_SERIALIZABLE";
            default: return "UNKNOWN(" + type + ")";