1 /*
2  * Copyright (C) 2013 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.os.Parcel;
20 import android.os.Parcelable;
21 
22 import java.util.ArrayList;
23 
24 /**
25  * Information available from MediaRouterService about the state perceived by
26  * a particular client and the routes that are available to it.
27  *
28  * Clients must not modify the contents of this object.
29  * @hide
30  */
31 public final class MediaRouterClientState implements Parcelable {
32     /**
33      * A list of all known routes.
34      */
35     public final ArrayList<RouteInfo> routes;
36 
MediaRouterClientState()37     public MediaRouterClientState() {
38         routes = new ArrayList<RouteInfo>();
39     }
40 
MediaRouterClientState(Parcel src)41     MediaRouterClientState(Parcel src) {
42         routes = src.createTypedArrayList(RouteInfo.CREATOR);
43     }
44 
getRoute(String id)45     public RouteInfo getRoute(String id) {
46         final int count = routes.size();
47         for (int i = 0; i < count; i++) {
48             final RouteInfo route = routes.get(i);
49             if (route.id.equals(id)) {
50                 return route;
51             }
52         }
53         return null;
54     }
55 
56     @Override
describeContents()57     public int describeContents() {
58         return 0;
59     }
60 
61     @Override
writeToParcel(Parcel dest, int flags)62     public void writeToParcel(Parcel dest, int flags) {
63         dest.writeTypedList(routes);
64     }
65 
66     @Override
toString()67     public String toString() {
68         return "MediaRouterClientState{ routes=" + routes.toString() + " }";
69     }
70 
71     public static final @android.annotation.NonNull Parcelable.Creator<MediaRouterClientState> CREATOR =
72             new Parcelable.Creator<MediaRouterClientState>() {
73         @Override
74         public MediaRouterClientState createFromParcel(Parcel in) {
75             return new MediaRouterClientState(in);
76         }
77 
78         @Override
79         public MediaRouterClientState[] newArray(int size) {
80             return new MediaRouterClientState[size];
81         }
82     };
83 
84     public static final class RouteInfo implements Parcelable {
85         public String id;
86         public String name;
87         public String description;
88         public int supportedTypes;
89         public boolean enabled;
90         public int statusCode;
91         public int playbackType;
92         public int playbackStream;
93         public int volume;
94         public int volumeMax;
95         public int volumeHandling;
96         public int presentationDisplayId;
97         public @MediaRouter.RouteInfo.DeviceType int deviceType;
98 
RouteInfo(String id)99         public RouteInfo(String id) {
100             this.id = id;
101             enabled = true;
102             statusCode = MediaRouter.RouteInfo.STATUS_NONE;
103             playbackType = MediaRouter.RouteInfo.PLAYBACK_TYPE_REMOTE;
104             playbackStream = -1;
105             volumeHandling = MediaRouter.RouteInfo.PLAYBACK_VOLUME_FIXED;
106             presentationDisplayId = -1;
107             deviceType = MediaRouter.RouteInfo.DEVICE_TYPE_UNKNOWN;
108         }
109 
RouteInfo(RouteInfo other)110         public RouteInfo(RouteInfo other) {
111             id = other.id;
112             name = other.name;
113             description = other.description;
114             supportedTypes = other.supportedTypes;
115             enabled = other.enabled;
116             statusCode = other.statusCode;
117             playbackType = other.playbackType;
118             playbackStream = other.playbackStream;
119             volume = other.volume;
120             volumeMax = other.volumeMax;
121             volumeHandling = other.volumeHandling;
122             presentationDisplayId = other.presentationDisplayId;
123             deviceType = other.deviceType;
124         }
125 
RouteInfo(Parcel in)126         RouteInfo(Parcel in) {
127             id = in.readString();
128             name = in.readString();
129             description = in.readString();
130             supportedTypes = in.readInt();
131             enabled = in.readInt() != 0;
132             statusCode = in.readInt();
133             playbackType = in.readInt();
134             playbackStream = in.readInt();
135             volume = in.readInt();
136             volumeMax = in.readInt();
137             volumeHandling = in.readInt();
138             presentationDisplayId = in.readInt();
139             deviceType = in.readInt();
140         }
141 
142         @Override
describeContents()143         public int describeContents() {
144             return 0;
145         }
146 
147         @Override
writeToParcel(Parcel dest, int flags)148         public void writeToParcel(Parcel dest, int flags) {
149             dest.writeString(id);
150             dest.writeString(name);
151             dest.writeString(description);
152             dest.writeInt(supportedTypes);
153             dest.writeInt(enabled ? 1 : 0);
154             dest.writeInt(statusCode);
155             dest.writeInt(playbackType);
156             dest.writeInt(playbackStream);
157             dest.writeInt(volume);
158             dest.writeInt(volumeMax);
159             dest.writeInt(volumeHandling);
160             dest.writeInt(presentationDisplayId);
161             dest.writeInt(deviceType);
162         }
163 
164         @Override
toString()165         public String toString() {
166             return "RouteInfo{ id=" + id
167                     + ", name=" + name
168                     + ", description=" + description
169                     + ", supportedTypes=0x" + Integer.toHexString(supportedTypes)
170                     + ", enabled=" + enabled
171                     + ", statusCode=" + statusCode
172                     + ", playbackType=" + playbackType
173                     + ", playbackStream=" + playbackStream
174                     + ", volume=" + volume
175                     + ", volumeMax=" + volumeMax
176                     + ", volumeHandling=" + volumeHandling
177                     + ", presentationDisplayId=" + presentationDisplayId
178                     + ", deviceType=" + deviceType
179                     + " }";
180         }
181 
182         @SuppressWarnings("hiding")
183         public static final @android.annotation.NonNull Parcelable.Creator<RouteInfo> CREATOR =
184                 new Parcelable.Creator<RouteInfo>() {
185             @Override
186             public RouteInfo createFromParcel(Parcel in) {
187                 return new RouteInfo(in);
188             }
189 
190             @Override
191             public RouteInfo[] newArray(int size) {
192                 return new RouteInfo[size];
193             }
194         };
195     }
196 }
197