136d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki/*
236d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki * Copyright (C) 2015 The Android Open Source Project
336d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki *
436d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki * Licensed under the Apache License, Version 2.0 (the "License");
536d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki * you may not use this file except in compliance with the License.
636d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki * You may obtain a copy of the License at
736d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki *
836d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki *      http://www.apache.org/licenses/LICENSE-2.0
936d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki *
1036d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki * Unless required by applicable law or agreed to in writing, software
1136d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki * distributed under the License is distributed on an "AS IS" BASIS,
1236d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1336d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki * See the License for the specific language governing permissions and
1436d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki * limitations under the License.
1536d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki */
1636d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki
1736d347c02fa8da71ccd69634484be8156fa0085bYuichi Arakipackage android.support.design.internal;
1836d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki
1936d347c02fa8da71ccd69634484be8156fa0085bYuichi Arakiimport android.os.Parcel;
2036d347c02fa8da71ccd69634484be8156fa0085bYuichi Arakiimport android.os.Parcelable;
21c39d9c75590eca86a5e7e32a8824ba04a0d42e9bAlan Viveretteimport android.support.annotation.RestrictTo;
2262ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banesimport android.support.v4.os.ParcelableCompat;
2362ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banesimport android.support.v4.os.ParcelableCompatCreatorCallbacks;
2436d347c02fa8da71ccd69634484be8156fa0085bYuichi Arakiimport android.util.SparseArray;
2536d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki
26c39d9c75590eca86a5e7e32a8824ba04a0d42e9bAlan Viveretteimport static android.support.annotation.RestrictTo.Scope.GROUP_ID;
27c39d9c75590eca86a5e7e32a8824ba04a0d42e9bAlan Viverette
2836d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki/**
2936d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki * @hide
3036d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki */
31c39d9c75590eca86a5e7e32a8824ba04a0d42e9bAlan Viverette@RestrictTo(GROUP_ID)
3236d347c02fa8da71ccd69634484be8156fa0085bYuichi Arakipublic class ParcelableSparseArray extends SparseArray<Parcelable> implements Parcelable {
3336d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki
3436d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki    public ParcelableSparseArray() {
3536d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        super();
3636d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki    }
3736d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki
3862ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes    public ParcelableSparseArray(Parcel source, ClassLoader loader) {
3936d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        super();
4036d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        int size = source.readInt();
4136d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        int[] keys = new int[size];
4236d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        source.readIntArray(keys);
4362ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes        Parcelable[] values = source.readParcelableArray(loader);
4436d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        for (int i = 0; i < size; ++i) {
4536d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki            put(keys[i], values[i]);
4636d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        }
4736d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki    }
4836d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki
4936d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki    @Override
5036d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki    public int describeContents() {
5136d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        return 0;
5236d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki    }
5336d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki
5436d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki    @Override
5536d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki    public void writeToParcel(Parcel parcel, int flags) {
5636d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        int size = size();
5736d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        int[] keys = new int[size];
5836d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        Parcelable[] values = new Parcelable[size];
5936d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        for (int i = 0; i < size; ++i) {
6036d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki            keys[i] = keyAt(i);
6136d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki            values[i] = valueAt(i);
6236d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        }
6336d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        parcel.writeInt(size);
6436d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        parcel.writeIntArray(keys);
6536d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        parcel.writeParcelableArray(values, flags);
6636d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki    }
6736d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki
6862ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes    public static final Parcelable.Creator<ParcelableSparseArray> CREATOR =
6962ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes            ParcelableCompat
7062ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                    .newCreator(new ParcelableCompatCreatorCallbacks<ParcelableSparseArray>() {
7162ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                        @Override
7262ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                        public ParcelableSparseArray createFromParcel(Parcel source,
7362ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                                ClassLoader loader) {
7462ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                            return new ParcelableSparseArray(source, loader);
7562ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                        }
7636d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki
7762ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                        @Override
7862ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                        public ParcelableSparseArray[] newArray(int size) {
7962ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                            return new ParcelableSparseArray[size];
8062ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                        }
8162ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                    });
8236d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki}
83