RemoteDisplay.java revision f3c99e883f46c56e5e2877e844b902b6eb45545b
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 com.android.media.remotedisplay; 18f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 19f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brownimport com.android.internal.util.Objects; 20f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 21f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brownimport android.media.MediaRouter; 22f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brownimport android.media.RemoteDisplayState.RemoteDisplayInfo; 23f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brownimport android.text.TextUtils; 24f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 25f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown/** 26f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * Represents a remote display that has been discovered. 27f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown */ 28f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brownpublic class RemoteDisplay { 29f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown private final RemoteDisplayInfo mMutableInfo; 30f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown private RemoteDisplayInfo mImmutableInfo; 31f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 32f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown /** 33f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * Status code: Indicates that the remote display is not available. 34f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown */ 35f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public static final int STATUS_NOT_AVAILABLE = RemoteDisplayInfo.STATUS_NOT_AVAILABLE; 36f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 37f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown /** 38f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * Status code: Indicates that the remote display is in use by someone else. 39f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown */ 40f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public static final int STATUS_IN_USE = RemoteDisplayInfo.STATUS_IN_USE; 41f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 42f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown /** 43f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * Status code: Indicates that the remote display is available for new connections. 44f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown */ 45f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public static final int STATUS_AVAILABLE = RemoteDisplayInfo.STATUS_AVAILABLE; 46f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 47f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown /** 48f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * Status code: Indicates that the remote display is current connecting. 49f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown */ 50f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public static final int STATUS_CONNECTING = RemoteDisplayInfo.STATUS_CONNECTING; 51f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 52f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown /** 53f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * Status code: Indicates that the remote display is connected and is mirroring 54f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * display contents. 55f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown */ 56f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public static final int STATUS_CONNECTED = RemoteDisplayInfo.STATUS_CONNECTED; 57f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 58f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown /** 59f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * Volume handling: Output volume can be changed. 60f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown */ 61f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public static final int PLAYBACK_VOLUME_VARIABLE = 62f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown RemoteDisplayInfo.PLAYBACK_VOLUME_VARIABLE; 63f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 64f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown /** 65f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * Volume handling: Output volume is fixed. 66f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown */ 67f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public static final int PLAYBACK_VOLUME_FIXED = 68f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown RemoteDisplayInfo.PLAYBACK_VOLUME_FIXED; 69f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 70f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown /** 71f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown * Creates a remote display with the specified name and id. 72f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown */ 73f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public RemoteDisplay(String id, String name) { 74f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown if (TextUtils.isEmpty(id)) { 75f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown throw new IllegalArgumentException("id must not be null or empty"); 76f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 77f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown mMutableInfo = new RemoteDisplayInfo(id); 78f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown setName(name); 79f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 80f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 81f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public String getId() { 82f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown return mMutableInfo.id; 83f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 84f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 85f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public String getName() { 86f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown return mMutableInfo.name; 87f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 88f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 89f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public void setName(String name) { 90f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown if (!Objects.equal(mMutableInfo.name, name)) { 91f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown mMutableInfo.name = name; 92f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown mImmutableInfo = null; 93f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 94f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 95f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 96f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public String getDescription() { 97f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown return mMutableInfo.description; 98f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 99f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 100f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public void setDescription(String description) { 101f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown if (!Objects.equal(mMutableInfo.description, description)) { 102f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown mMutableInfo.description = description; 103f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown mImmutableInfo = null; 104f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 105f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 106f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 107f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public int getStatus() { 108f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown return mMutableInfo.status; 109f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 110f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 111f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public void setStatus(int status) { 112f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown if (mMutableInfo.status != status) { 113f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown mMutableInfo.status = status; 114f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown mImmutableInfo = null; 115f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 116f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 117f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 118f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public int getVolume() { 119f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown return mMutableInfo.volume; 120f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 121f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 122f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public void setVolume(int volume) { 123f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown if (mMutableInfo.volume != volume) { 124f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown mMutableInfo.volume = volume; 125f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown mImmutableInfo = null; 126f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 127f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 128f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 129f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public int getVolumeMax() { 130f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown return mMutableInfo.volumeMax; 131f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 132f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 133f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public void setVolumeMax(int volumeMax) { 134f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown if (mMutableInfo.volumeMax != volumeMax) { 135f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown mMutableInfo.volumeMax = volumeMax; 136f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown mImmutableInfo = null; 137f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 138f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 139f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 140f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public int getVolumeHandling() { 141f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown return mMutableInfo.volumeHandling; 142f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 143f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 144f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public void setVolumeHandling(int volumeHandling) { 145f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown if (mMutableInfo.volumeHandling != volumeHandling) { 146f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown mMutableInfo.volumeHandling = volumeHandling; 147f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown mImmutableInfo = null; 148f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 149f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 150f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 151f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public int getPresentationDisplayId() { 152f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown return mMutableInfo.presentationDisplayId; 153f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 154f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 155f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public void setPresentationDisplayId(int presentationDisplayId) { 156f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown if (mMutableInfo.presentationDisplayId != presentationDisplayId) { 157f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown mMutableInfo.presentationDisplayId = presentationDisplayId; 158f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown mImmutableInfo = null; 159f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 160f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 161f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 162f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown @Override 163f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown public String toString() { 164f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown return "RemoteDisplay{" + mMutableInfo.toString() + "}"; 165f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 166f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown 167f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown RemoteDisplayInfo getInfo() { 168f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown if (mImmutableInfo == null) { 169f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown mImmutableInfo = new RemoteDisplayInfo(mMutableInfo); 170f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 171f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown return mImmutableInfo; 172f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown } 173f3c99e883f46c56e5e2877e844b902b6eb45545bJeff Brown} 174