/* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.support.v7.app; import android.app.Dialog; import android.content.Context; import android.content.res.Configuration; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v7.media.MediaRouteSelector; /** * Media route chooser dialog fragment. *
* Creates a {@link MediaRouteChooserDialog}. The application may subclass * this dialog fragment to customize the media route chooser dialog. *
*/ public class MediaRouteChooserDialogFragment extends DialogFragment { private final String ARGUMENT_SELECTOR = "selector"; private MediaRouteChooserDialog mDialog; private MediaRouteSelector mSelector; /** * Creates a media route chooser dialog fragment. ** All subclasses of this class must also possess a default constructor. *
*/ public MediaRouteChooserDialogFragment() { setCancelable(true); } /** * Gets the media route selector for filtering the routes that the user can select. * * @return The selector, never null. */ public MediaRouteSelector getRouteSelector() { ensureRouteSelector(); return mSelector; } private void ensureRouteSelector() { if (mSelector == null) { Bundle args = getArguments(); if (args != null) { mSelector = MediaRouteSelector.fromBundle(args.getBundle(ARGUMENT_SELECTOR)); } if (mSelector == null) { mSelector = MediaRouteSelector.EMPTY; } } } /** * Sets the media route selector for filtering the routes that the user can select. * This method must be called before the fragment is added. * * @param selector The selector to set. */ public void setRouteSelector(MediaRouteSelector selector) { if (selector == null) { throw new IllegalArgumentException("selector must not be null"); } ensureRouteSelector(); if (!mSelector.equals(selector)) { mSelector = selector; Bundle args = getArguments(); if (args == null) { args = new Bundle(); } args.putBundle(ARGUMENT_SELECTOR, selector.asBundle()); setArguments(args); MediaRouteChooserDialog dialog = (MediaRouteChooserDialog)getDialog(); if (dialog != null) { dialog.setRouteSelector(selector); } } } /** * Called when the chooser dialog is being created. ** Subclasses may override this method to customize the dialog. *
*/ public MediaRouteChooserDialog onCreateChooserDialog( Context context, Bundle savedInstanceState) { return new MediaRouteChooserDialog(context); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { mDialog = onCreateChooserDialog(getContext(), savedInstanceState); mDialog.setRouteSelector(getRouteSelector()); return mDialog; } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (mDialog != null) { mDialog.updateLayout(); } } }