/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.support.v4.view; import android.os.Parcel; import android.os.Parcelable; import android.support.v4.os.ParcelableCompat; import android.support.v4.os.ParcelableCompatCreatorCallbacks; /** * A {@link Parcelable} implementation that should be used by inheritance * hierarchies to ensure the state of all classes along the chain is saved. */ public abstract class AbsSavedState implements Parcelable { public static final AbsSavedState EMPTY_STATE = new AbsSavedState() {}; private final Parcelable mSuperState; /** * Constructor used to make the EMPTY_STATE singleton */ private AbsSavedState() { mSuperState = null; } /** * Constructor called by derived classes when creating their SavedState objects * * @param superState The state of the superclass of this view */ protected AbsSavedState(Parcelable superState) { if (superState == null) { throw new IllegalArgumentException("superState must not be null"); } mSuperState = superState != EMPTY_STATE ? superState : null; } /** * Constructor used when reading from a parcel. Reads the state of the superclass. * * @param source parcel to read from */ protected AbsSavedState(Parcel source) { this(source, null); } /** * Constructor used when reading from a parcel. 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; } public final Parcelable getSuperState() { return mSuperState; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeParcelable(mSuperState, flags); } public static final Parcelable.Creator CREATOR = ParcelableCompat.newCreator( new ParcelableCompatCreatorCallbacks() { @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]; } }); }