111417b1cfde8f1749905f2d735623af9214148afJeff Brown/* 211417b1cfde8f1749905f2d735623af9214148afJeff Brown * Copyright (C) 2013 The Android Open Source Project 311417b1cfde8f1749905f2d735623af9214148afJeff Brown * 411417b1cfde8f1749905f2d735623af9214148afJeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 511417b1cfde8f1749905f2d735623af9214148afJeff Brown * you may not use this file except in compliance with the License. 611417b1cfde8f1749905f2d735623af9214148afJeff Brown * You may obtain a copy of the License at 711417b1cfde8f1749905f2d735623af9214148afJeff Brown * 811417b1cfde8f1749905f2d735623af9214148afJeff Brown * http://www.apache.org/licenses/LICENSE-2.0 911417b1cfde8f1749905f2d735623af9214148afJeff Brown * 1011417b1cfde8f1749905f2d735623af9214148afJeff Brown * Unless required by applicable law or agreed to in writing, software 1111417b1cfde8f1749905f2d735623af9214148afJeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 1211417b1cfde8f1749905f2d735623af9214148afJeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1311417b1cfde8f1749905f2d735623af9214148afJeff Brown * See the License for the specific language governing permissions and 1411417b1cfde8f1749905f2d735623af9214148afJeff Brown * limitations under the License. 1511417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 1611417b1cfde8f1749905f2d735623af9214148afJeff Brownpackage android.support.v7.media; 1711417b1cfde8f1749905f2d735623af9214148afJeff Brown 1811417b1cfde8f1749905f2d735623af9214148afJeff Brownimport android.content.IntentFilter; 1911417b1cfde8f1749905f2d735623af9214148afJeff Brownimport android.os.Bundle; 2011417b1cfde8f1749905f2d735623af9214148afJeff Brownimport android.text.TextUtils; 2111417b1cfde8f1749905f2d735623af9214148afJeff Brown 2211417b1cfde8f1749905f2d735623af9214148afJeff Brownimport java.util.ArrayList; 2311417b1cfde8f1749905f2d735623af9214148afJeff Brownimport java.util.Arrays; 247599feee523c7b7d33576ae5825e43e3d62cbcbeJeff Brownimport java.util.Collection; 2511417b1cfde8f1749905f2d735623af9214148afJeff Brownimport java.util.Collections; 2611417b1cfde8f1749905f2d735623af9214148afJeff Brownimport java.util.List; 2711417b1cfde8f1749905f2d735623af9214148afJeff Brown 2811417b1cfde8f1749905f2d735623af9214148afJeff Brown/** 2911417b1cfde8f1749905f2d735623af9214148afJeff Brown * Describes the properties of a route. 3011417b1cfde8f1749905f2d735623af9214148afJeff Brown * <p> 3111417b1cfde8f1749905f2d735623af9214148afJeff Brown * Each route is uniquely identified by an opaque id string. This token 3211417b1cfde8f1749905f2d735623af9214148afJeff Brown * may take any form as long as it is unique within the media route provider. 3311417b1cfde8f1749905f2d735623af9214148afJeff Brown * </p><p> 3411417b1cfde8f1749905f2d735623af9214148afJeff Brown * This object is immutable once created using a {@link Builder} instance. 3511417b1cfde8f1749905f2d735623af9214148afJeff Brown * </p> 3611417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 3711417b1cfde8f1749905f2d735623af9214148afJeff Brownpublic final class MediaRouteDescriptor { 3811417b1cfde8f1749905f2d735623af9214148afJeff Brown private static final String KEY_ID = "id"; 3911417b1cfde8f1749905f2d735623af9214148afJeff Brown private static final String KEY_NAME = "name"; 40d63957d28aaabcec588b8cde12eac16414783aebJeff Brown private static final String KEY_DESCRIPTION = "status"; 4111417b1cfde8f1749905f2d735623af9214148afJeff Brown private static final String KEY_ENABLED = "enabled"; 4211417b1cfde8f1749905f2d735623af9214148afJeff Brown private static final String KEY_CONNECTING = "connecting"; 4311417b1cfde8f1749905f2d735623af9214148afJeff Brown private static final String KEY_CONTROL_FILTERS = "controlFilters"; 4411417b1cfde8f1749905f2d735623af9214148afJeff Brown private static final String KEY_PLAYBACK_TYPE = "playbackType"; 4511417b1cfde8f1749905f2d735623af9214148afJeff Brown private static final String KEY_PLAYBACK_STREAM = "playbackStream"; 4611417b1cfde8f1749905f2d735623af9214148afJeff Brown private static final String KEY_VOLUME = "volume"; 4711417b1cfde8f1749905f2d735623af9214148afJeff Brown private static final String KEY_VOLUME_MAX = "volumeMax"; 4811417b1cfde8f1749905f2d735623af9214148afJeff Brown private static final String KEY_VOLUME_HANDLING = "volumeHandling"; 4911417b1cfde8f1749905f2d735623af9214148afJeff Brown private static final String KEY_PRESENTATION_DISPLAY_ID = "presentationDisplayId"; 5011417b1cfde8f1749905f2d735623af9214148afJeff Brown private static final String KEY_EXTRAS = "extras"; 5111417b1cfde8f1749905f2d735623af9214148afJeff Brown 5211417b1cfde8f1749905f2d735623af9214148afJeff Brown private final Bundle mBundle; 5311417b1cfde8f1749905f2d735623af9214148afJeff Brown private List<IntentFilter> mControlFilters; 5411417b1cfde8f1749905f2d735623af9214148afJeff Brown 5555b361aea868e53e848bc45af3a55ae43e7871c3Jeff Brown private MediaRouteDescriptor(Bundle bundle, List<IntentFilter> controlFilters) { 5611417b1cfde8f1749905f2d735623af9214148afJeff Brown mBundle = bundle; 5711417b1cfde8f1749905f2d735623af9214148afJeff Brown mControlFilters = controlFilters; 5811417b1cfde8f1749905f2d735623af9214148afJeff Brown } 5911417b1cfde8f1749905f2d735623af9214148afJeff Brown 6011417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 6111417b1cfde8f1749905f2d735623af9214148afJeff Brown * Gets the unique id of the route. 62cb63b6ecac9786891514f241dec71695f09d3efbJeff Brown * <p> 63cb63b6ecac9786891514f241dec71695f09d3efbJeff Brown * The route id associated with a route descriptor functions as a stable 64cb63b6ecac9786891514f241dec71695f09d3efbJeff Brown * identifier for the route and must be unique among all routes offered 65cb63b6ecac9786891514f241dec71695f09d3efbJeff Brown * by the provider. 66cb63b6ecac9786891514f241dec71695f09d3efbJeff Brown * </p> 6711417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 6811417b1cfde8f1749905f2d735623af9214148afJeff Brown public String getId() { 6911417b1cfde8f1749905f2d735623af9214148afJeff Brown return mBundle.getString(KEY_ID); 7011417b1cfde8f1749905f2d735623af9214148afJeff Brown } 7111417b1cfde8f1749905f2d735623af9214148afJeff Brown 7211417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 73d63957d28aaabcec588b8cde12eac16414783aebJeff Brown * Gets the user-visible name of the route. 74d63957d28aaabcec588b8cde12eac16414783aebJeff Brown * <p> 75d63957d28aaabcec588b8cde12eac16414783aebJeff Brown * The route name identifies the destination represented by the route. 76d63957d28aaabcec588b8cde12eac16414783aebJeff Brown * It may be a user-supplied name, an alias, or device serial number. 77d63957d28aaabcec588b8cde12eac16414783aebJeff Brown * </p> 7811417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 7911417b1cfde8f1749905f2d735623af9214148afJeff Brown public String getName() { 8011417b1cfde8f1749905f2d735623af9214148afJeff Brown return mBundle.getString(KEY_NAME); 8111417b1cfde8f1749905f2d735623af9214148afJeff Brown } 8211417b1cfde8f1749905f2d735623af9214148afJeff Brown 8311417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 84d63957d28aaabcec588b8cde12eac16414783aebJeff Brown * Gets the user-visible description of the route. 85d63957d28aaabcec588b8cde12eac16414783aebJeff Brown * <p> 86d63957d28aaabcec588b8cde12eac16414783aebJeff Brown * The route description describes the kind of destination represented by the route. 87d63957d28aaabcec588b8cde12eac16414783aebJeff Brown * It may be a user-supplied string, a model number or brand of device. 88d63957d28aaabcec588b8cde12eac16414783aebJeff Brown * </p> 8911417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 90d63957d28aaabcec588b8cde12eac16414783aebJeff Brown public String getDescription() { 91d63957d28aaabcec588b8cde12eac16414783aebJeff Brown return mBundle.getString(KEY_DESCRIPTION); 9211417b1cfde8f1749905f2d735623af9214148afJeff Brown } 9311417b1cfde8f1749905f2d735623af9214148afJeff Brown 9411417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 9511417b1cfde8f1749905f2d735623af9214148afJeff Brown * Gets whether the route is enabled. 9611417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 9711417b1cfde8f1749905f2d735623af9214148afJeff Brown public boolean isEnabled() { 9811417b1cfde8f1749905f2d735623af9214148afJeff Brown return mBundle.getBoolean(KEY_ENABLED, true); 9911417b1cfde8f1749905f2d735623af9214148afJeff Brown } 10011417b1cfde8f1749905f2d735623af9214148afJeff Brown 10111417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 10211417b1cfde8f1749905f2d735623af9214148afJeff Brown * Gets whether the route is connecting. 10311417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 10411417b1cfde8f1749905f2d735623af9214148afJeff Brown public boolean isConnecting() { 10511417b1cfde8f1749905f2d735623af9214148afJeff Brown return mBundle.getBoolean(KEY_CONNECTING, false); 10611417b1cfde8f1749905f2d735623af9214148afJeff Brown } 10711417b1cfde8f1749905f2d735623af9214148afJeff Brown 10811417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 10911417b1cfde8f1749905f2d735623af9214148afJeff Brown * Gets the route's {@link MediaControlIntent media control intent} filters. 11011417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 11111417b1cfde8f1749905f2d735623af9214148afJeff Brown public List<IntentFilter> getControlFilters() { 11211417b1cfde8f1749905f2d735623af9214148afJeff Brown ensureControlFilters(); 11311417b1cfde8f1749905f2d735623af9214148afJeff Brown return mControlFilters; 11411417b1cfde8f1749905f2d735623af9214148afJeff Brown } 11511417b1cfde8f1749905f2d735623af9214148afJeff Brown 11611417b1cfde8f1749905f2d735623af9214148afJeff Brown private void ensureControlFilters() { 11711417b1cfde8f1749905f2d735623af9214148afJeff Brown if (mControlFilters == null) { 11811417b1cfde8f1749905f2d735623af9214148afJeff Brown mControlFilters = mBundle.<IntentFilter>getParcelableArrayList(KEY_CONTROL_FILTERS); 11911417b1cfde8f1749905f2d735623af9214148afJeff Brown if (mControlFilters == null) { 12011417b1cfde8f1749905f2d735623af9214148afJeff Brown mControlFilters = Collections.<IntentFilter>emptyList(); 12111417b1cfde8f1749905f2d735623af9214148afJeff Brown } 12211417b1cfde8f1749905f2d735623af9214148afJeff Brown } 12311417b1cfde8f1749905f2d735623af9214148afJeff Brown } 12411417b1cfde8f1749905f2d735623af9214148afJeff Brown 12511417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 12611417b1cfde8f1749905f2d735623af9214148afJeff Brown * Gets the route's playback type. 12711417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 12811417b1cfde8f1749905f2d735623af9214148afJeff Brown public int getPlaybackType() { 12911417b1cfde8f1749905f2d735623af9214148afJeff Brown return mBundle.getInt(KEY_PLAYBACK_TYPE, MediaRouter.RouteInfo.PLAYBACK_TYPE_REMOTE); 13011417b1cfde8f1749905f2d735623af9214148afJeff Brown } 13111417b1cfde8f1749905f2d735623af9214148afJeff Brown 13211417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 13311417b1cfde8f1749905f2d735623af9214148afJeff Brown * Gets the route's playback stream. 13411417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 13511417b1cfde8f1749905f2d735623af9214148afJeff Brown public int getPlaybackStream() { 13611417b1cfde8f1749905f2d735623af9214148afJeff Brown return mBundle.getInt(KEY_PLAYBACK_STREAM, -1); 13711417b1cfde8f1749905f2d735623af9214148afJeff Brown } 13811417b1cfde8f1749905f2d735623af9214148afJeff Brown 13911417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 14011417b1cfde8f1749905f2d735623af9214148afJeff Brown * Gets the route's current volume, or 0 if unknown. 14111417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 14211417b1cfde8f1749905f2d735623af9214148afJeff Brown public int getVolume() { 14311417b1cfde8f1749905f2d735623af9214148afJeff Brown return mBundle.getInt(KEY_VOLUME); 14411417b1cfde8f1749905f2d735623af9214148afJeff Brown } 14511417b1cfde8f1749905f2d735623af9214148afJeff Brown 14611417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 14711417b1cfde8f1749905f2d735623af9214148afJeff Brown * Gets the route's maximum volume, or 0 if unknown. 14811417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 14911417b1cfde8f1749905f2d735623af9214148afJeff Brown public int getVolumeMax() { 15011417b1cfde8f1749905f2d735623af9214148afJeff Brown return mBundle.getInt(KEY_VOLUME_MAX); 15111417b1cfde8f1749905f2d735623af9214148afJeff Brown } 15211417b1cfde8f1749905f2d735623af9214148afJeff Brown 15311417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 15411417b1cfde8f1749905f2d735623af9214148afJeff Brown * Gets the route's volume handling. 15511417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 15611417b1cfde8f1749905f2d735623af9214148afJeff Brown public int getVolumeHandling() { 15711417b1cfde8f1749905f2d735623af9214148afJeff Brown return mBundle.getInt(KEY_VOLUME_HANDLING, 15811417b1cfde8f1749905f2d735623af9214148afJeff Brown MediaRouter.RouteInfo.PLAYBACK_VOLUME_FIXED); 15911417b1cfde8f1749905f2d735623af9214148afJeff Brown } 16011417b1cfde8f1749905f2d735623af9214148afJeff Brown 16111417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 16211417b1cfde8f1749905f2d735623af9214148afJeff Brown * Gets the route's presentation display id, or -1 if none. 16311417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 16411417b1cfde8f1749905f2d735623af9214148afJeff Brown public int getPresentationDisplayId() { 16511417b1cfde8f1749905f2d735623af9214148afJeff Brown return mBundle.getInt(KEY_PRESENTATION_DISPLAY_ID, -1); 16611417b1cfde8f1749905f2d735623af9214148afJeff Brown } 16711417b1cfde8f1749905f2d735623af9214148afJeff Brown 16811417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 16911417b1cfde8f1749905f2d735623af9214148afJeff Brown * Gets a bundle of extras for this route descriptor. 17011417b1cfde8f1749905f2d735623af9214148afJeff Brown * The extras will be ignored by the media router but they may be used 17111417b1cfde8f1749905f2d735623af9214148afJeff Brown * by applications. 17211417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 17311417b1cfde8f1749905f2d735623af9214148afJeff Brown public Bundle getExtras() { 17411417b1cfde8f1749905f2d735623af9214148afJeff Brown return mBundle.getBundle(KEY_EXTRAS); 17511417b1cfde8f1749905f2d735623af9214148afJeff Brown } 17611417b1cfde8f1749905f2d735623af9214148afJeff Brown 17711417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 17811417b1cfde8f1749905f2d735623af9214148afJeff Brown * Returns true if the route descriptor has all of the required fields. 17911417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 18011417b1cfde8f1749905f2d735623af9214148afJeff Brown public boolean isValid() { 18111417b1cfde8f1749905f2d735623af9214148afJeff Brown ensureControlFilters(); 18211417b1cfde8f1749905f2d735623af9214148afJeff Brown if (TextUtils.isEmpty(getId()) 18311417b1cfde8f1749905f2d735623af9214148afJeff Brown || TextUtils.isEmpty(getName()) 18411417b1cfde8f1749905f2d735623af9214148afJeff Brown || mControlFilters.contains(null)) { 18511417b1cfde8f1749905f2d735623af9214148afJeff Brown return false; 18611417b1cfde8f1749905f2d735623af9214148afJeff Brown } 18711417b1cfde8f1749905f2d735623af9214148afJeff Brown return true; 18811417b1cfde8f1749905f2d735623af9214148afJeff Brown } 18911417b1cfde8f1749905f2d735623af9214148afJeff Brown 19011417b1cfde8f1749905f2d735623af9214148afJeff Brown @Override 19111417b1cfde8f1749905f2d735623af9214148afJeff Brown public String toString() { 19211417b1cfde8f1749905f2d735623af9214148afJeff Brown StringBuilder result = new StringBuilder(); 19311417b1cfde8f1749905f2d735623af9214148afJeff Brown result.append("MediaRouteDescriptor{ "); 19411417b1cfde8f1749905f2d735623af9214148afJeff Brown result.append("id=").append(getId()); 19511417b1cfde8f1749905f2d735623af9214148afJeff Brown result.append(", name=").append(getName()); 196d63957d28aaabcec588b8cde12eac16414783aebJeff Brown result.append(", description=").append(getDescription()); 19711417b1cfde8f1749905f2d735623af9214148afJeff Brown result.append(", isEnabled=").append(isEnabled()); 19811417b1cfde8f1749905f2d735623af9214148afJeff Brown result.append(", isConnecting=").append(isConnecting()); 19911417b1cfde8f1749905f2d735623af9214148afJeff Brown result.append(", controlFilters=").append(Arrays.toString(getControlFilters().toArray())); 20011417b1cfde8f1749905f2d735623af9214148afJeff Brown result.append(", playbackType=").append(getPlaybackType()); 20111417b1cfde8f1749905f2d735623af9214148afJeff Brown result.append(", playbackStream=").append(getPlaybackStream()); 20211417b1cfde8f1749905f2d735623af9214148afJeff Brown result.append(", volume=").append(getVolume()); 20311417b1cfde8f1749905f2d735623af9214148afJeff Brown result.append(", volumeMax=").append(getVolumeMax()); 20411417b1cfde8f1749905f2d735623af9214148afJeff Brown result.append(", volumeHandling=").append(getVolumeHandling()); 20511417b1cfde8f1749905f2d735623af9214148afJeff Brown result.append(", presentationDisplayId=").append(getPresentationDisplayId()); 20611417b1cfde8f1749905f2d735623af9214148afJeff Brown result.append(", extras=").append(getExtras()); 20711417b1cfde8f1749905f2d735623af9214148afJeff Brown result.append(", isValid=").append(isValid()); 2083d4c9459ed77f732dd3ba602713af6ebf9280c8cJeff Brown result.append(" }"); 20911417b1cfde8f1749905f2d735623af9214148afJeff Brown return result.toString(); 21011417b1cfde8f1749905f2d735623af9214148afJeff Brown } 21111417b1cfde8f1749905f2d735623af9214148afJeff Brown 21211417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 21311417b1cfde8f1749905f2d735623af9214148afJeff Brown * Converts this object to a bundle for serialization. 21411417b1cfde8f1749905f2d735623af9214148afJeff Brown * 21511417b1cfde8f1749905f2d735623af9214148afJeff Brown * @return The contents of the object represented as a bundle. 21611417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 21711417b1cfde8f1749905f2d735623af9214148afJeff Brown public Bundle asBundle() { 21811417b1cfde8f1749905f2d735623af9214148afJeff Brown return mBundle; 21911417b1cfde8f1749905f2d735623af9214148afJeff Brown } 22011417b1cfde8f1749905f2d735623af9214148afJeff Brown 22111417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 22211417b1cfde8f1749905f2d735623af9214148afJeff Brown * Creates an instance from a bundle. 22311417b1cfde8f1749905f2d735623af9214148afJeff Brown * 22411417b1cfde8f1749905f2d735623af9214148afJeff Brown * @param bundle The bundle, or null if none. 22511417b1cfde8f1749905f2d735623af9214148afJeff Brown * @return The new instance, or null if the bundle was null. 22611417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 22711417b1cfde8f1749905f2d735623af9214148afJeff Brown public static MediaRouteDescriptor fromBundle(Bundle bundle) { 22855b361aea868e53e848bc45af3a55ae43e7871c3Jeff Brown return bundle != null ? new MediaRouteDescriptor(bundle, null) : null; 22911417b1cfde8f1749905f2d735623af9214148afJeff Brown } 23011417b1cfde8f1749905f2d735623af9214148afJeff Brown 23111417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 23211417b1cfde8f1749905f2d735623af9214148afJeff Brown * Builder for {@link MediaRouteDescriptor media route descriptors}. 23311417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 23411417b1cfde8f1749905f2d735623af9214148afJeff Brown public static final class Builder { 23511417b1cfde8f1749905f2d735623af9214148afJeff Brown private final Bundle mBundle; 23611417b1cfde8f1749905f2d735623af9214148afJeff Brown private ArrayList<IntentFilter> mControlFilters; 23711417b1cfde8f1749905f2d735623af9214148afJeff Brown 23811417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 23911417b1cfde8f1749905f2d735623af9214148afJeff Brown * Creates a media route descriptor builder. 24011417b1cfde8f1749905f2d735623af9214148afJeff Brown * 24111417b1cfde8f1749905f2d735623af9214148afJeff Brown * @param id The unique id of the route. 242d63957d28aaabcec588b8cde12eac16414783aebJeff Brown * @param name The user-visible name of the route. 24311417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 24411417b1cfde8f1749905f2d735623af9214148afJeff Brown public Builder(String id, String name) { 24511417b1cfde8f1749905f2d735623af9214148afJeff Brown mBundle = new Bundle(); 24611417b1cfde8f1749905f2d735623af9214148afJeff Brown setId(id); 24711417b1cfde8f1749905f2d735623af9214148afJeff Brown setName(name); 24811417b1cfde8f1749905f2d735623af9214148afJeff Brown } 24911417b1cfde8f1749905f2d735623af9214148afJeff Brown 25011417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 25111417b1cfde8f1749905f2d735623af9214148afJeff Brown * Creates a media route descriptor builder whose initial contents are 25211417b1cfde8f1749905f2d735623af9214148afJeff Brown * copied from an existing descriptor. 25311417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 25411417b1cfde8f1749905f2d735623af9214148afJeff Brown public Builder(MediaRouteDescriptor descriptor) { 25511417b1cfde8f1749905f2d735623af9214148afJeff Brown if (descriptor == null) { 25611417b1cfde8f1749905f2d735623af9214148afJeff Brown throw new IllegalArgumentException("descriptor must not be null"); 25711417b1cfde8f1749905f2d735623af9214148afJeff Brown } 25811417b1cfde8f1749905f2d735623af9214148afJeff Brown 25911417b1cfde8f1749905f2d735623af9214148afJeff Brown mBundle = new Bundle(descriptor.mBundle); 26011417b1cfde8f1749905f2d735623af9214148afJeff Brown 26111417b1cfde8f1749905f2d735623af9214148afJeff Brown descriptor.ensureControlFilters(); 26211417b1cfde8f1749905f2d735623af9214148afJeff Brown if (!descriptor.mControlFilters.isEmpty()) { 26311417b1cfde8f1749905f2d735623af9214148afJeff Brown mControlFilters = new ArrayList<IntentFilter>(descriptor.mControlFilters); 26411417b1cfde8f1749905f2d735623af9214148afJeff Brown } 26511417b1cfde8f1749905f2d735623af9214148afJeff Brown } 26611417b1cfde8f1749905f2d735623af9214148afJeff Brown 26711417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 26811417b1cfde8f1749905f2d735623af9214148afJeff Brown * Sets the unique id of the route. 269cb63b6ecac9786891514f241dec71695f09d3efbJeff Brown * <p> 270cb63b6ecac9786891514f241dec71695f09d3efbJeff Brown * The route id associated with a route descriptor functions as a stable 271cb63b6ecac9786891514f241dec71695f09d3efbJeff Brown * identifier for the route and must be unique among all routes offered 272cb63b6ecac9786891514f241dec71695f09d3efbJeff Brown * by the provider. 273cb63b6ecac9786891514f241dec71695f09d3efbJeff Brown * </p> 27411417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 27511417b1cfde8f1749905f2d735623af9214148afJeff Brown public Builder setId(String id) { 27611417b1cfde8f1749905f2d735623af9214148afJeff Brown mBundle.putString(KEY_ID, id); 27711417b1cfde8f1749905f2d735623af9214148afJeff Brown return this; 27811417b1cfde8f1749905f2d735623af9214148afJeff Brown } 27911417b1cfde8f1749905f2d735623af9214148afJeff Brown 28011417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 281d63957d28aaabcec588b8cde12eac16414783aebJeff Brown * Sets the user-visible name of the route. 282d63957d28aaabcec588b8cde12eac16414783aebJeff Brown * <p> 283d63957d28aaabcec588b8cde12eac16414783aebJeff Brown * The route name identifies the destination represented by the route. 284d63957d28aaabcec588b8cde12eac16414783aebJeff Brown * It may be a user-supplied name, an alias, or device serial number. 285d63957d28aaabcec588b8cde12eac16414783aebJeff Brown * </p> 28611417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 28711417b1cfde8f1749905f2d735623af9214148afJeff Brown public Builder setName(String name) { 28811417b1cfde8f1749905f2d735623af9214148afJeff Brown mBundle.putString(KEY_NAME, name); 28911417b1cfde8f1749905f2d735623af9214148afJeff Brown return this; 29011417b1cfde8f1749905f2d735623af9214148afJeff Brown } 29111417b1cfde8f1749905f2d735623af9214148afJeff Brown 29211417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 293d63957d28aaabcec588b8cde12eac16414783aebJeff Brown * Sets the user-visible description of the route. 294d63957d28aaabcec588b8cde12eac16414783aebJeff Brown * <p> 295d63957d28aaabcec588b8cde12eac16414783aebJeff Brown * The route description describes the kind of destination represented by the route. 296d63957d28aaabcec588b8cde12eac16414783aebJeff Brown * It may be a user-supplied string, a model number or brand of device. 297d63957d28aaabcec588b8cde12eac16414783aebJeff Brown * </p> 29811417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 299d63957d28aaabcec588b8cde12eac16414783aebJeff Brown public Builder setDescription(String description) { 300d63957d28aaabcec588b8cde12eac16414783aebJeff Brown mBundle.putString(KEY_DESCRIPTION, description); 30111417b1cfde8f1749905f2d735623af9214148afJeff Brown return this; 30211417b1cfde8f1749905f2d735623af9214148afJeff Brown } 30311417b1cfde8f1749905f2d735623af9214148afJeff Brown 30411417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 30511417b1cfde8f1749905f2d735623af9214148afJeff Brown * Sets whether the route is enabled. 30611417b1cfde8f1749905f2d735623af9214148afJeff Brown * <p> 30711417b1cfde8f1749905f2d735623af9214148afJeff Brown * Disabled routes represent routes that a route provider knows about, such as paired 30811417b1cfde8f1749905f2d735623af9214148afJeff Brown * Wifi Display receivers, but that are not currently available for use. 30911417b1cfde8f1749905f2d735623af9214148afJeff Brown * </p> 31011417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 31111417b1cfde8f1749905f2d735623af9214148afJeff Brown public Builder setEnabled(boolean enabled) { 31211417b1cfde8f1749905f2d735623af9214148afJeff Brown mBundle.putBoolean(KEY_ENABLED, enabled); 31311417b1cfde8f1749905f2d735623af9214148afJeff Brown return this; 31411417b1cfde8f1749905f2d735623af9214148afJeff Brown } 31511417b1cfde8f1749905f2d735623af9214148afJeff Brown 31611417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 31711417b1cfde8f1749905f2d735623af9214148afJeff Brown * Sets whether the route is in the process of connecting and is not yet 31811417b1cfde8f1749905f2d735623af9214148afJeff Brown * ready for use. 31911417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 32011417b1cfde8f1749905f2d735623af9214148afJeff Brown public Builder setConnecting(boolean connecting) { 32111417b1cfde8f1749905f2d735623af9214148afJeff Brown mBundle.putBoolean(KEY_CONNECTING, connecting); 32211417b1cfde8f1749905f2d735623af9214148afJeff Brown return this; 32311417b1cfde8f1749905f2d735623af9214148afJeff Brown } 32411417b1cfde8f1749905f2d735623af9214148afJeff Brown 32511417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 32611417b1cfde8f1749905f2d735623af9214148afJeff Brown * Adds a {@link MediaControlIntent media control intent} filter for the route. 32711417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 32811417b1cfde8f1749905f2d735623af9214148afJeff Brown public Builder addControlFilter(IntentFilter filter) { 32911417b1cfde8f1749905f2d735623af9214148afJeff Brown if (filter == null) { 33011417b1cfde8f1749905f2d735623af9214148afJeff Brown throw new IllegalArgumentException("filter must not be null"); 33111417b1cfde8f1749905f2d735623af9214148afJeff Brown } 33211417b1cfde8f1749905f2d735623af9214148afJeff Brown 33311417b1cfde8f1749905f2d735623af9214148afJeff Brown if (mControlFilters == null) { 33411417b1cfde8f1749905f2d735623af9214148afJeff Brown mControlFilters = new ArrayList<IntentFilter>(); 33511417b1cfde8f1749905f2d735623af9214148afJeff Brown } 33611417b1cfde8f1749905f2d735623af9214148afJeff Brown if (!mControlFilters.contains(filter)) { 33711417b1cfde8f1749905f2d735623af9214148afJeff Brown mControlFilters.add(filter); 33811417b1cfde8f1749905f2d735623af9214148afJeff Brown } 33911417b1cfde8f1749905f2d735623af9214148afJeff Brown return this; 34011417b1cfde8f1749905f2d735623af9214148afJeff Brown } 34111417b1cfde8f1749905f2d735623af9214148afJeff Brown 34211417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 34311417b1cfde8f1749905f2d735623af9214148afJeff Brown * Adds a list of {@link MediaControlIntent media control intent} filters for the route. 34411417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 3457599feee523c7b7d33576ae5825e43e3d62cbcbeJeff Brown public Builder addControlFilters(Collection<IntentFilter> filters) { 34611417b1cfde8f1749905f2d735623af9214148afJeff Brown if (filters == null) { 34711417b1cfde8f1749905f2d735623af9214148afJeff Brown throw new IllegalArgumentException("filters must not be null"); 34811417b1cfde8f1749905f2d735623af9214148afJeff Brown } 34911417b1cfde8f1749905f2d735623af9214148afJeff Brown 3507599feee523c7b7d33576ae5825e43e3d62cbcbeJeff Brown if (!filters.isEmpty()) { 3517599feee523c7b7d33576ae5825e43e3d62cbcbeJeff Brown for (IntentFilter filter : filters) { 3527599feee523c7b7d33576ae5825e43e3d62cbcbeJeff Brown addControlFilter(filter); 3537599feee523c7b7d33576ae5825e43e3d62cbcbeJeff Brown } 35411417b1cfde8f1749905f2d735623af9214148afJeff Brown } 35511417b1cfde8f1749905f2d735623af9214148afJeff Brown return this; 35611417b1cfde8f1749905f2d735623af9214148afJeff Brown } 35711417b1cfde8f1749905f2d735623af9214148afJeff Brown 35811417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 35911417b1cfde8f1749905f2d735623af9214148afJeff Brown * Sets the route's playback type. 36011417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 36111417b1cfde8f1749905f2d735623af9214148afJeff Brown public Builder setPlaybackType(int playbackType) { 36211417b1cfde8f1749905f2d735623af9214148afJeff Brown mBundle.putInt(KEY_PLAYBACK_TYPE, playbackType); 36311417b1cfde8f1749905f2d735623af9214148afJeff Brown return this; 36411417b1cfde8f1749905f2d735623af9214148afJeff Brown } 36511417b1cfde8f1749905f2d735623af9214148afJeff Brown 36611417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 36711417b1cfde8f1749905f2d735623af9214148afJeff Brown * Sets the route's playback stream. 36811417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 36911417b1cfde8f1749905f2d735623af9214148afJeff Brown public Builder setPlaybackStream(int playbackStream) { 37011417b1cfde8f1749905f2d735623af9214148afJeff Brown mBundle.putInt(KEY_PLAYBACK_STREAM, playbackStream); 37111417b1cfde8f1749905f2d735623af9214148afJeff Brown return this; 37211417b1cfde8f1749905f2d735623af9214148afJeff Brown } 37311417b1cfde8f1749905f2d735623af9214148afJeff Brown 37411417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 37511417b1cfde8f1749905f2d735623af9214148afJeff Brown * Sets the route's current volume, or 0 if unknown. 37611417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 37711417b1cfde8f1749905f2d735623af9214148afJeff Brown public Builder setVolume(int volume) { 37811417b1cfde8f1749905f2d735623af9214148afJeff Brown mBundle.putInt(KEY_VOLUME, volume); 37911417b1cfde8f1749905f2d735623af9214148afJeff Brown return this; 38011417b1cfde8f1749905f2d735623af9214148afJeff Brown } 38111417b1cfde8f1749905f2d735623af9214148afJeff Brown 38211417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 38311417b1cfde8f1749905f2d735623af9214148afJeff Brown * Sets the route's maximum volume, or 0 if unknown. 38411417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 38511417b1cfde8f1749905f2d735623af9214148afJeff Brown public Builder setVolumeMax(int volumeMax) { 38611417b1cfde8f1749905f2d735623af9214148afJeff Brown mBundle.putInt(KEY_VOLUME_MAX, volumeMax); 38711417b1cfde8f1749905f2d735623af9214148afJeff Brown return this; 38811417b1cfde8f1749905f2d735623af9214148afJeff Brown } 38911417b1cfde8f1749905f2d735623af9214148afJeff Brown 39011417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 39111417b1cfde8f1749905f2d735623af9214148afJeff Brown * Sets the route's volume handling. 39211417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 39311417b1cfde8f1749905f2d735623af9214148afJeff Brown public Builder setVolumeHandling(int volumeHandling) { 39411417b1cfde8f1749905f2d735623af9214148afJeff Brown mBundle.putInt(KEY_VOLUME_HANDLING, volumeHandling); 39511417b1cfde8f1749905f2d735623af9214148afJeff Brown return this; 39611417b1cfde8f1749905f2d735623af9214148afJeff Brown } 39711417b1cfde8f1749905f2d735623af9214148afJeff Brown 39811417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 39911417b1cfde8f1749905f2d735623af9214148afJeff Brown * Sets the route's presentation display id, or -1 if none. 40011417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 40111417b1cfde8f1749905f2d735623af9214148afJeff Brown public Builder setPresentationDisplayId(int presentationDisplayId) { 40211417b1cfde8f1749905f2d735623af9214148afJeff Brown mBundle.putInt(KEY_PRESENTATION_DISPLAY_ID, presentationDisplayId); 40311417b1cfde8f1749905f2d735623af9214148afJeff Brown return this; 40411417b1cfde8f1749905f2d735623af9214148afJeff Brown } 40511417b1cfde8f1749905f2d735623af9214148afJeff Brown 40611417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 40711417b1cfde8f1749905f2d735623af9214148afJeff Brown * Sets a bundle of extras for this route descriptor. 40811417b1cfde8f1749905f2d735623af9214148afJeff Brown * The extras will be ignored by the media router but they may be used 40911417b1cfde8f1749905f2d735623af9214148afJeff Brown * by applications. 41011417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 41111417b1cfde8f1749905f2d735623af9214148afJeff Brown public Builder setExtras(Bundle extras) { 41211417b1cfde8f1749905f2d735623af9214148afJeff Brown mBundle.putBundle(KEY_EXTRAS, extras); 41311417b1cfde8f1749905f2d735623af9214148afJeff Brown return this; 41411417b1cfde8f1749905f2d735623af9214148afJeff Brown } 41511417b1cfde8f1749905f2d735623af9214148afJeff Brown 41611417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 41711417b1cfde8f1749905f2d735623af9214148afJeff Brown * Builds the {@link MediaRouteDescriptor media route descriptor}. 41811417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 41911417b1cfde8f1749905f2d735623af9214148afJeff Brown public MediaRouteDescriptor build() { 42011417b1cfde8f1749905f2d735623af9214148afJeff Brown if (mControlFilters != null) { 42111417b1cfde8f1749905f2d735623af9214148afJeff Brown mBundle.putParcelableArrayList(KEY_CONTROL_FILTERS, mControlFilters); 42211417b1cfde8f1749905f2d735623af9214148afJeff Brown } 42355b361aea868e53e848bc45af3a55ae43e7871c3Jeff Brown return new MediaRouteDescriptor(mBundle, mControlFilters); 42411417b1cfde8f1749905f2d735623af9214148afJeff Brown } 42511417b1cfde8f1749905f2d735623af9214148afJeff Brown } 42611417b1cfde8f1749905f2d735623af9214148afJeff Brown}