1692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim/* 2692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Copyright 2018 The Android Open Source Project 3692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * 4692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Licensed under the Apache License, Version 2.0 (the "License"); 5692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * you may not use this file except in compliance with the License. 6692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * You may obtain a copy of the License at 7692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * 8692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * http://www.apache.org/licenses/LICENSE-2.0 9692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * 10692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Unless required by applicable law or agreed to in writing, software 11692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * distributed under the License is distributed on an "AS IS" BASIS, 12692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * See the License for the specific language governing permissions and 14692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * limitations under the License. 15692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 16692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Limpackage com.android.support.mediarouter.media; 17692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 18692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Limimport android.content.IntentFilter; 19692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Limimport android.content.IntentSender; 20692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Limimport android.net.Uri; 21692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Limimport android.os.Bundle; 22692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Limimport android.text.TextUtils; 23692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 24692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Limimport java.util.ArrayList; 25692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Limimport java.util.Arrays; 26692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Limimport java.util.Collection; 27692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Limimport java.util.Collections; 28692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Limimport java.util.List; 29692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 30692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim/** 31692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Describes the properties of a route. 32692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * <p> 33692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Each route is uniquely identified by an opaque id string. This token 34692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * may take any form as long as it is unique within the media route provider. 35692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * </p><p> 36692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * This object is immutable once created using a {@link Builder} instance. 37692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * </p> 38692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 39692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Limpublic final class MediaRouteDescriptor { 40692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim static final String KEY_ID = "id"; 41692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim static final String KEY_GROUP_MEMBER_IDS = "groupMemberIds"; 42692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim static final String KEY_NAME = "name"; 43692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim static final String KEY_DESCRIPTION = "status"; 44692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim static final String KEY_ICON_URI = "iconUri"; 45692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim static final String KEY_ENABLED = "enabled"; 46692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim static final String KEY_CONNECTING = "connecting"; 47692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim static final String KEY_CONNECTION_STATE = "connectionState"; 48692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim static final String KEY_CONTROL_FILTERS = "controlFilters"; 49692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim static final String KEY_PLAYBACK_TYPE = "playbackType"; 50692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim static final String KEY_PLAYBACK_STREAM = "playbackStream"; 51692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim static final String KEY_DEVICE_TYPE = "deviceType"; 52692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim static final String KEY_VOLUME = "volume"; 53692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim static final String KEY_VOLUME_MAX = "volumeMax"; 54692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim static final String KEY_VOLUME_HANDLING = "volumeHandling"; 55692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim static final String KEY_PRESENTATION_DISPLAY_ID = "presentationDisplayId"; 56692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim static final String KEY_EXTRAS = "extras"; 57692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim static final String KEY_CAN_DISCONNECT = "canDisconnect"; 58692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim static final String KEY_SETTINGS_INTENT = "settingsIntent"; 59692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim static final String KEY_MIN_CLIENT_VERSION = "minClientVersion"; 60692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim static final String KEY_MAX_CLIENT_VERSION = "maxClientVersion"; 61692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 62692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim final Bundle mBundle; 63692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim List<IntentFilter> mControlFilters; 64692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 65692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim MediaRouteDescriptor(Bundle bundle, List<IntentFilter> controlFilters) { 66692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle = bundle; 67692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mControlFilters = controlFilters; 68692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 69692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 70692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 71692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Gets the unique id of the route. 72692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * <p> 73692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * The route id associated with a route descriptor functions as a stable 74692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * identifier for the route and must be unique among all routes offered 75692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * by the provider. 76692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * </p> 77692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 78692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public String getId() { 79692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return mBundle.getString(KEY_ID); 80692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 81692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 82692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 83692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Gets the group member ids of the route. 84692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * <p> 85692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * A route descriptor that has one or more group member route ids 86692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * represents a route group. A member route may belong to another group. 87692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * </p> 88692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @hide 89692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 90692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim // @RestrictTo(LIBRARY_GROUP) 91692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public List<String> getGroupMemberIds() { 92692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return mBundle.getStringArrayList(KEY_GROUP_MEMBER_IDS); 93692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 94692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 95692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 96692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Gets the user-visible name of the route. 97692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * <p> 98692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * The route name identifies the destination represented by the route. 99692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * It may be a user-supplied name, an alias, or device serial number. 100692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * </p> 101692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 102692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public String getName() { 103692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return mBundle.getString(KEY_NAME); 104692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 105692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 106692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 107692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Gets the user-visible description of the route. 108692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * <p> 109692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * The route description describes the kind of destination represented by the route. 110692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * It may be a user-supplied string, a model number or brand of device. 111692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * </p> 112692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 113692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public String getDescription() { 114692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return mBundle.getString(KEY_DESCRIPTION); 115692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 116692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 117692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 118692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Gets the URI of the icon representing this route. 119692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * <p> 120692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * This icon will be used in picker UIs if available. 121692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * </p> 122692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 123692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Uri getIconUri() { 124692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim String iconUri = mBundle.getString(KEY_ICON_URI); 125692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return iconUri == null ? null : Uri.parse(iconUri); 126692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 127692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 128692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 129692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Gets whether the route is enabled. 130692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 131692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public boolean isEnabled() { 132692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return mBundle.getBoolean(KEY_ENABLED, true); 133692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 134692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 135692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 136692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Gets whether the route is connecting. 137692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @deprecated Use {@link #getConnectionState} instead 138692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 139692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim @Deprecated 140692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public boolean isConnecting() { 141692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return mBundle.getBoolean(KEY_CONNECTING, false); 142692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 143692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 144692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 145692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Gets the connection state of the route. 146692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * 147692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @return The connection state of this route: 148692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * {@link MediaRouter.RouteInfo#CONNECTION_STATE_DISCONNECTED}, 149692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * {@link MediaRouter.RouteInfo#CONNECTION_STATE_CONNECTING}, or 150692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * {@link MediaRouter.RouteInfo#CONNECTION_STATE_CONNECTED}. 151692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 152692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public int getConnectionState() { 153692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return mBundle.getInt(KEY_CONNECTION_STATE, 154692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim MediaRouter.RouteInfo.CONNECTION_STATE_DISCONNECTED); 155692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 156692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 157692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 158692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Gets whether the route can be disconnected without stopping playback. 159692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * <p> 160692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * The route can normally be disconnected without stopping playback when 161692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * the destination device on the route is connected to two or more source 162692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * devices. The route provider should update the route immediately when the 163692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * number of connected devices changes. 164692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * </p><p> 165692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * To specify that the route should disconnect without stopping use 166692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * {@link MediaRouter#unselect(int)} with 167692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * {@link MediaRouter#UNSELECT_REASON_DISCONNECTED}. 168692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * </p> 169692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 170692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public boolean canDisconnectAndKeepPlaying() { 171692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return mBundle.getBoolean(KEY_CAN_DISCONNECT, false); 172692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 173692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 174692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 175692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Gets an {@link IntentSender} for starting a settings activity for this 176692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * route. The activity may have specific route settings or general settings 177692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * for the connected device or route provider. 178692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * 179692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @return An {@link IntentSender} to start a settings activity. 180692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 181692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public IntentSender getSettingsActivity() { 182692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return mBundle.getParcelable(KEY_SETTINGS_INTENT); 183692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 184692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 185692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 186692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Gets the route's {@link MediaControlIntent media control intent} filters. 187692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 188692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public List<IntentFilter> getControlFilters() { 189692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim ensureControlFilters(); 190692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return mControlFilters; 191692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 192692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 193692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim void ensureControlFilters() { 194692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim if (mControlFilters == null) { 195692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mControlFilters = mBundle.<IntentFilter>getParcelableArrayList(KEY_CONTROL_FILTERS); 196692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim if (mControlFilters == null) { 197692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mControlFilters = Collections.<IntentFilter>emptyList(); 198692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 199692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 200692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 201692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 202692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 203692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Gets the type of playback associated with this route. 204692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * 205692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @return The type of playback associated with this route: 206692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * {@link MediaRouter.RouteInfo#PLAYBACK_TYPE_LOCAL} or 207692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * {@link MediaRouter.RouteInfo#PLAYBACK_TYPE_REMOTE}. 208692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 209692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public int getPlaybackType() { 210692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return mBundle.getInt(KEY_PLAYBACK_TYPE, MediaRouter.RouteInfo.PLAYBACK_TYPE_REMOTE); 211692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 212692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 213692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 214692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Gets the route's playback stream. 215692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 216692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public int getPlaybackStream() { 217692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return mBundle.getInt(KEY_PLAYBACK_STREAM, -1); 218692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 219692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 220692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 221692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Gets the type of the receiver device associated with this route. 222692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * 223692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @return The type of the receiver device associated with this route: 224692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * {@link MediaRouter.RouteInfo#DEVICE_TYPE_TV} or 225692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * {@link MediaRouter.RouteInfo#DEVICE_TYPE_SPEAKER}. 226692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 227692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public int getDeviceType() { 228692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return mBundle.getInt(KEY_DEVICE_TYPE); 229692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 230692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 231692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 232692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Gets the route's current volume, or 0 if unknown. 233692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 234692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public int getVolume() { 235692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return mBundle.getInt(KEY_VOLUME); 236692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 237692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 238692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 239692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Gets the route's maximum volume, or 0 if unknown. 240692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 241692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public int getVolumeMax() { 242692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return mBundle.getInt(KEY_VOLUME_MAX); 243692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 244692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 245692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 246692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Gets information about how volume is handled on the route. 247692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * 248692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @return How volume is handled on the route: 249692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * {@link MediaRouter.RouteInfo#PLAYBACK_VOLUME_FIXED} or 250692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * {@link MediaRouter.RouteInfo#PLAYBACK_VOLUME_VARIABLE}. 251692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 252692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public int getVolumeHandling() { 253692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return mBundle.getInt(KEY_VOLUME_HANDLING, 254692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim MediaRouter.RouteInfo.PLAYBACK_VOLUME_FIXED); 255692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 256692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 257692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 258692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Gets the route's presentation display id, or -1 if none. 259692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 260692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public int getPresentationDisplayId() { 261692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return mBundle.getInt( 262692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim KEY_PRESENTATION_DISPLAY_ID, MediaRouter.RouteInfo.PRESENTATION_DISPLAY_ID_NONE); 263692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 264692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 265692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 266692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Gets a bundle of extras for this route descriptor. 267692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * The extras will be ignored by the media router but they may be used 268692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * by applications. 269692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 270692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Bundle getExtras() { 271692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return mBundle.getBundle(KEY_EXTRAS); 272692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 273692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 274692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 275692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Gets the minimum client version required for this route. 276692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @hide 277692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 278692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim // @RestrictTo(LIBRARY_GROUP) 279692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public int getMinClientVersion() { 280692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return mBundle.getInt(KEY_MIN_CLIENT_VERSION, 281692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim MediaRouteProviderProtocol.CLIENT_VERSION_START); 282692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 283692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 284692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 285692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Gets the maximum client version required for this route. 286692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @hide 287692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 288692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim // @RestrictTo(LIBRARY_GROUP) 289692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public int getMaxClientVersion() { 290692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return mBundle.getInt(KEY_MAX_CLIENT_VERSION, Integer.MAX_VALUE); 291692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 292692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 293692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 294692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Returns true if the route descriptor has all of the required fields. 295692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 296692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public boolean isValid() { 297692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim ensureControlFilters(); 298692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim if (TextUtils.isEmpty(getId()) 299692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim || TextUtils.isEmpty(getName()) 300692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim || mControlFilters.contains(null)) { 301692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return false; 302692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 303692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return true; 304692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 305692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 306692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim @Override 307692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public String toString() { 308692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim StringBuilder result = new StringBuilder(); 309692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append("MediaRouteDescriptor{ "); 310692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append("id=").append(getId()); 311692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append(", groupMemberIds=").append(getGroupMemberIds()); 312692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append(", name=").append(getName()); 313692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append(", description=").append(getDescription()); 314692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append(", iconUri=").append(getIconUri()); 315692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append(", isEnabled=").append(isEnabled()); 316692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append(", isConnecting=").append(isConnecting()); 317692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append(", connectionState=").append(getConnectionState()); 318692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append(", controlFilters=").append(Arrays.toString(getControlFilters().toArray())); 319692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append(", playbackType=").append(getPlaybackType()); 320692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append(", playbackStream=").append(getPlaybackStream()); 321692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append(", deviceType=").append(getDeviceType()); 322692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append(", volume=").append(getVolume()); 323692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append(", volumeMax=").append(getVolumeMax()); 324692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append(", volumeHandling=").append(getVolumeHandling()); 325692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append(", presentationDisplayId=").append(getPresentationDisplayId()); 326692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append(", extras=").append(getExtras()); 327692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append(", isValid=").append(isValid()); 328692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append(", minClientVersion=").append(getMinClientVersion()); 329692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append(", maxClientVersion=").append(getMaxClientVersion()); 330692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim result.append(" }"); 331692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return result.toString(); 332692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 333692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 334692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 335692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Converts this object to a bundle for serialization. 336692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * 337692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @return The contents of the object represented as a bundle. 338692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 339692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Bundle asBundle() { 340692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return mBundle; 341692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 342692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 343692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 344692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Creates an instance from a bundle. 345692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * 346692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @param bundle The bundle, or null if none. 347692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @return The new instance, or null if the bundle was null. 348692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 349692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public static MediaRouteDescriptor fromBundle(Bundle bundle) { 350692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return bundle != null ? new MediaRouteDescriptor(bundle, null) : null; 351692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 352692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 353692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 354692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Builder for {@link MediaRouteDescriptor media route descriptors}. 355692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 356692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public static final class Builder { 357692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim private final Bundle mBundle; 358692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim private ArrayList<String> mGroupMemberIds; 359692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim private ArrayList<IntentFilter> mControlFilters; 360692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 361692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 362692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Creates a media route descriptor builder. 363692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * 364692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @param id The unique id of the route. 365692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @param name The user-visible name of the route. 366692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 367692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder(String id, String name) { 368692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle = new Bundle(); 369692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim setId(id); 370692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim setName(name); 371692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 372692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 373692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 374692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Creates a media route descriptor builder whose initial contents are 375692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * copied from an existing descriptor. 376692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 377692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder(MediaRouteDescriptor descriptor) { 378692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim if (descriptor == null) { 379692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim throw new IllegalArgumentException("descriptor must not be null"); 380692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 381692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 382692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle = new Bundle(descriptor.mBundle); 383692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 384692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim descriptor.ensureControlFilters(); 385692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim if (!descriptor.mControlFilters.isEmpty()) { 386692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mControlFilters = new ArrayList<IntentFilter>(descriptor.mControlFilters); 387692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 388692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 389692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 390692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 391692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Sets the unique id of the route. 392692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * <p> 393692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * The route id associated with a route descriptor functions as a stable 394692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * identifier for the route and must be unique among all routes offered 395692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * by the provider. 396692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * </p> 397692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 398692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder setId(String id) { 399692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle.putString(KEY_ID, id); 400692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 401692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 402692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 403692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 404692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Adds a group member id of the route. 405692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * <p> 406692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * A route descriptor that has one or more group member route ids 407692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * represents a route group. A member route may belong to another group. 408692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * </p> 409692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @hide 410692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 411692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim // @RestrictTo(LIBRARY_GROUP) 412692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder addGroupMemberId(String groupMemberId) { 413692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim if (TextUtils.isEmpty(groupMemberId)) { 414692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim throw new IllegalArgumentException("groupMemberId must not be empty"); 415692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 416692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 417692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim if (mGroupMemberIds == null) { 418692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mGroupMemberIds = new ArrayList<>(); 419692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 420692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim if (!mGroupMemberIds.contains(groupMemberId)) { 421692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mGroupMemberIds.add(groupMemberId); 422692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 423692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 424692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 425692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 426692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 427692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Adds a list of group member ids of the route. 428692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * <p> 429692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * A route descriptor that has one or more group member route ids 430692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * represents a route group. A member route may belong to another group. 431692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * </p> 432692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @hide 433692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 434692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim // @RestrictTo(LIBRARY_GROUP) 435692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder addGroupMemberIds(Collection<String> groupMemberIds) { 436692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim if (groupMemberIds == null) { 437692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim throw new IllegalArgumentException("groupMemberIds must not be null"); 438692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 439692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 440692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim if (!groupMemberIds.isEmpty()) { 441692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim for (String groupMemberId : groupMemberIds) { 442692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim addGroupMemberId(groupMemberId); 443692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 444692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 445692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 446692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 447692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 448692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 449692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Sets the user-visible name of the route. 450692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * <p> 451692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * The route name identifies the destination represented by the route. 452692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * It may be a user-supplied name, an alias, or device serial number. 453692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * </p> 454692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 455692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder setName(String name) { 456692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle.putString(KEY_NAME, name); 457692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 458692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 459692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 460692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 461692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Sets the user-visible description of the route. 462692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * <p> 463692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * The route description describes the kind of destination represented by the route. 464692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * It may be a user-supplied string, a model number or brand of device. 465692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * </p> 466692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 467692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder setDescription(String description) { 468692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle.putString(KEY_DESCRIPTION, description); 469692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 470692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 471692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 472692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 473692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Sets the URI of the icon representing this route. 474692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * <p> 475692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * This icon will be used in picker UIs if available. 476692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * </p><p> 477692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * The URI must be one of the following formats: 478692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * <ul> 479692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * <li>content ({@link android.content.ContentResolver#SCHEME_CONTENT})</li> 480692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * <li>android.resource ({@link android.content.ContentResolver#SCHEME_ANDROID_RESOURCE}) 481692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * </li> 482692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * <li>file ({@link android.content.ContentResolver#SCHEME_FILE})</li> 483692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * </ul> 484692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * </p> 485692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 486692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder setIconUri(Uri iconUri) { 487692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim if (iconUri == null) { 488692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim throw new IllegalArgumentException("iconUri must not be null"); 489692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 490692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle.putString(KEY_ICON_URI, iconUri.toString()); 491692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 492692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 493692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 494692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 495692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Sets whether the route is enabled. 496692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * <p> 497692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Disabled routes represent routes that a route provider knows about, such as paired 498692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Wifi Display receivers, but that are not currently available for use. 499692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * </p> 500692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 501692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder setEnabled(boolean enabled) { 502692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle.putBoolean(KEY_ENABLED, enabled); 503692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 504692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 505692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 506692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 507692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Sets whether the route is in the process of connecting and is not yet 508692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * ready for use. 509692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @deprecated Use {@link #setConnectionState} instead. 510692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 511692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim @Deprecated 512692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder setConnecting(boolean connecting) { 513692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle.putBoolean(KEY_CONNECTING, connecting); 514692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 515692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 516692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 517692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 518692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Sets the route's connection state. 519692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * 520692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @param connectionState The connection state of the route: 521692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * {@link MediaRouter.RouteInfo#CONNECTION_STATE_DISCONNECTED}, 522692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * {@link MediaRouter.RouteInfo#CONNECTION_STATE_CONNECTING}, or 523692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * {@link MediaRouter.RouteInfo#CONNECTION_STATE_CONNECTED}. 524692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 525692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder setConnectionState(int connectionState) { 526692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle.putInt(KEY_CONNECTION_STATE, connectionState); 527692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 528692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 529692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 530692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 531692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Sets whether the route can be disconnected without stopping playback. 532692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 533692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder setCanDisconnect(boolean canDisconnect) { 534692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle.putBoolean(KEY_CAN_DISCONNECT, canDisconnect); 535692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 536692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 537692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 538692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 539692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Sets an intent sender for launching the settings activity for this 540692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * route. 541692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 542692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder setSettingsActivity(IntentSender is) { 543692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle.putParcelable(KEY_SETTINGS_INTENT, is); 544692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 545692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 546692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 547692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 548692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Adds a {@link MediaControlIntent media control intent} filter for the route. 549692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 550692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder addControlFilter(IntentFilter filter) { 551692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim if (filter == null) { 552692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim throw new IllegalArgumentException("filter must not be null"); 553692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 554692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 555692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim if (mControlFilters == null) { 556692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mControlFilters = new ArrayList<IntentFilter>(); 557692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 558692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim if (!mControlFilters.contains(filter)) { 559692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mControlFilters.add(filter); 560692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 561692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 562692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 563692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 564692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 565692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Adds a list of {@link MediaControlIntent media control intent} filters for the route. 566692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 567692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder addControlFilters(Collection<IntentFilter> filters) { 568692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim if (filters == null) { 569692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim throw new IllegalArgumentException("filters must not be null"); 570692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 571692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 572692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim if (!filters.isEmpty()) { 573692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim for (IntentFilter filter : filters) { 574692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim addControlFilter(filter); 575692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 576692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 577692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 578692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 579692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 580692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 581692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Sets the route's playback type. 582692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * 583692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @param playbackType The playback type of the route: 584692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * {@link MediaRouter.RouteInfo#PLAYBACK_TYPE_LOCAL} or 585692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * {@link MediaRouter.RouteInfo#PLAYBACK_TYPE_REMOTE}. 586692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 587692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder setPlaybackType(int playbackType) { 588692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle.putInt(KEY_PLAYBACK_TYPE, playbackType); 589692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 590692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 591692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 592692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 593692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Sets the route's playback stream. 594692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 595692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder setPlaybackStream(int playbackStream) { 596692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle.putInt(KEY_PLAYBACK_STREAM, playbackStream); 597692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 598692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 599692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 600692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 601692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Sets the route's receiver device type. 602692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * 603692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @param deviceType The receive device type of the route: 604692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * {@link MediaRouter.RouteInfo#DEVICE_TYPE_TV} or 605692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * {@link MediaRouter.RouteInfo#DEVICE_TYPE_SPEAKER}. 606692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 607692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder setDeviceType(int deviceType) { 608692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle.putInt(KEY_DEVICE_TYPE, deviceType); 609692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 610692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 611692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 612692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 613692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Sets the route's current volume, or 0 if unknown. 614692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 615692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder setVolume(int volume) { 616692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle.putInt(KEY_VOLUME, volume); 617692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 618692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 619692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 620692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 621692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Sets the route's maximum volume, or 0 if unknown. 622692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 623692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder setVolumeMax(int volumeMax) { 624692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle.putInt(KEY_VOLUME_MAX, volumeMax); 625692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 626692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 627692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 628692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 629692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Sets the route's volume handling. 630692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * 631692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @param volumeHandling how volume is handled on the route: 632692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * {@link MediaRouter.RouteInfo#PLAYBACK_VOLUME_FIXED} or 633692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * {@link MediaRouter.RouteInfo#PLAYBACK_VOLUME_VARIABLE}. 634692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 635692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder setVolumeHandling(int volumeHandling) { 636692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle.putInt(KEY_VOLUME_HANDLING, volumeHandling); 637692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 638692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 639692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 640692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 641692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Sets the route's presentation display id, or -1 if none. 642692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 643692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder setPresentationDisplayId(int presentationDisplayId) { 644692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle.putInt(KEY_PRESENTATION_DISPLAY_ID, presentationDisplayId); 645692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 646692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 647692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 648692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 649692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Sets a bundle of extras for this route descriptor. 650692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * The extras will be ignored by the media router but they may be used 651692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * by applications. 652692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 653692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder setExtras(Bundle extras) { 654692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle.putBundle(KEY_EXTRAS, extras); 655692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 656692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 657692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 658692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 659692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Sets the route's minimum client version. 660692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * A router whose version is lower than this will not be able to connect to this route. 661692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @hide 662692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 663692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim // @RestrictTo(LIBRARY_GROUP) 664692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder setMinClientVersion(int minVersion) { 665692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle.putInt(KEY_MIN_CLIENT_VERSION, minVersion); 666692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 667692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 668692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 669692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 670692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Sets the route's maximum client version. 671692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * A router whose version is higher than this will not be able to connect to this route. 672692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * @hide 673692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 674692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim // @RestrictTo(LIBRARY_GROUP) 675692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public Builder setMaxClientVersion(int maxVersion) { 676692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle.putInt(KEY_MAX_CLIENT_VERSION, maxVersion); 677692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return this; 678692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 679692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim 680692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim /** 681692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim * Builds the {@link MediaRouteDescriptor media route descriptor}. 682692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim */ 683692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim public MediaRouteDescriptor build() { 684692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim if (mControlFilters != null) { 685692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle.putParcelableArrayList(KEY_CONTROL_FILTERS, mControlFilters); 686692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 687692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim if (mGroupMemberIds != null) { 688692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim mBundle.putStringArrayList(KEY_GROUP_MEMBER_IDS, mGroupMemberIds); 689692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 690692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim return new MediaRouteDescriptor(mBundle, mControlFilters); 691692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 692692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim } 693692a547730bbc95ad277d5214ef3d786ce1e499fSungsoo Lim} 694