Skip to content
Snippets Groups Projects
Commit e3e89457 authored by Geoffrey Métais's avatar Geoffrey Métais
Browse files

Backport AbsSavedState from AppCompat v24

parent f8dff2f9
No related branches found
No related tags found
No related merge requests found
/*
* 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;
}
final public Parcelable getSuperState() {
return mSuperState;
}
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel dest, int flags) {
dest.writeParcelable(mSuperState, flags);
}
public static final Parcelable.Creator<AbsSavedState> CREATOR
= ParcelableCompat.newCreator(new ParcelableCompatCreatorCallbacks<AbsSavedState>() {
@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];
}
});
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment