MediaRouteChooserDialogFragment.java revision d52e30f3736a821e45266c28c334756f5f7e55c3
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 Brown 1711417b1cfde8f1749905f2d735623af9214148afJeff Brownpackage android.support.v7.app; 1811417b1cfde8f1749905f2d735623af9214148afJeff Brown 1911417b1cfde8f1749905f2d735623af9214148afJeff Brownimport android.app.Dialog; 20eff7719415542ba819054863b0995f07742a7a8aJeff Brownimport android.content.Context; 21d52e30f3736a821e45266c28c334756f5f7e55c3Jae Seoimport android.content.res.Configuration; 2211417b1cfde8f1749905f2d735623af9214148afJeff Brownimport android.os.Bundle; 2311417b1cfde8f1749905f2d735623af9214148afJeff Brownimport android.support.v4.app.DialogFragment; 2411417b1cfde8f1749905f2d735623af9214148afJeff Brownimport android.support.v7.media.MediaRouteSelector; 2511417b1cfde8f1749905f2d735623af9214148afJeff Brown 2611417b1cfde8f1749905f2d735623af9214148afJeff Brown/** 2711417b1cfde8f1749905f2d735623af9214148afJeff Brown * Media route chooser dialog fragment. 2811417b1cfde8f1749905f2d735623af9214148afJeff Brown * <p> 29eff7719415542ba819054863b0995f07742a7a8aJeff Brown * Creates a {@link MediaRouteChooserDialog}. The application may subclass 30eff7719415542ba819054863b0995f07742a7a8aJeff Brown * this dialog fragment to customize the media route chooser dialog. 3111417b1cfde8f1749905f2d735623af9214148afJeff Brown * </p> 3211417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 3311417b1cfde8f1749905f2d735623af9214148afJeff Brownpublic class MediaRouteChooserDialogFragment extends DialogFragment { 3411417b1cfde8f1749905f2d735623af9214148afJeff Brown private final String ARGUMENT_SELECTOR = "selector"; 3511417b1cfde8f1749905f2d735623af9214148afJeff Brown 366e547065f21f1645b3e9d5b3a3fd9720be8aede8Jaewan Kim private MediaRouteChooserDialog mDialog; 3711417b1cfde8f1749905f2d735623af9214148afJeff Brown private MediaRouteSelector mSelector; 3811417b1cfde8f1749905f2d735623af9214148afJeff Brown 39eff7719415542ba819054863b0995f07742a7a8aJeff Brown /** 40eff7719415542ba819054863b0995f07742a7a8aJeff Brown * Creates a media route chooser dialog fragment. 41eff7719415542ba819054863b0995f07742a7a8aJeff Brown * <p> 42eff7719415542ba819054863b0995f07742a7a8aJeff Brown * All subclasses of this class must also possess a default constructor. 43eff7719415542ba819054863b0995f07742a7a8aJeff Brown * </p> 44eff7719415542ba819054863b0995f07742a7a8aJeff Brown */ 4511417b1cfde8f1749905f2d735623af9214148afJeff Brown public MediaRouteChooserDialogFragment() { 4611417b1cfde8f1749905f2d735623af9214148afJeff Brown setCancelable(true); 4711417b1cfde8f1749905f2d735623af9214148afJeff Brown } 4811417b1cfde8f1749905f2d735623af9214148afJeff Brown 4911417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 5011417b1cfde8f1749905f2d735623af9214148afJeff Brown * Gets the media route selector for filtering the routes that the user can select. 5111417b1cfde8f1749905f2d735623af9214148afJeff Brown * 5211417b1cfde8f1749905f2d735623af9214148afJeff Brown * @return The selector, never null. 5311417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 5411417b1cfde8f1749905f2d735623af9214148afJeff Brown public MediaRouteSelector getRouteSelector() { 5511417b1cfde8f1749905f2d735623af9214148afJeff Brown ensureRouteSelector(); 5611417b1cfde8f1749905f2d735623af9214148afJeff Brown return mSelector; 5711417b1cfde8f1749905f2d735623af9214148afJeff Brown } 5811417b1cfde8f1749905f2d735623af9214148afJeff Brown 5911417b1cfde8f1749905f2d735623af9214148afJeff Brown private void ensureRouteSelector() { 6011417b1cfde8f1749905f2d735623af9214148afJeff Brown if (mSelector == null) { 6111417b1cfde8f1749905f2d735623af9214148afJeff Brown Bundle args = getArguments(); 6211417b1cfde8f1749905f2d735623af9214148afJeff Brown if (args != null) { 6311417b1cfde8f1749905f2d735623af9214148afJeff Brown mSelector = MediaRouteSelector.fromBundle(args.getBundle(ARGUMENT_SELECTOR)); 6411417b1cfde8f1749905f2d735623af9214148afJeff Brown } 6511417b1cfde8f1749905f2d735623af9214148afJeff Brown if (mSelector == null) { 6611417b1cfde8f1749905f2d735623af9214148afJeff Brown mSelector = MediaRouteSelector.EMPTY; 6711417b1cfde8f1749905f2d735623af9214148afJeff Brown } 6811417b1cfde8f1749905f2d735623af9214148afJeff Brown } 6911417b1cfde8f1749905f2d735623af9214148afJeff Brown } 7011417b1cfde8f1749905f2d735623af9214148afJeff Brown 7111417b1cfde8f1749905f2d735623af9214148afJeff Brown /** 7211417b1cfde8f1749905f2d735623af9214148afJeff Brown * Sets the media route selector for filtering the routes that the user can select. 7311417b1cfde8f1749905f2d735623af9214148afJeff Brown * This method must be called before the fragment is added. 7411417b1cfde8f1749905f2d735623af9214148afJeff Brown * 7511417b1cfde8f1749905f2d735623af9214148afJeff Brown * @param selector The selector to set. 7611417b1cfde8f1749905f2d735623af9214148afJeff Brown */ 7711417b1cfde8f1749905f2d735623af9214148afJeff Brown public void setRouteSelector(MediaRouteSelector selector) { 7811417b1cfde8f1749905f2d735623af9214148afJeff Brown if (selector == null) { 7911417b1cfde8f1749905f2d735623af9214148afJeff Brown throw new IllegalArgumentException("selector must not be null"); 8011417b1cfde8f1749905f2d735623af9214148afJeff Brown } 8111417b1cfde8f1749905f2d735623af9214148afJeff Brown 8211417b1cfde8f1749905f2d735623af9214148afJeff Brown ensureRouteSelector(); 8311417b1cfde8f1749905f2d735623af9214148afJeff Brown if (!mSelector.equals(selector)) { 8411417b1cfde8f1749905f2d735623af9214148afJeff Brown mSelector = selector; 8511417b1cfde8f1749905f2d735623af9214148afJeff Brown 8611417b1cfde8f1749905f2d735623af9214148afJeff Brown Bundle args = getArguments(); 8711417b1cfde8f1749905f2d735623af9214148afJeff Brown if (args == null) { 8811417b1cfde8f1749905f2d735623af9214148afJeff Brown args = new Bundle(); 8911417b1cfde8f1749905f2d735623af9214148afJeff Brown } 9011417b1cfde8f1749905f2d735623af9214148afJeff Brown args.putBundle(ARGUMENT_SELECTOR, selector.asBundle()); 9111417b1cfde8f1749905f2d735623af9214148afJeff Brown setArguments(args); 9211417b1cfde8f1749905f2d735623af9214148afJeff Brown 9311417b1cfde8f1749905f2d735623af9214148afJeff Brown MediaRouteChooserDialog dialog = (MediaRouteChooserDialog)getDialog(); 9411417b1cfde8f1749905f2d735623af9214148afJeff Brown if (dialog != null) { 9511417b1cfde8f1749905f2d735623af9214148afJeff Brown dialog.setRouteSelector(selector); 9611417b1cfde8f1749905f2d735623af9214148afJeff Brown } 9711417b1cfde8f1749905f2d735623af9214148afJeff Brown } 9811417b1cfde8f1749905f2d735623af9214148afJeff Brown } 9911417b1cfde8f1749905f2d735623af9214148afJeff Brown 100eff7719415542ba819054863b0995f07742a7a8aJeff Brown /** 101eff7719415542ba819054863b0995f07742a7a8aJeff Brown * Called when the chooser dialog is being created. 102eff7719415542ba819054863b0995f07742a7a8aJeff Brown * <p> 103eff7719415542ba819054863b0995f07742a7a8aJeff Brown * Subclasses may override this method to customize the dialog. 104eff7719415542ba819054863b0995f07742a7a8aJeff Brown * </p> 105eff7719415542ba819054863b0995f07742a7a8aJeff Brown */ 106eff7719415542ba819054863b0995f07742a7a8aJeff Brown public MediaRouteChooserDialog onCreateChooserDialog( 107eff7719415542ba819054863b0995f07742a7a8aJeff Brown Context context, Bundle savedInstanceState) { 108eff7719415542ba819054863b0995f07742a7a8aJeff Brown return new MediaRouteChooserDialog(context); 109eff7719415542ba819054863b0995f07742a7a8aJeff Brown } 110eff7719415542ba819054863b0995f07742a7a8aJeff Brown 11111417b1cfde8f1749905f2d735623af9214148afJeff Brown @Override 11211417b1cfde8f1749905f2d735623af9214148afJeff Brown public Dialog onCreateDialog(Bundle savedInstanceState) { 1136e547065f21f1645b3e9d5b3a3fd9720be8aede8Jaewan Kim mDialog = onCreateChooserDialog(getActivity(), savedInstanceState); 1146e547065f21f1645b3e9d5b3a3fd9720be8aede8Jaewan Kim mDialog.setRouteSelector(getRouteSelector()); 1156e547065f21f1645b3e9d5b3a3fd9720be8aede8Jaewan Kim return mDialog; 1166e547065f21f1645b3e9d5b3a3fd9720be8aede8Jaewan Kim } 117d52e30f3736a821e45266c28c334756f5f7e55c3Jae Seo 118d52e30f3736a821e45266c28c334756f5f7e55c3Jae Seo @Override 119d52e30f3736a821e45266c28c334756f5f7e55c3Jae Seo public void onConfigurationChanged(Configuration newConfig) { 120d52e30f3736a821e45266c28c334756f5f7e55c3Jae Seo super.onConfigurationChanged(newConfig); 121d52e30f3736a821e45266c28c334756f5f7e55c3Jae Seo if (mDialog != null) { 122d52e30f3736a821e45266c28c334756f5f7e55c3Jae Seo mDialog.updateLayout(); 123d52e30f3736a821e45266c28c334756f5f7e55c3Jae Seo } 124d52e30f3736a821e45266c28c334756f5f7e55c3Jae Seo } 12511417b1cfde8f1749905f2d735623af9214148afJeff Brown} 126