10abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown/* 20abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown * Copyright (C) 2013 The Android Open Source Project 30abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown * 40abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 50abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown * you may not use this file except in compliance with the License. 60abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown * You may obtain a copy of the License at 70abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown * 80abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown * http://www.apache.org/licenses/LICENSE-2.0 90abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown * 100abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown * Unless required by applicable law or agreed to in writing, software 110abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 120abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown * See the License for the specific language governing permissions and 140abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown * limitations under the License. 150abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown */ 160abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown 170abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brownpackage com.android.internal.app; 180abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown 190abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown 200abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brownimport android.app.Activity; 210abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brownimport android.app.Dialog; 220abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brownimport android.app.DialogFragment; 230abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brownimport android.app.FragmentManager; 240abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brownimport android.content.Context; 250abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brownimport android.media.MediaRouter; 260abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brownimport android.util.Log; 270abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brownimport android.view.View; 280abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown 290abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown/** 300abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown * Shows media route dialog as appropriate. 310abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown * @hide 320abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown */ 330abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brownpublic abstract class MediaRouteDialogPresenter { 340abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown private static final String TAG = "MediaRouter"; 350abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown 360abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown private static final String CHOOSER_FRAGMENT_TAG = 370abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown "android.app.MediaRouteButton:MediaRouteChooserDialogFragment"; 380abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown private static final String CONTROLLER_FRAGMENT_TAG = 390abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown "android.app.MediaRouteButton:MediaRouteControllerDialogFragment"; 400abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown 410abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown public static DialogFragment showDialogFragment(Activity activity, 420abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown int routeTypes, View.OnClickListener extendedSettingsClickListener) { 430abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown final MediaRouter router = (MediaRouter)activity.getSystemService( 440abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown Context.MEDIA_ROUTER_SERVICE); 450abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown final FragmentManager fm = activity.getFragmentManager(); 460abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown 470abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown MediaRouter.RouteInfo route = router.getSelectedRoute(); 480abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown if (route.isDefault() || !route.matchesTypes(routeTypes)) { 490abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown if (fm.findFragmentByTag(CHOOSER_FRAGMENT_TAG) != null) { 500abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown Log.w(TAG, "showDialog(): Route chooser dialog already showing!"); 510abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown return null; 520abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown } 530abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown MediaRouteChooserDialogFragment f = new MediaRouteChooserDialogFragment(); 540abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown f.setRouteTypes(routeTypes); 550abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown f.setExtendedSettingsClickListener(extendedSettingsClickListener); 560abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown f.show(fm, CHOOSER_FRAGMENT_TAG); 570abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown return f; 580abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown } else { 590abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown if (fm.findFragmentByTag(CONTROLLER_FRAGMENT_TAG) != null) { 600abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown Log.w(TAG, "showDialog(): Route controller dialog already showing!"); 610abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown return null; 620abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown } 630abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown MediaRouteControllerDialogFragment f = new MediaRouteControllerDialogFragment(); 640abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown f.show(fm, CONTROLLER_FRAGMENT_TAG); 650abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown return f; 660abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown } 670abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown } 680abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown 690abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown public static Dialog createDialog(Context context, 700abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown int routeTypes, View.OnClickListener extendedSettingsClickListener) { 710abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown final MediaRouter router = (MediaRouter)context.getSystemService( 720abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown Context.MEDIA_ROUTER_SERVICE); 730abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown 740abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown MediaRouter.RouteInfo route = router.getSelectedRoute(); 750abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown if (route.isDefault() || !route.matchesTypes(routeTypes)) { 760abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown final MediaRouteChooserDialog d = new MediaRouteChooserDialog( 770abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown context, android.R.style.Theme_DeviceDefault_Dialog); 780abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown d.setRouteTypes(routeTypes); 790abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown d.setExtendedSettingsClickListener(extendedSettingsClickListener); 800abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown return d; 810abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown } else { 820abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown MediaRouteControllerDialog d = new MediaRouteControllerDialog( 830abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown context, android.R.style.Theme_DeviceDefault_Dialog); 840abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown return d; 850abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown } 860abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown } 870abd3a6ce83ed23abe614155e776b600ef2a66c3Jeff Brown} 88