package android.os;
+import android.annotation.Nullable;
import android.util.ArrayMap;
import android.util.Size;
import android.util.SizeF;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
-import java.util.Set;
/**
* A mapping from String values to various Parcelable types.
} else if (obj instanceof Parcelable[]) {
Parcelable[] array = (Parcelable[]) obj;
for (int n = array.length - 1; n >= 0; n--) {
- if ((array[n].describeContents()
- & Parcelable.CONTENTS_FILE_DESCRIPTOR) != 0) {
+ Parcelable p = array[n];
+ if (p != null && ((p.describeContents()
+ & Parcelable.CONTENTS_FILE_DESCRIPTOR) != 0)) {
fdFound = true;
break;
}
}
/**
+ * Filter values in Bundle to only basic types.
+ * @hide
+ */
+ public void filterValues() {
+ unparcel();
+ if (mMap != null) {
+ for (int i = mMap.size() - 1; i >= 0; i--) {
+ Object value = mMap.valueAt(i);
+ if (PersistableBundle.isValidType(value)) {
+ continue;
+ }
+ if (value instanceof Bundle) {
+ ((Bundle)value).filterValues();
+ }
+ if (value.getClass().getName().startsWith("android.")) {
+ continue;
+ }
+ mMap.removeAt(i);
+ }
+ }
+ }
+
+ /**
* Inserts a byte value into the mapping of this Bundle, replacing
* any existing value for the given key.
*
* @param value a byte
*/
@Override
- public void putByte(String key, byte value) {
+ public void putByte(@Nullable String key, byte value) {
super.putByte(key, value);
}
* any existing value for the given key.
*
* @param key a String, or null
- * @param value a char, or null
+ * @param value a char
*/
@Override
- public void putChar(String key, char value) {
+ public void putChar(@Nullable String key, char value) {
super.putChar(key, value);
}
* @param value a short
*/
@Override
- public void putShort(String key, short value) {
+ public void putShort(@Nullable String key, short value) {
super.putShort(key, value);
}
* @param value a float
*/
@Override
- public void putFloat(String key, float value) {
+ public void putFloat(@Nullable String key, float value) {
super.putFloat(key, value);
}
* @param value a CharSequence, or null
*/
@Override
- public void putCharSequence(String key, CharSequence value) {
+ public void putCharSequence(@Nullable String key, @Nullable CharSequence value) {
super.putCharSequence(key, value);
}
* @param key a String, or null
* @param value a Parcelable object, or null
*/
- public void putParcelable(String key, Parcelable value) {
+ public void putParcelable(@Nullable String key, @Nullable Parcelable value) {
unparcel();
mMap.put(key, value);
mFdsKnown = false;
* @param key a String, or null
* @param value a Size object, or null
*/
- public void putSize(String key, Size value) {
+ public void putSize(@Nullable String key, @Nullable Size value) {
unparcel();
mMap.put(key, value);
}
* @param key a String, or null
* @param value a SizeF object, or null
*/
- public void putSizeF(String key, SizeF value) {
+ public void putSizeF(@Nullable String key, @Nullable SizeF value) {
unparcel();
mMap.put(key, value);
}
* @param key a String, or null
* @param value an array of Parcelable objects, or null
*/
- public void putParcelableArray(String key, Parcelable[] value) {
+ public void putParcelableArray(@Nullable String key, @Nullable Parcelable[] value) {
unparcel();
mMap.put(key, value);
mFdsKnown = false;
* @param key a String, or null
* @param value an ArrayList of Parcelable objects, or null
*/
- public void putParcelableArrayList(String key,
- ArrayList<? extends Parcelable> value) {
+ public void putParcelableArrayList(@Nullable String key,
+ @Nullable ArrayList<? extends Parcelable> value) {
unparcel();
mMap.put(key, value);
mFdsKnown = false;
* @param key a String, or null
* @param value a SparseArray of Parcelable objects, or null
*/
- public void putSparseParcelableArray(String key,
- SparseArray<? extends Parcelable> value) {
+ public void putSparseParcelableArray(@Nullable String key,
+ @Nullable SparseArray<? extends Parcelable> value) {
unparcel();
mMap.put(key, value);
mFdsKnown = false;
* @param value an ArrayList<Integer> object, or null
*/
@Override
- public void putIntegerArrayList(String key, ArrayList<Integer> value) {
+ public void putIntegerArrayList(@Nullable String key, @Nullable ArrayList<Integer> value) {
super.putIntegerArrayList(key, value);
}
* @param value an ArrayList<String> object, or null
*/
@Override
- public void putStringArrayList(String key, ArrayList<String> value) {
+ public void putStringArrayList(@Nullable String key, @Nullable ArrayList<String> value) {
super.putStringArrayList(key, value);
}
* @param value an ArrayList<CharSequence> object, or null
*/
@Override
- public void putCharSequenceArrayList(String key, ArrayList<CharSequence> value) {
+ public void putCharSequenceArrayList(@Nullable String key,
+ @Nullable ArrayList<CharSequence> value) {
super.putCharSequenceArrayList(key, value);
}
* @param value a Serializable object, or null
*/
@Override
- public void putSerializable(String key, Serializable value) {
+ public void putSerializable(@Nullable String key, @Nullable Serializable value) {
super.putSerializable(key, value);
}
* @param value a byte array object, or null
*/
@Override
- public void putByteArray(String key, byte[] value) {
+ public void putByteArray(@Nullable String key, @Nullable byte[] value) {
super.putByteArray(key, value);
}
* @param value a short array object, or null
*/
@Override
- public void putShortArray(String key, short[] value) {
+ public void putShortArray(@Nullable String key, @Nullable short[] value) {
super.putShortArray(key, value);
}
* @param value a char array object, or null
*/
@Override
- public void putCharArray(String key, char[] value) {
+ public void putCharArray(@Nullable String key, @Nullable char[] value) {
super.putCharArray(key, value);
}
* @param value a float array object, or null
*/
@Override
- public void putFloatArray(String key, float[] value) {
+ public void putFloatArray(@Nullable String key, @Nullable float[] value) {
super.putFloatArray(key, value);
}
* @param value a CharSequence array object, or null
*/
@Override
- public void putCharSequenceArray(String key, CharSequence[] value) {
+ public void putCharSequenceArray(@Nullable String key, @Nullable CharSequence[] value) {
super.putCharSequenceArray(key, value);
}
* @param key a String, or null
* @param value a Bundle object, or null
*/
- public void putBundle(String key, Bundle value) {
+ public void putBundle(@Nullable String key, @Nullable Bundle value) {
unparcel();
mMap.put(key, value);
}
* @param key a String, or null
* @param value an IBinder object, or null
*/
- public void putBinder(String key, IBinder value) {
+ public void putBinder(@Nullable String key, @Nullable IBinder value) {
unparcel();
mMap.put(key, value);
}
* @hide This is the old name of the function.
*/
@Deprecated
- public void putIBinder(String key, IBinder value) {
+ public void putIBinder(@Nullable String key, @Nullable IBinder value) {
unparcel();
mMap.put(key, value);
}
* @return a CharSequence value, or null
*/
@Override
- public CharSequence getCharSequence(String key) {
+ @Nullable
+ public CharSequence getCharSequence(@Nullable String key) {
return super.getCharSequence(key);
}
* if no valid CharSequence object is currently mapped to that key.
*/
@Override
- public CharSequence getCharSequence(String key, CharSequence defaultValue) {
+ public CharSequence getCharSequence(@Nullable String key, CharSequence defaultValue) {
return super.getCharSequence(key, defaultValue);
}
* @param key a String, or null
* @return a Size value, or null
*/
- public Size getSize(String key) {
+ @Nullable
+ public Size getSize(@Nullable String key) {
unparcel();
final Object o = mMap.get(key);
try {
* @param key a String, or null
* @return a Size value, or null
*/
- public SizeF getSizeF(String key) {
+ @Nullable
+ public SizeF getSizeF(@Nullable String key) {
unparcel();
final Object o = mMap.get(key);
try {
* @param key a String, or null
* @return a Bundle value, or null
*/
- public Bundle getBundle(String key) {
+ @Nullable
+ public Bundle getBundle(@Nullable String key) {
unparcel();
Object o = mMap.get(key);
if (o == null) {
* @param key a String, or null
* @return a Parcelable value, or null
*/
- public <T extends Parcelable> T getParcelable(String key) {
+ @Nullable
+ public <T extends Parcelable> T getParcelable(@Nullable String key) {
unparcel();
Object o = mMap.get(key);
if (o == null) {
* @param key a String, or null
* @return a Parcelable[] value, or null
*/
- public Parcelable[] getParcelableArray(String key) {
+ @Nullable
+ public Parcelable[] getParcelableArray(@Nullable String key) {
unparcel();
Object o = mMap.get(key);
if (o == null) {
* @param key a String, or null
* @return an ArrayList<T> value, or null
*/
- public <T extends Parcelable> ArrayList<T> getParcelableArrayList(String key) {
+ @Nullable
+ public <T extends Parcelable> ArrayList<T> getParcelableArrayList(@Nullable String key) {
unparcel();
Object o = mMap.get(key);
if (o == null) {
*
* @return a SparseArray of T values, or null
*/
- public <T extends Parcelable> SparseArray<T> getSparseParcelableArray(String key) {
+ @Nullable
+ public <T extends Parcelable> SparseArray<T> getSparseParcelableArray(@Nullable String key) {
unparcel();
Object o = mMap.get(key);
if (o == null) {
* @return a Serializable value, or null
*/
@Override
- public Serializable getSerializable(String key) {
+ @Nullable
+ public Serializable getSerializable(@Nullable String key) {
return super.getSerializable(key);
}
* @return an ArrayList<String> value, or null
*/
@Override
- public ArrayList<Integer> getIntegerArrayList(String key) {
+ @Nullable
+ public ArrayList<Integer> getIntegerArrayList(@Nullable String key) {
return super.getIntegerArrayList(key);
}
* @return an ArrayList<String> value, or null
*/
@Override
- public ArrayList<String> getStringArrayList(String key) {
+ @Nullable
+ public ArrayList<String> getStringArrayList(@Nullable String key) {
return super.getStringArrayList(key);
}
* @return an ArrayList<CharSequence> value, or null
*/
@Override
- public ArrayList<CharSequence> getCharSequenceArrayList(String key) {
+ @Nullable
+ public ArrayList<CharSequence> getCharSequenceArrayList(@Nullable String key) {
return super.getCharSequenceArrayList(key);
}
* @return a byte[] value, or null
*/
@Override
- public byte[] getByteArray(String key) {
+ @Nullable
+ public byte[] getByteArray(@Nullable String key) {
return super.getByteArray(key);
}
* @return a short[] value, or null
*/
@Override
- public short[] getShortArray(String key) {
+ @Nullable
+ public short[] getShortArray(@Nullable String key) {
return super.getShortArray(key);
}
* @return a char[] value, or null
*/
@Override
- public char[] getCharArray(String key) {
+ @Nullable
+ public char[] getCharArray(@Nullable String key) {
return super.getCharArray(key);
}
* @return a float[] value, or null
*/
@Override
- public float[] getFloatArray(String key) {
+ @Nullable
+ public float[] getFloatArray(@Nullable String key) {
return super.getFloatArray(key);
}
* @return a CharSequence[] value, or null
*/
@Override
- public CharSequence[] getCharSequenceArray(String key) {
+ @Nullable
+ public CharSequence[] getCharSequenceArray(@Nullable String key) {
return super.getCharSequenceArray(key);
}
* @param key a String, or null
* @return an IBinder value, or null
*/
- public IBinder getBinder(String key) {
+ @Nullable
+ public IBinder getBinder(@Nullable String key) {
unparcel();
Object o = mMap.get(key);
if (o == null) {
* @hide This is the old name of the function.
*/
@Deprecated
- public IBinder getIBinder(String key) {
+ @Nullable
+ public IBinder getIBinder(@Nullable String key) {
unparcel();
Object o = mMap.get(key);
if (o == null) {