ParcelableSparseArray.java revision 62ab25d71ccfa775a8bd2add7b41277bc4e14bbc
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;
2162ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banesimport android.support.v4.os.ParcelableCompat;
2262ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banesimport android.support.v4.os.ParcelableCompatCreatorCallbacks;
2336d347c02fa8da71ccd69634484be8156fa0085bYuichi Arakiimport android.util.SparseArray;
2436d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki
2536d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki/**
2636d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki * @hide
2736d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki */
2836d347c02fa8da71ccd69634484be8156fa0085bYuichi Arakipublic class ParcelableSparseArray extends SparseArray<Parcelable> implements Parcelable {
2936d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki
3036d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki    public ParcelableSparseArray() {
3136d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        super();
3236d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki    }
3336d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki
3462ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes    public ParcelableSparseArray(Parcel source, ClassLoader loader) {
3536d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        super();
3636d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        int size = source.readInt();
3736d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        int[] keys = new int[size];
3836d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        source.readIntArray(keys);
3962ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes        Parcelable[] values = source.readParcelableArray(loader);
4036d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        for (int i = 0; i < size; ++i) {
4136d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki            put(keys[i], values[i]);
4236d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        }
4336d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki    }
4436d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki
4536d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki    @Override
4636d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki    public int describeContents() {
4736d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        return 0;
4836d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki    }
4936d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki
5036d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki    @Override
5136d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki    public void writeToParcel(Parcel parcel, int flags) {
5236d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        int size = size();
5336d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        int[] keys = new int[size];
5436d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        Parcelable[] values = new Parcelable[size];
5536d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        for (int i = 0; i < size; ++i) {
5636d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki            keys[i] = keyAt(i);
5736d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki            values[i] = valueAt(i);
5836d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        }
5936d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        parcel.writeInt(size);
6036d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        parcel.writeIntArray(keys);
6136d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki        parcel.writeParcelableArray(values, flags);
6236d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki    }
6336d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki
6462ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes    public static final Parcelable.Creator<ParcelableSparseArray> CREATOR =
6562ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes            ParcelableCompat
6662ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                    .newCreator(new ParcelableCompatCreatorCallbacks<ParcelableSparseArray>() {
6762ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                        @Override
6862ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                        public ParcelableSparseArray createFromParcel(Parcel source,
6962ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                                ClassLoader loader) {
7062ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                            return new ParcelableSparseArray(source, loader);
7162ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                        }
7236d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki
7362ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                        @Override
7462ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                        public ParcelableSparseArray[] newArray(int size) {
7562ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                            return new ParcelableSparseArray[size];
7662ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                        }
7762ab25d71ccfa775a8bd2add7b41277bc4e14bbcChris Banes                    });
7836d347c02fa8da71ccd69634484be8156fa0085bYuichi Araki}
79