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