diff --git a/api/current.txt b/api/current.txt index 7eeede90a5689..15fc14909231a 100644 --- a/api/current.txt +++ b/api/current.txt @@ -40825,6 +40825,7 @@ package android.view { public abstract class AbsSavedState implements android.os.Parcelable { ctor protected AbsSavedState(android.os.Parcelable); ctor protected AbsSavedState(android.os.Parcel); + ctor protected AbsSavedState(android.os.Parcel, java.lang.ClassLoader); method public int describeContents(); method public final android.os.Parcelable getSuperState(); method public void writeToParcel(android.os.Parcel, int); @@ -42941,6 +42942,7 @@ package android.view { public static class View.BaseSavedState extends android.view.AbsSavedState { ctor public View.BaseSavedState(android.os.Parcel); + ctor public View.BaseSavedState(android.os.Parcel, java.lang.ClassLoader); ctor public View.BaseSavedState(android.os.Parcelable); field public static final android.os.Parcelable.Creator CREATOR; } diff --git a/api/system-current.txt b/api/system-current.txt index 67bf364c022c6..c489435bc0930 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -43838,6 +43838,7 @@ package android.view { public abstract class AbsSavedState implements android.os.Parcelable { ctor protected AbsSavedState(android.os.Parcelable); ctor protected AbsSavedState(android.os.Parcel); + ctor protected AbsSavedState(android.os.Parcel, java.lang.ClassLoader); method public int describeContents(); method public final android.os.Parcelable getSuperState(); method public void writeToParcel(android.os.Parcel, int); @@ -45954,6 +45955,7 @@ package android.view { public static class View.BaseSavedState extends android.view.AbsSavedState { ctor public View.BaseSavedState(android.os.Parcel); + ctor public View.BaseSavedState(android.os.Parcel, java.lang.ClassLoader); ctor public View.BaseSavedState(android.os.Parcelable); field public static final android.os.Parcelable.Creator CREATOR; } diff --git a/api/test-current.txt b/api/test-current.txt index f9cd90245f2bc..f6340b205d60d 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -40902,6 +40902,7 @@ package android.view { public abstract class AbsSavedState implements android.os.Parcelable { ctor protected AbsSavedState(android.os.Parcelable); ctor protected AbsSavedState(android.os.Parcel); + ctor protected AbsSavedState(android.os.Parcel, java.lang.ClassLoader); method public int describeContents(); method public final android.os.Parcelable getSuperState(); method public void writeToParcel(android.os.Parcel, int); @@ -43018,6 +43019,7 @@ package android.view { public static class View.BaseSavedState extends android.view.AbsSavedState { ctor public View.BaseSavedState(android.os.Parcel); + ctor public View.BaseSavedState(android.os.Parcel, java.lang.ClassLoader); ctor public View.BaseSavedState(android.os.Parcelable); field public static final android.os.Parcelable.Creator CREATOR; } diff --git a/core/java/android/view/AbsSavedState.java b/core/java/android/view/AbsSavedState.java index 6ad33dd25d45c..6b616c0a7c50a 100644 --- a/core/java/android/view/AbsSavedState.java +++ b/core/java/android/view/AbsSavedState.java @@ -37,7 +37,7 @@ public abstract class AbsSavedState implements Parcelable { /** * Constructor called by derived classes when creating their SavedState objects - * + * * @param superState The state of the superclass of this view */ protected AbsSavedState(Parcelable superState) { @@ -49,13 +49,22 @@ public abstract class AbsSavedState implements Parcelable { /** * Constructor used when reading from a parcel. Reads the state of the superclass. - * - * @param source + * + * @param source parcel to read from */ protected AbsSavedState(Parcel source) { - // FIXME need class loader - Parcelable superState = source.readParcelable(null); - + this(source, null); + } + + /** + * Constructor used when reading from a parcel using a given class loader. + * Reads the state of the superclass. + * + * @param source parcel to read from + * @param loader ClassLoader to use for reading + */ + protected AbsSavedState(Parcel source, ClassLoader loader) { + Parcelable superState = source.readParcelable(loader); mSuperState = superState != null ? superState : EMPTY_STATE; } @@ -68,20 +77,27 @@ public abstract class AbsSavedState implements Parcelable { } public void writeToParcel(Parcel dest, int flags) { - dest.writeParcelable(mSuperState, flags); + dest.writeParcelable(mSuperState, flags); } - public static final Parcelable.Creator CREATOR - = new Parcelable.Creator() { - + public static final Parcelable.Creator CREATOR + = new Parcelable.ClassLoaderCreator() { + + @Override public AbsSavedState createFromParcel(Parcel in) { - Parcelable superState = in.readParcelable(null); + return createFromParcel(in, null); + } + + @Override + public AbsSavedState createFromParcel(Parcel in, ClassLoader loader) { + Parcelable superState = in.readParcelable(loader); if (superState != null) { throw new IllegalStateException("superState must be null"); } return EMPTY_STATE; } + @Override public AbsSavedState[] newArray(int size) { return new AbsSavedState[size]; } diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 74f7243e6c779..87ea09b110a30 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -22575,10 +22575,21 @@ public class View implements Drawable.Callback, KeyEvent.Callback, /** * Constructor used when reading from a parcel. Reads the state of the superclass. * - * @param source + * @param source parcel to read from */ public BaseSavedState(Parcel source) { - super(source); + this(source, null); + } + + /** + * Constructor used when reading from a parcel using a given class loader. + * Reads the state of the superclass. + * + * @param source parcel to read from + * @param loader ClassLoader to use for reading + */ + public BaseSavedState(Parcel source, ClassLoader loader) { + super(source, loader); mStartActivityRequestWhoSaved = source.readString(); } @@ -22597,12 +22608,19 @@ public class View implements Drawable.Callback, KeyEvent.Callback, out.writeString(mStartActivityRequestWhoSaved); } - public static final Parcelable.Creator CREATOR = - new Parcelable.Creator() { + public static final Parcelable.Creator CREATOR + = new Parcelable.ClassLoaderCreator() { + @Override public BaseSavedState createFromParcel(Parcel in) { return new BaseSavedState(in); } + @Override + public BaseSavedState createFromParcel(Parcel in, ClassLoader loader) { + return new BaseSavedState(in, loader); + } + + @Override public BaseSavedState[] newArray(int size) { return new BaseSavedState[size]; }