blob: 499f130ee2e1b736649c234619296ec2f547a4bc [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.media.router;
import android.content.DialogInterface;
import android.os.Handler;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.MediaRouteChooserDialogFragment;
import android.support.v7.media.MediaRouteSelector;
/**
* Manages the dialog responsible for selecting a {@link MediaSink}.
*/
public class MediaRouteChooserDialogManager extends BaseMediaRouteDialogManager {
private static final String DIALOG_FRAGMENT_TAG =
"android.support.v7.mediarouter:MediaRouteChooserDialogFragment";
public MediaRouteChooserDialogManager(
String sourceId, MediaRouteSelector routeSelector, MediaRouteDialogDelegate delegate) {
super(sourceId, routeSelector, delegate);
}
/**
* Fragment implementation for MediaRouteChooserDialogManager.
*/
public static class Fragment extends MediaRouteChooserDialogFragment {
private final Handler mHandler = new Handler();
private final SystemVisibilitySaver mVisibilitySaver = new SystemVisibilitySaver();
private BaseMediaRouteDialogManager mManager;
private boolean mCancelled;
public Fragment() {
mHandler.post(new Runnable() {
@Override
public void run() {
Fragment.this.dismiss();
}
});
}
public Fragment(BaseMediaRouteDialogManager manager) {
mManager = manager;
}
@Override
public void onStart() {
mVisibilitySaver.saveSystemVisibility(getActivity());
super.onStart();
}
@Override
public void onStop() {
super.onStop();
mVisibilitySaver.restoreSystemVisibility(getActivity());
}
@Override
public void onCancel(DialogInterface dialog) {
mCancelled = true;
mManager.delegate().onDialogCancelled();
super.onCancel(dialog);
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
if (mManager == null) return;
mManager.mDialogFragment = null;
if (mCancelled) return;
MediaSink newSink =
MediaSink.fromRoute(mManager.androidMediaRouter().getSelectedRoute());
mManager.delegate().onSinkSelected(mManager.sourceId(), newSink);
}
}
@Override
protected DialogFragment openDialogInternal(FragmentManager fm) {
if (fm.findFragmentByTag(DIALOG_FRAGMENT_TAG) != null) return null;
Fragment fragment = new Fragment(this);
fragment.setRouteSelector(routeSelector());
fragment.show(fm, DIALOG_FRAGMENT_TAG);
fm.executePendingTransactions();
return fragment;
}
}