Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(48)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/media/remote/MediaRouteChooserDialogFactory.java

Issue 2091043002: [Android,Cast] Fix media flinging dialogs when the activity is restarted (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/media/remote/MediaRouteControllerDialogFactory.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
}
}
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/media/remote/MediaRouteControllerDialogFactory.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698