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