[Android] Backport AbsSavedState from AppCompat v24
Geoffrey Métais
git at videolan.org
Wed Jun 29 12:18:13 CEST 2016
vlc-android | branch: 2.0.x | Geoffrey Métais <geoffrey.metais at gmail.com> | Tue Jun 28 16:53:02 2016 +0200| [4d22cc5847dc35598583ab0d49b4b104699436ce] | committer: Geoffrey Métais
Backport AbsSavedState from AppCompat v24
(cherry picked from commit e3e89457646bd1c4e9093ad1e2620c537771a9b1)
> https://code.videolan.org/videolan/vlc-android/commit/4d22cc5847dc35598583ab0d49b4b104699436ce
---
.../com/android/support/v4/view/AbsSavedState.java | 100 +++++++++++++++++++++
1 file changed, 100 insertions(+)
diff --git a/vlc-android/src/com/android/support/v4/view/AbsSavedState.java b/vlc-android/src/com/android/support/v4/view/AbsSavedState.java
new file mode 100644
index 0000000..e5aba09
--- /dev/null
+++ b/vlc-android/src/com/android/support/v4/view/AbsSavedState.java
@@ -0,0 +1,100 @@
+/*
+ * 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];
+ }
+ });
+}
More information about the Android
mailing list