1f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown/* 2f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * Copyright (C) 2013 The Android Open Source Project 3f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * 4f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 5f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * you may not use this file except in compliance with the License. 6f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * You may obtain a copy of the License at 7f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * 8f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * http://www.apache.org/licenses/LICENSE-2.0 9f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * 10f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * Unless required by applicable law or agreed to in writing, software 11f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 12f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * See the License for the specific language governing permissions and 14f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * limitations under the License. 15f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown */ 16f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 17f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brownpackage android.media; 18f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 19f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brownimport android.os.Parcel; 20f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brownimport android.os.Parcelable; 21f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brownimport android.text.TextUtils; 22f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 23f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brownimport java.util.ArrayList; 24f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 25f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown/** 26f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * Information available from IRemoteDisplayProvider about available remote displays. 27f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * 28f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * Clients must not modify the contents of this object. 29f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * @hide 30f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown */ 31f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brownpublic final class RemoteDisplayState implements Parcelable { 32f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown // Note: These constants are used by the remote display provider API. 33f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown // Do not change them! 34f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public static final String SERVICE_INTERFACE = 35f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown "com.android.media.remotedisplay.RemoteDisplayProvider"; 36f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public static final int DISCOVERY_MODE_NONE = 0; 37f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public static final int DISCOVERY_MODE_PASSIVE = 1; 38f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public static final int DISCOVERY_MODE_ACTIVE = 2; 39f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 40f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown /** 41f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * A list of all remote displays. 42f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown */ 43f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public final ArrayList<RemoteDisplayInfo> displays; 44f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 45f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public RemoteDisplayState() { 46f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown displays = new ArrayList<RemoteDisplayInfo>(); 47f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 48f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 49f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown RemoteDisplayState(Parcel src) { 50f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown displays = src.createTypedArrayList(RemoteDisplayInfo.CREATOR); 51f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 52f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 53f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public boolean isValid() { 54f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown if (displays == null) { 55f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown return false; 56f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 57f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown final int count = displays.size(); 58f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown for (int i = 0; i < count; i++) { 59f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown if (!displays.get(i).isValid()) { 60f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown return false; 61f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 62f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 63f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown return true; 64f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 65f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 66f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown @Override 67f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public int describeContents() { 68f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown return 0; 69f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 70f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 71f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown @Override 72f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public void writeToParcel(Parcel dest, int flags) { 73f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown dest.writeTypedList(displays); 74f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 75f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 76f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public static final Parcelable.Creator<RemoteDisplayState> CREATOR = 77f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown new Parcelable.Creator<RemoteDisplayState>() { 78f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown @Override 79f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public RemoteDisplayState createFromParcel(Parcel in) { 80f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown return new RemoteDisplayState(in); 81f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 82f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 83f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown @Override 84f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public RemoteDisplayState[] newArray(int size) { 85f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown return new RemoteDisplayState[size]; 86f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 87f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown }; 88f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 89f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public static final class RemoteDisplayInfo implements Parcelable { 90f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown // Note: These constants are used by the remote display provider API. 91f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown // Do not change them! 92f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public static final int STATUS_NOT_AVAILABLE = 0; 93f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public static final int STATUS_IN_USE = 1; 94f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public static final int STATUS_AVAILABLE = 2; 95f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public static final int STATUS_CONNECTING = 3; 96f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public static final int STATUS_CONNECTED = 4; 97f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 98f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public static final int PLAYBACK_VOLUME_VARIABLE = 99f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown MediaRouter.RouteInfo.PLAYBACK_VOLUME_VARIABLE; 100f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public static final int PLAYBACK_VOLUME_FIXED = 101f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown MediaRouter.RouteInfo.PLAYBACK_VOLUME_FIXED; 102f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 103f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public String id; 104f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public String name; 105f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public String description; 106f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public int status; 107f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public int volume; 108f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public int volumeMax; 109f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public int volumeHandling; 110f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public int presentationDisplayId; 111f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 112f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public RemoteDisplayInfo(String id) { 113f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown this.id = id; 114f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown status = STATUS_NOT_AVAILABLE; 115f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown volumeHandling = MediaRouter.RouteInfo.PLAYBACK_VOLUME_FIXED; 116f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown presentationDisplayId = -1; 117f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 118f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 119f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public RemoteDisplayInfo(RemoteDisplayInfo other) { 120f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown id = other.id; 121f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown name = other.name; 122f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown description = other.description; 123f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown status = other.status; 124f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown volume = other.volume; 125f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown volumeMax = other.volumeMax; 126f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown volumeHandling = other.volumeHandling; 127f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown presentationDisplayId = other.presentationDisplayId; 128f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 129f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 130f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown RemoteDisplayInfo(Parcel in) { 131f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown id = in.readString(); 132f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown name = in.readString(); 133f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown description = in.readString(); 134f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown status = in.readInt(); 135f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown volume = in.readInt(); 136f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown volumeMax = in.readInt(); 137f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown volumeHandling = in.readInt(); 138f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown presentationDisplayId = in.readInt(); 139f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 140f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 141f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public boolean isValid() { 142f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown return !TextUtils.isEmpty(id) && !TextUtils.isEmpty(name); 143f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 144f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 145f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown @Override 146f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public int describeContents() { 147f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown return 0; 148f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 149f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 150f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown @Override 151f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public void writeToParcel(Parcel dest, int flags) { 152f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown dest.writeString(id); 153f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown dest.writeString(name); 154f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown dest.writeString(description); 155f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown dest.writeInt(status); 156f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown dest.writeInt(volume); 157f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown dest.writeInt(volumeMax); 158f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown dest.writeInt(volumeHandling); 159f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown dest.writeInt(presentationDisplayId); 160f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 161f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 162f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown @Override 163f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public String toString() { 164f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown return "RemoteDisplayInfo{ id=" + id 165f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown + ", name=" + name 166f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown + ", description=" + description 167f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown + ", status=" + status 168f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown + ", volume=" + volume 169f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown + ", volumeMax=" + volumeMax 170f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown + ", volumeHandling=" + volumeHandling 171f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown + ", presentationDisplayId=" + presentationDisplayId 172f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown + " }"; 173f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 174f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 175f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown @SuppressWarnings("hiding") 176f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public static final Parcelable.Creator<RemoteDisplayInfo> CREATOR = 177f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown new Parcelable.Creator<RemoteDisplayInfo>() { 178f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown @Override 179f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public RemoteDisplayInfo createFromParcel(Parcel in) { 180f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown return new RemoteDisplayInfo(in); 181f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 182f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 183f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown @Override 184f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public RemoteDisplayInfo[] newArray(int size) { 185f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown return new RemoteDisplayInfo[size]; 186f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 187f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown }; 188f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 189f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown} 190