| Index: chrome/android/java/src/org/chromium/chrome/browser/media/remote/MediaRouteChooserDialogFactory.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/remote/MediaRouteChooserDialogFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/media/remote/MediaRouteChooserDialogFactory.java
|
| index 1c3eec18d51ed14ad39c050d63bb0a4e15215e3f..1f6786c9c4397de20ba05f31dd8f8b9f8212d133 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/media/remote/MediaRouteChooserDialogFactory.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/remote/MediaRouteChooserDialogFactory.java
|
| @@ -8,6 +8,7 @@ import android.app.Activity;
|
| import android.content.Context;
|
| import android.content.DialogInterface;
|
| import android.os.Bundle;
|
| +import android.os.Handler;
|
| import android.support.v7.app.MediaRouteChooserDialog;
|
| import android.support.v7.app.MediaRouteChooserDialogFragment;
|
| import android.support.v7.app.MediaRouteDialogFactory;
|
| @@ -61,44 +62,77 @@ public class MediaRouteChooserDialogFactory extends MediaRouteDialogFactory {
|
| }
|
| }
|
|
|
| - @Override
|
| - public MediaRouteChooserDialogFragment onCreateChooserDialogFragment() {
|
| - return new MediaRouteChooserDialogFragment() {
|
| - final SystemVisibilitySaver mVisibilitySaver = new SystemVisibilitySaver();
|
| - boolean mCancelled = false;
|
| -
|
| - @Override
|
| - public MediaRouteChooserDialog onCreateChooserDialog(
|
| - Context context, Bundle savedInstanceState) {
|
| - mVisibilitySaver.saveSystemVisibility(getActivity());
|
| - return new MediaRouteChooserDialog(context);
|
| - }
|
| + /**
|
| + * A dialog fragment for choosing a media route that saves system visibility for handling
|
| + * fullscreen state of Chrome correctly. Needs to be a named public static class, see
|
| + * https://crbug.com/618993.
|
| + */
|
| + public static final class Fragment extends MediaRouteChooserDialogFragment {
|
| + final Handler mHandler = new Handler();
|
| + final MediaRouteController mController;
|
| + final MediaStateListener mPlayer;
|
| + final SystemVisibilitySaver mVisibilitySaver = new SystemVisibilitySaver();
|
| + boolean mCancelled = false;
|
| + Context mContext = null;
|
| +
|
| + // The class has to be a public static class with a zero-argument constructor.
|
| + // Since we can't pass any callbacks to the fragment easily, just close the dialog.
|
| + // See https://crbug.com/618993.
|
| + public Fragment() {
|
| + mHandler.post(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + Fragment.this.dismiss();
|
| + }
|
| + });
|
| + mController = null;
|
| + mPlayer = null;
|
| + }
|
|
|
| - @Override
|
| - public void onStop() {
|
| - super.onStop();
|
| - mVisibilitySaver.restoreSystemVisibility(getActivity());
|
| - }
|
| + Fragment(MediaRouteController controller, MediaStateListener player) {
|
| + mController = controller;
|
| + mPlayer = player;
|
| + }
|
|
|
| - @Override
|
| - public void onCancel(DialogInterface dialog) {
|
| - mCancelled = true;
|
| + @Override
|
| + public MediaRouteChooserDialog onCreateChooserDialog(
|
| + Context context, Bundle savedInstanceState) {
|
| + mVisibilitySaver.saveSystemVisibility(getActivity());
|
| + mContext = context;
|
| + return new MediaRouteChooserDialog(context);
|
| + }
|
|
|
| - super.onCancel(dialog);
|
| - }
|
| + @Override
|
| + public void onStop() {
|
| + super.onStop();
|
| + mVisibilitySaver.restoreSystemVisibility(getActivity());
|
| + }
|
|
|
| - @Override
|
| - public void onDismiss(DialogInterface dialog) {
|
| - super.onDismiss(dialog);
|
| + @Override
|
| + public void onCancel(DialogInterface dialog) {
|
| + mCancelled = true;
|
|
|
| - if (mCancelled) {
|
| - mPlayer.onRouteDialogCancelled();
|
| - return;
|
| - }
|
| + super.onCancel(dialog);
|
| + }
|
| +
|
| + @Override
|
| + public void onDismiss(DialogInterface dialog) {
|
| + super.onDismiss(dialog);
|
| +
|
| + if (mCancelled) {
|
| + if (mPlayer != null) mPlayer.onRouteDialogCancelled();
|
| + return;
|
| + }
|
|
|
| + if (mController != null) {
|
| MediaRouter router = MediaRouter.getInstance(mContext);
|
| mController.onRouteSelected(mPlayer, router, router.getSelectedRoute());
|
| }
|
| - };
|
| + }
|
| + }
|
| +
|
| + @Override
|
| + public MediaRouteChooserDialogFragment onCreateChooserDialogFragment() {
|
| + return new Fragment(mController, mPlayer);
|
| }
|
| }
|
|
|