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.os.Bundle; 1911417b1cfde8f1749905f2d735623af9214148afJeff Brown 2011417b1cfde8f1749905f2d735623af9214148afJeff Brown/** 2111417b1cfde8f1749905f2d735623af9214148afJeff Brown * Describes the kinds of routes that the media router would like to discover 2211417b1cfde8f1749905f2d735623af9214148afJeff Brown * and whether to perform active scanning. 2311417b1cfde8f1749905f2d735623af9214148afJeff Brown * <p> 2411417b1cfde8f1749905f2d735623af9214148afJeff Brown * This object is immutable once created. 2511417b1cfde8f1749905f2d735623af9214148afJeff Brown * </p> 2611417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 2711417b1cfde8f1749905f2d735623af9214148afJeff Brownpublic final class MediaRouteDiscoveryRequest { 2811417b1cfde8f1749905f2d735623af9214148afJeff Brown private static final String KEY_SELECTOR = "selector"; 2911417b1cfde8f1749905f2d735623af9214148afJeff Brown private static final String KEY_ACTIVE_SCAN = "activeScan"; 3011417b1cfde8f1749905f2d735623af9214148afJeff Brown 3111417b1cfde8f1749905f2d735623af9214148afJeff Brown private final Bundle mBundle; 3211417b1cfde8f1749905f2d735623af9214148afJeff Brown private MediaRouteSelector mSelector; 3311417b1cfde8f1749905f2d735623af9214148afJeff Brown 3411417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 3511417b1cfde8f1749905f2d735623af9214148afJeff Brown * Creates a media route discovery request. 3611417b1cfde8f1749905f2d735623af9214148afJeff Brown * 3711417b1cfde8f1749905f2d735623af9214148afJeff Brown * @param selector The route selector that specifies the kinds of routes to discover. 3811417b1cfde8f1749905f2d735623af9214148afJeff Brown * @param activeScan True if active scanning should be performed. 3911417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 4011417b1cfde8f1749905f2d735623af9214148afJeff Brown public MediaRouteDiscoveryRequest(MediaRouteSelector selector, boolean activeScan) { 4111417b1cfde8f1749905f2d735623af9214148afJeff Brown if (selector == null) { 4211417b1cfde8f1749905f2d735623af9214148afJeff Brown throw new IllegalArgumentException("selector must not be null"); 4311417b1cfde8f1749905f2d735623af9214148afJeff Brown } 4411417b1cfde8f1749905f2d735623af9214148afJeff Brown 4511417b1cfde8f1749905f2d735623af9214148afJeff Brown mBundle = new Bundle(); 4611417b1cfde8f1749905f2d735623af9214148afJeff Brown mSelector = selector; 4711417b1cfde8f1749905f2d735623af9214148afJeff Brown mBundle.putBundle(KEY_SELECTOR, selector.asBundle()); 4811417b1cfde8f1749905f2d735623af9214148afJeff Brown mBundle.putBoolean(KEY_ACTIVE_SCAN, activeScan); 4911417b1cfde8f1749905f2d735623af9214148afJeff Brown } 5011417b1cfde8f1749905f2d735623af9214148afJeff Brown 5111417b1cfde8f1749905f2d735623af9214148afJeff Brown private MediaRouteDiscoveryRequest(Bundle bundle) { 5211417b1cfde8f1749905f2d735623af9214148afJeff Brown mBundle = bundle; 5311417b1cfde8f1749905f2d735623af9214148afJeff Brown } 5411417b1cfde8f1749905f2d735623af9214148afJeff Brown 5511417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 5611417b1cfde8f1749905f2d735623af9214148afJeff Brown * Gets the route selector that specifies the kinds of routes to discover. 5711417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 5811417b1cfde8f1749905f2d735623af9214148afJeff Brown public MediaRouteSelector getSelector() { 5911417b1cfde8f1749905f2d735623af9214148afJeff Brown ensureSelector(); 6011417b1cfde8f1749905f2d735623af9214148afJeff Brown return mSelector; 6111417b1cfde8f1749905f2d735623af9214148afJeff Brown } 6211417b1cfde8f1749905f2d735623af9214148afJeff Brown 6311417b1cfde8f1749905f2d735623af9214148afJeff Brown private void ensureSelector() { 6411417b1cfde8f1749905f2d735623af9214148afJeff Brown if (mSelector == null) { 6511417b1cfde8f1749905f2d735623af9214148afJeff Brown mSelector = MediaRouteSelector.fromBundle(mBundle.getBundle(KEY_SELECTOR)); 6611417b1cfde8f1749905f2d735623af9214148afJeff Brown if (mSelector == null) { 6711417b1cfde8f1749905f2d735623af9214148afJeff Brown mSelector = MediaRouteSelector.EMPTY; 6811417b1cfde8f1749905f2d735623af9214148afJeff Brown } 6911417b1cfde8f1749905f2d735623af9214148afJeff Brown } 7011417b1cfde8f1749905f2d735623af9214148afJeff Brown } 7111417b1cfde8f1749905f2d735623af9214148afJeff Brown 7211417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 7311417b1cfde8f1749905f2d735623af9214148afJeff Brown * Returns true if active scanning should be performed. 7411417b1cfde8f1749905f2d735623af9214148afJeff Brown * 75f03da4a9e6cc02251c2f804eb6f25da61821d6a7Jeff Brown * @see MediaRouter#CALLBACK_FLAG_PERFORM_ACTIVE_SCAN 7611417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 7711417b1cfde8f1749905f2d735623af9214148afJeff Brown public boolean isActiveScan() { 7811417b1cfde8f1749905f2d735623af9214148afJeff Brown return mBundle.getBoolean(KEY_ACTIVE_SCAN); 7911417b1cfde8f1749905f2d735623af9214148afJeff Brown } 8011417b1cfde8f1749905f2d735623af9214148afJeff Brown 8111417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 8211417b1cfde8f1749905f2d735623af9214148afJeff Brown * Returns true if the discovery request has all of the required fields. 8311417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 8411417b1cfde8f1749905f2d735623af9214148afJeff Brown public boolean isValid() { 8511417b1cfde8f1749905f2d735623af9214148afJeff Brown ensureSelector(); 8611417b1cfde8f1749905f2d735623af9214148afJeff Brown return mSelector.isValid(); 8711417b1cfde8f1749905f2d735623af9214148afJeff Brown } 8811417b1cfde8f1749905f2d735623af9214148afJeff Brown 8911417b1cfde8f1749905f2d735623af9214148afJeff Brown @Override 9011417b1cfde8f1749905f2d735623af9214148afJeff Brown public boolean equals(Object o) { 9111417b1cfde8f1749905f2d735623af9214148afJeff Brown if (o instanceof MediaRouteDiscoveryRequest) { 9211417b1cfde8f1749905f2d735623af9214148afJeff Brown MediaRouteDiscoveryRequest other = (MediaRouteDiscoveryRequest)o; 9311417b1cfde8f1749905f2d735623af9214148afJeff Brown return getSelector().equals(other.getSelector()) 9411417b1cfde8f1749905f2d735623af9214148afJeff Brown && isActiveScan() == other.isActiveScan(); 9511417b1cfde8f1749905f2d735623af9214148afJeff Brown } 9611417b1cfde8f1749905f2d735623af9214148afJeff Brown return false; 9711417b1cfde8f1749905f2d735623af9214148afJeff Brown } 9811417b1cfde8f1749905f2d735623af9214148afJeff Brown 9911417b1cfde8f1749905f2d735623af9214148afJeff Brown @Override 10011417b1cfde8f1749905f2d735623af9214148afJeff Brown public int hashCode() { 10111417b1cfde8f1749905f2d735623af9214148afJeff Brown return getSelector().hashCode() ^ (isActiveScan() ? 1 : 0); 10211417b1cfde8f1749905f2d735623af9214148afJeff Brown } 10311417b1cfde8f1749905f2d735623af9214148afJeff Brown 10411417b1cfde8f1749905f2d735623af9214148afJeff Brown @Override 10511417b1cfde8f1749905f2d735623af9214148afJeff Brown public String toString() { 10611417b1cfde8f1749905f2d735623af9214148afJeff Brown StringBuilder result = new StringBuilder(); 10711417b1cfde8f1749905f2d735623af9214148afJeff Brown result.append("DiscoveryRequest{ selector=").append(getSelector()); 10811417b1cfde8f1749905f2d735623af9214148afJeff Brown result.append(", activeScan=").append(isActiveScan()); 10911417b1cfde8f1749905f2d735623af9214148afJeff Brown result.append(", isValid=").append(isValid()); 11011417b1cfde8f1749905f2d735623af9214148afJeff Brown result.append(" }"); 11111417b1cfde8f1749905f2d735623af9214148afJeff Brown return result.toString(); 11211417b1cfde8f1749905f2d735623af9214148afJeff Brown } 11311417b1cfde8f1749905f2d735623af9214148afJeff Brown 11411417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 11511417b1cfde8f1749905f2d735623af9214148afJeff Brown * Converts this object to a bundle for serialization. 11611417b1cfde8f1749905f2d735623af9214148afJeff Brown * 11711417b1cfde8f1749905f2d735623af9214148afJeff Brown * @return The contents of the object represented as a bundle. 11811417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 11911417b1cfde8f1749905f2d735623af9214148afJeff Brown public Bundle asBundle() { 12011417b1cfde8f1749905f2d735623af9214148afJeff Brown return mBundle; 12111417b1cfde8f1749905f2d735623af9214148afJeff Brown } 12211417b1cfde8f1749905f2d735623af9214148afJeff Brown 12311417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 12411417b1cfde8f1749905f2d735623af9214148afJeff Brown * Creates an instance from a bundle. 12511417b1cfde8f1749905f2d735623af9214148afJeff Brown * 12611417b1cfde8f1749905f2d735623af9214148afJeff Brown * @param bundle The bundle, or null if none. 12711417b1cfde8f1749905f2d735623af9214148afJeff Brown * @return The new instance, or null if the bundle was null. 12811417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 12911417b1cfde8f1749905f2d735623af9214148afJeff Brown public static MediaRouteDiscoveryRequest fromBundle(Bundle bundle) { 13011417b1cfde8f1749905f2d735623af9214148afJeff Brown return bundle != null ? new MediaRouteDiscoveryRequest(bundle) : null; 13111417b1cfde8f1749905f2d735623af9214148afJeff Brown } 13211417b1cfde8f1749905f2d735623af9214148afJeff Brown} 133