15c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn/*
25c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn * Copyright (C) 2011 The Android Open Source Project
35c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn *
45c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License");
55c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn * you may not use this file except in compliance with the License.
65c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn * You may obtain a copy of the License at
75c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn *
85c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn *      http://www.apache.org/licenses/LICENSE-2.0
95c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn *
105c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn * Unless required by applicable law or agreed to in writing, software
115c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS,
125c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn * See the License for the specific language governing permissions and
145c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn * limitations under the License.
155c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn */
165c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn
175c1637087453de15e31861f073eae5133c4e9f7bDianne Hackbornpackage android.support.v4.os;
185c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn
195c1637087453de15e31861f073eae5133c4e9f7bDianne Hackbornimport android.os.Parcel;
205c1637087453de15e31861f073eae5133c4e9f7bDianne Hackbornimport android.os.Parcelable;
215c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn
220574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov/**
230574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * Helper for accessing features in {@link android.os.Parcelable}
240574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * introduced after API level 4 in a backwards compatible fashion.
250574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov */
26c5847d13e40f5d52459f5c0dab32dc08f1a9a683Chris Banespublic final class ParcelableCompat {
270574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov
280574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov    /**
290574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * Factory method for {@link Parcelable.Creator}.
300574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     *
310574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @param callbacks Creator callbacks implementation.
320574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     * @return New creator.
330574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov     */
345c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn    public static <T> Parcelable.Creator<T> newCreator(
355c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn            ParcelableCompatCreatorCallbacks<T> callbacks) {
365c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn        if (android.os.Build.VERSION.SDK_INT >= 13) {
374d4589b25b82d46a24e5b09bfc9b36de138ff42bSérgio Faria            return ParcelableCompatCreatorHoneycombMR2Stub.instantiate(callbacks);
385c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn        }
395c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn        return new CompatCreator<T>(callbacks);
405c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn    }
415c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn
425c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn    static class CompatCreator<T> implements Parcelable.Creator<T> {
435c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn        final ParcelableCompatCreatorCallbacks<T> mCallbacks;
445c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn
455c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn        public CompatCreator(ParcelableCompatCreatorCallbacks<T> callbacks) {
465c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn            mCallbacks = callbacks;
475c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn        }
485c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn
495c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn        @Override
505c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn        public T createFromParcel(Parcel source) {
515c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn            return mCallbacks.createFromParcel(source, null);
525c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn        }
535c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn
545c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn        @Override
555c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn        public T[] newArray(int size) {
565c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn            return mCallbacks.newArray(size);
575c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn        }
585c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn    }
59c5847d13e40f5d52459f5c0dab32dc08f1a9a683Chris Banes
60c5847d13e40f5d52459f5c0dab32dc08f1a9a683Chris Banes    private ParcelableCompat() {}
615c1637087453de15e31861f073eae5133c4e9f7bDianne Hackborn}
62