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