OSDN Git Service

Full volume on remote submix for apps that need it
[android-x86/frameworks-base.git] / media / java / android / media / RemoteDisplayState.java
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 import android.text.TextUtils;
22
23 import java.util.ArrayList;
24
25 /**
26  * Information available from IRemoteDisplayProvider about available remote displays.
27  *
28  * Clients must not modify the contents of this object.
29  * @hide
30  */
31 public final class RemoteDisplayState implements Parcelable {
32     // Note: These constants are used by the remote display provider API.
33     // Do not change them!
34     public static final String SERVICE_INTERFACE =
35             "com.android.media.remotedisplay.RemoteDisplayProvider";
36     public static final int DISCOVERY_MODE_NONE = 0;
37     public static final int DISCOVERY_MODE_PASSIVE = 1;
38     public static final int DISCOVERY_MODE_ACTIVE = 2;
39
40     /**
41      * A list of all remote displays.
42      */
43     public final ArrayList<RemoteDisplayInfo> displays;
44
45     public RemoteDisplayState() {
46         displays = new ArrayList<RemoteDisplayInfo>();
47     }
48
49     RemoteDisplayState(Parcel src) {
50         displays = src.createTypedArrayList(RemoteDisplayInfo.CREATOR);
51     }
52
53     public boolean isValid() {
54         if (displays == null) {
55             return false;
56         }
57         final int count = displays.size();
58         for (int i = 0; i < count; i++) {
59             if (!displays.get(i).isValid()) {
60                 return false;
61             }
62         }
63         return true;
64     }
65
66     @Override
67     public int describeContents() {
68         return 0;
69     }
70
71     @Override
72     public void writeToParcel(Parcel dest, int flags) {
73         dest.writeTypedList(displays);
74     }
75
76     public static final Parcelable.Creator<RemoteDisplayState> CREATOR =
77             new Parcelable.Creator<RemoteDisplayState>() {
78         @Override
79         public RemoteDisplayState createFromParcel(Parcel in) {
80             return new RemoteDisplayState(in);
81         }
82
83         @Override
84         public RemoteDisplayState[] newArray(int size) {
85             return new RemoteDisplayState[size];
86         }
87     };
88
89     public static final class RemoteDisplayInfo implements Parcelable {
90         // Note: These constants are used by the remote display provider API.
91         // Do not change them!
92         public static final int STATUS_NOT_AVAILABLE = 0;
93         public static final int STATUS_IN_USE = 1;
94         public static final int STATUS_AVAILABLE = 2;
95         public static final int STATUS_CONNECTING = 3;
96         public static final int STATUS_CONNECTED = 4;
97
98         public static final int PLAYBACK_VOLUME_VARIABLE =
99                 MediaRouter.RouteInfo.PLAYBACK_VOLUME_VARIABLE;
100         public static final int PLAYBACK_VOLUME_FIXED =
101                 MediaRouter.RouteInfo.PLAYBACK_VOLUME_FIXED;
102
103         public String id;
104         public String name;
105         public String description;
106         public int status;
107         public int volume;
108         public int volumeMax;
109         public int volumeHandling;
110         public int presentationDisplayId;
111
112         public RemoteDisplayInfo(String id) {
113             this.id = id;
114             status = STATUS_NOT_AVAILABLE;
115             volumeHandling = MediaRouter.RouteInfo.PLAYBACK_VOLUME_FIXED;
116             presentationDisplayId = -1;
117         }
118
119         public RemoteDisplayInfo(RemoteDisplayInfo other) {
120             id = other.id;
121             name = other.name;
122             description = other.description;
123             status = other.status;
124             volume = other.volume;
125             volumeMax = other.volumeMax;
126             volumeHandling = other.volumeHandling;
127             presentationDisplayId = other.presentationDisplayId;
128         }
129
130         RemoteDisplayInfo(Parcel in) {
131             id = in.readString();
132             name = in.readString();
133             description = in.readString();
134             status = in.readInt();
135             volume = in.readInt();
136             volumeMax = in.readInt();
137             volumeHandling = in.readInt();
138             presentationDisplayId = in.readInt();
139         }
140
141         public boolean isValid() {
142             return !TextUtils.isEmpty(id) && !TextUtils.isEmpty(name);
143         }
144
145         @Override
146         public int describeContents() {
147             return 0;
148         }
149
150         @Override
151         public void writeToParcel(Parcel dest, int flags) {
152             dest.writeString(id);
153             dest.writeString(name);
154             dest.writeString(description);
155             dest.writeInt(status);
156             dest.writeInt(volume);
157             dest.writeInt(volumeMax);
158             dest.writeInt(volumeHandling);
159             dest.writeInt(presentationDisplayId);
160         }
161
162         @Override
163         public String toString() {
164             return "RemoteDisplayInfo{ id=" + id
165                     + ", name=" + name
166                     + ", description=" + description
167                     + ", status=" + status
168                     + ", volume=" + volume
169                     + ", volumeMax=" + volumeMax
170                     + ", volumeHandling=" + volumeHandling
171                     + ", presentationDisplayId=" + presentationDisplayId
172                     + " }";
173         }
174
175         @SuppressWarnings("hiding")
176         public static final Parcelable.Creator<RemoteDisplayInfo> CREATOR =
177                 new Parcelable.Creator<RemoteDisplayInfo>() {
178             @Override
179             public RemoteDisplayInfo createFromParcel(Parcel in) {
180                 return new RemoteDisplayInfo(in);
181             }
182
183             @Override
184             public RemoteDisplayInfo[] newArray(int size) {
185                 return new RemoteDisplayInfo[size];
186             }
187         };
188     }
189 }