165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko/* 265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * Copyright (C) 2016 The Android Open Source Project 365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * 465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * Licensed under the Apache License, Version 2.0 (the "License"); 565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * you may not use this file except in compliance with the License. 665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * You may obtain a copy of the License at 765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * 865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * http://www.apache.org/licenses/LICENSE-2.0 965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * 1065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * Unless required by applicable law or agreed to in writing, software 1165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * distributed under the License is distributed on an "AS IS" BASIS, 1265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * See the License for the specific language governing permissions and 1465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * limitations under the License. 1565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko */ 1665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko 1765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkopackage com.android.tv.data; 1865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko 1965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.os.Parcel; 2065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.os.Parcelable; 2165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko 2265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport java.util.ArrayList; 2365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport java.util.Collection; 2465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport java.util.List; 2565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko 2665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko/** 2765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * A convenience class for the list of {@link Parcelable}s. 2865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko */ 2965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkopublic final class ParcelableList<T extends Parcelable> implements Parcelable { 3065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko /** 3165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * Create instance from {@link Parcel}. 3265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko */ 3365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko public static ParcelableList fromParcel(Parcel in) { 3465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko ParcelableList list = new ParcelableList(); 3565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko int length = in.readInt(); 3665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko if (length > 0) { 3765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko for (int i = 0; i < length; ++i) { 3865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko list.mList.add(in.readParcelable(Thread.currentThread().getContextClassLoader())); 3965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko } 4065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko } 4165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko return list; 4265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko } 4365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko 4465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko /** 4565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * A creator for {@link ParcelableList}. 4665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko */ 4765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko public static final Creator<ParcelableList> CREATOR = new Creator<ParcelableList>() { 4865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko @Override 4965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko public ParcelableList createFromParcel(Parcel in) { 5065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko return ParcelableList.fromParcel(in); 5165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko } 5265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko 5365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko @Override 5465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko public ParcelableList[] newArray(int size) { 5565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko return new ParcelableList[size]; 5665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko } 5765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko }; 5865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko 5965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko private final List<T> mList = new ArrayList<>(); 6065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko 6165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko private ParcelableList() { } 6265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko 6365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko public ParcelableList(Collection<T> initialList) { 6465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko mList.addAll(initialList); 6565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko } 6665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko 6765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko /** 6865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * Returns the list. 6965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko */ 7065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko public List<T> getList() { 7165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko return new ArrayList<T>(mList); 7265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko } 7365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko 7465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko @Override 7565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko public int describeContents() { 7665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko return 0; 7765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko } 7865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko 7965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko @Override 8065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko public void writeToParcel(Parcel out, int paramInt) { 8165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko out.writeInt(mList.size()); 8265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko for (T data : mList) { 8365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko out.writeParcelable(data, 0); 8465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko } 8565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko } 8665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko} 87