1 /*
2  * Copyright 2020 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.media;
18 
19 import android.annotation.NonNull;
20 import android.annotation.SystemApi;
21 import android.os.Parcel;
22 import android.os.Parcelable;
23 
24 import java.util.Collections;
25 import java.util.List;
26 
27 /**
28  * This is a copied version of MediaParceledListSlice in framework with hidden API usages removed,
29  * and also with some lint error fixed.
30  *
31  * Transfer a large list of Parcelable objects across an IPC.  Splits into
32  * multiple transactions if needed.
33  *
34  * TODO: Remove this from @SystemApi once all the MediaSession related classes are moved
35  *       to apex (or ParceledListSlice moved to apex). This class is temporaily added to system API
36  *       for moving classes step by step.
37  *
38  * @param <T> The type of the elements in the list.
39  * @see BaseMediaParceledListSlice
40  * @deprecated This is temporary marked as @SystemApi. Should be removed from the API surface.
41  * @hide
42  */
43 @Deprecated
44 @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
45 public final class MediaParceledListSlice<T extends Parcelable>
46         extends BaseMediaParceledListSlice<T> {
MediaParceledListSlice(@onNull List<T> list)47     public MediaParceledListSlice(@NonNull List<T> list) {
48         super(list);
49     }
50 
MediaParceledListSlice(Parcel in, ClassLoader loader)51     private MediaParceledListSlice(Parcel in, ClassLoader loader) {
52         super(in, loader);
53     }
54 
55     @NonNull
emptyList()56     public static <T extends Parcelable> MediaParceledListSlice<T> emptyList() {
57         return new MediaParceledListSlice<T>(Collections.<T> emptyList());
58     }
59 
60     @Override
describeContents()61     public int describeContents() {
62         int contents = 0;
63         final List<T> list = getList();
64         for (int i=0; i<list.size(); i++) {
65             contents |= list.get(i).describeContents();
66         }
67         return contents;
68     }
69 
70     @Override
writeElement(T parcelable, Parcel dest, int callFlags)71     void writeElement(T parcelable, Parcel dest, int callFlags) {
72         parcelable.writeToParcel(dest, callFlags);
73     }
74 
75     @Override
writeParcelableCreator(T parcelable, Parcel dest)76     void writeParcelableCreator(T parcelable, Parcel dest) {
77         dest.writeParcelableCreator((Parcelable) parcelable);
78     }
79 
80     @Override
readParcelableCreator(Parcel from, ClassLoader loader)81     Parcelable.Creator<?> readParcelableCreator(Parcel from, ClassLoader loader) {
82         return from.readParcelableCreator(loader);
83     }
84 
85     @NonNull
86     @SuppressWarnings("unchecked")
87     public static final Parcelable.ClassLoaderCreator<MediaParceledListSlice> CREATOR =
88             new Parcelable.ClassLoaderCreator<MediaParceledListSlice>() {
89         public MediaParceledListSlice createFromParcel(Parcel in) {
90             return new MediaParceledListSlice(in, null);
91         }
92 
93         @Override
94         public MediaParceledListSlice createFromParcel(Parcel in, ClassLoader loader) {
95             return new MediaParceledListSlice(in, loader);
96         }
97 
98         @Override
99         public MediaParceledListSlice[] newArray(int size) {
100             return new MediaParceledListSlice[size];
101         }
102     };
103 }
104