diff --git a/api/current.xml b/api/current.xml index 8a9a77a865017..7ab40e19b67b8 100644 --- a/api/current.xml +++ b/api/current.xml @@ -36445,6 +36445,32 @@ + + + + + + + + + + + + + + + + + + + + @@ -112461,6 +112517,32 @@ + + + + + + + + + + + + + + + + + + + + value was found. + * + * @see #putCharSequenceArrayListExtra(String, ArrayList) + */ + public ArrayList getCharSequenceArrayListExtra(String name) { + return mExtras == null ? null : mExtras.getCharSequenceArrayList(name); + } + /** * Retrieve extended data from the intent. * @@ -3601,6 +3615,20 @@ public class Intent implements Parcelable, Cloneable { return mExtras == null ? null : mExtras.getStringArray(name); } + /** + * Retrieve extended data from the intent. + * + * @param name The name of the desired item. + * + * @return the value of an item that previously added with putExtra() + * or null if no CharSequence array value was found. + * + * @see #putExtra(String, CharSequence[]) + */ + public CharSequence[] getCharSequenceArrayExtra(String name) { + return mExtras == null ? null : mExtras.getCharSequenceArray(name); + } + /** * Retrieve extended data from the intent. * @@ -4303,6 +4331,29 @@ public class Intent implements Parcelable, Cloneable { return this; } + /** + * Add extended data to the intent. The name must include a package + * prefix, for example the app com.android.contacts would use names + * like "com.android.contacts.ShowAll". + * + * @param name The name of the extra data, with package prefix. + * @param value The ArrayList data value. + * + * @return Returns the same Intent object, for chaining multiple calls + * into a single statement. + * + * @see #putExtras + * @see #removeExtra + * @see #getCharSequenceArrayListExtra(String) + */ + public Intent putCharSequenceArrayListExtra(String name, ArrayList value) { + if (mExtras == null) { + mExtras = new Bundle(); + } + mExtras.putCharSequenceArrayList(name, value); + return this; + } + /** * Add extended data to the intent. The name must include a package * prefix, for example the app com.android.contacts would use names @@ -4533,6 +4584,29 @@ public class Intent implements Parcelable, Cloneable { return this; } + /** + * Add extended data to the intent. The name must include a package + * prefix, for example the app com.android.contacts would use names + * like "com.android.contacts.ShowAll". + * + * @param name The name of the extra data, with package prefix. + * @param value The CharSequence array data value. + * + * @return Returns the same Intent object, for chaining multiple calls + * into a single statement. + * + * @see #putExtras + * @see #removeExtra + * @see #getCharSequenceArrayExtra(String) + */ + public Intent putExtra(String name, CharSequence[] value) { + if (mExtras == null) { + mExtras = new Bundle(); + } + mExtras.putCharSequenceArray(name, value); + return this; + } + /** * Add extended data to the intent. The name must include a package * prefix, for example the app com.android.contacts would use names diff --git a/core/java/android/os/Bundle.java b/core/java/android/os/Bundle.java index a91655f8e8e91..d6fe107b10b24 100644 --- a/core/java/android/os/Bundle.java +++ b/core/java/android/os/Bundle.java @@ -524,6 +524,18 @@ public final class Bundle implements Parcelable, Cloneable { mMap.put(key, value); } + /** + * Inserts an ArrayList value into the mapping of this Bundle, replacing + * any existing value for the given key. Either key or value may be null. + * + * @param key a String, or null + * @param value an ArrayList object, or null + */ + public void putCharSequenceArrayList(String key, ArrayList value) { + unparcel(); + mMap.put(key, value); + } + /** * Inserts a Serializable value into the mapping of this Bundle, replacing * any existing value for the given key. Either key or value may be null. @@ -644,6 +656,18 @@ public final class Bundle implements Parcelable, Cloneable { mMap.put(key, value); } + /** + * Inserts a CharSequence array value into the mapping of this Bundle, replacing + * any existing value for the given key. Either key or value may be null. + * + * @param key a String, or null + * @param value a CharSequence array object, or null + */ + public void putCharSequenceArray(String key, CharSequence[] value) { + unparcel(); + mMap.put(key, value); + } + /** * Inserts a Bundle value into the mapping of this Bundle, replacing * any existing value for the given key. Either key or value may be null. @@ -1180,6 +1204,28 @@ public final class Bundle implements Parcelable, Cloneable { } } + /** + * Returns the value associated with the given key, or null if + * no mapping of the desired type exists for the given key or a null + * value is explicitly associated with the key. + * + * @param key a String, or null + * @return an ArrayList value, or null + */ + public ArrayList getCharSequenceArrayList(String key) { + unparcel(); + Object o = mMap.get(key); + if (o == null) { + return null; + } + try { + return (ArrayList) o; + } catch (ClassCastException e) { + typeWarning(key, o, "ArrayList", e); + return null; + } + } + /** * Returns the value associated with the given key, or null if * no mapping of the desired type exists for the given key or a null @@ -1378,6 +1424,28 @@ public final class Bundle implements Parcelable, Cloneable { } } + /** + * Returns the value associated with the given key, or null if + * no mapping of the desired type exists for the given key or a null + * value is explicitly associated with the key. + * + * @param key a String, or null + * @return a CharSequence[] value, or null + */ + public CharSequence[] getCharSequenceArray(String key) { + unparcel(); + Object o = mMap.get(key); + if (o == null) { + return null; + } + try { + return (CharSequence[]) o; + } catch (ClassCastException e) { + typeWarning(key, o, "CharSequence[]", e); + return null; + } + } + /** * Returns the value associated with the given key, or null if * no mapping of the desired type exists for the given key or a null diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java index 6cfcceedfa467..8ad600c644f3d 100644 --- a/core/java/android/os/Parcel.java +++ b/core/java/android/os/Parcel.java @@ -212,6 +212,7 @@ public final class Parcel { private static final int VAL_SERIALIZABLE = 21; private static final int VAL_SPARSEBOOLEANARRAY = 22; private static final int VAL_BOOLEANARRAY = 23; + private static final int VAL_CHARSEQUENCEARRAY = 24; private static final int EX_SECURITY = -1; private static final int EX_BAD_PARCELABLE = -2; @@ -410,6 +411,15 @@ public final class Parcel { */ public final native void writeString(String val); + /** + * Write a CharSequence value into the parcel at the current dataPosition(), + * growing dataCapacity() if needed. + * @hide + */ + public final void writeCharSequence(CharSequence val) { + TextUtils.writeToParcel(val, this, 0); + } + /** * Write an object into the parcel at the current dataPosition(), * growing dataCapacity() if needed. @@ -827,6 +837,21 @@ public final class Parcel { } } + /** + * @hide + */ + public final void writeCharSequenceArray(CharSequence[] val) { + if (val != null) { + int N = val.length; + writeInt(N); + for (int i=0; i= 0) { @@ -1045,7 +1070,7 @@ public final class Parcel { } else if (v instanceof CharSequence) { // Must be after String writeInt(VAL_CHARSEQUENCE); - TextUtils.writeToParcel((CharSequence) v, this, 0); + writeCharSequence((CharSequence) v); } else if (v instanceof List) { writeInt(VAL_LIST); writeList((List) v); @@ -1061,6 +1086,10 @@ public final class Parcel { } else if (v instanceof String[]) { writeInt(VAL_STRINGARRAY); writeStringArray((String[]) v); + } else if (v instanceof CharSequence[]) { + // Must be after String[] and before Object[] + writeInt(VAL_CHARSEQUENCEARRAY); + writeCharSequenceArray((CharSequence[]) v); } else if (v instanceof IBinder) { writeInt(VAL_IBINDER); writeStrongBinder((IBinder) v); @@ -1256,6 +1285,14 @@ public final class Parcel { */ public final native String readString(); + /** + * Read a CharSequence value from the parcel at the current dataPosition(). + * @hide + */ + public final CharSequence readCharSequence() { + return TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(this); + } + /** * Read an object from the parcel at the current dataPosition(). */ @@ -1388,6 +1425,27 @@ public final class Parcel { return array; } + /** + * Read and return a CharSequence[] object from the parcel. + * {@hide} + */ + public final CharSequence[] readCharSequenceArray() { + CharSequence[] array = null; + + int length = readInt(); + if (length >= 0) + { + array = new CharSequence[length]; + + for (int i = 0 ; i < length ; i++) + { + array[i] = readCharSequence(); + } + } + + return array; + } + /** * Read and return a new ArrayList object from the parcel at the current * dataPosition(). Returns null if the previously written list object was @@ -1728,7 +1786,7 @@ public final class Parcel { return readInt() == 1; case VAL_CHARSEQUENCE: - return TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(this); + return readCharSequence(); case VAL_LIST: return readArrayList(loader); @@ -1742,6 +1800,9 @@ public final class Parcel { case VAL_STRINGARRAY: return readStringArray(); + case VAL_CHARSEQUENCEARRAY: + return readCharSequenceArray(); + case VAL_IBINDER: return readStrongBinder();