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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/media/router/BaseMediaRouteDialogManager.java

Issue 1463693002: [Cast,Android] Subscribe to onCancel and onDismiss correctly (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed the comments. Created 5 years, 1 month 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/router/ChromeMediaRouterDialogController.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/router/BaseMediaRouteDialogManager.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/router/BaseMediaRouteDialogManager.java b/chrome/android/java/src/org/chromium/chrome/browser/media/router/BaseMediaRouteDialogManager.java
index db4aa5053f0ff133e1da038cfdcc6dcf644d73f6..567a5b0d824430e81b2be264bffaf57af959948a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/router/BaseMediaRouteDialogManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/media/router/BaseMediaRouteDialogManager.java
@@ -4,15 +4,16 @@
package org.chromium.chrome.browser.media.router;
+import android.app.Activity;
import android.content.Context;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
-import android.support.v7.app.MediaRouteDialogFactory;
import android.support.v7.media.MediaRouter;
+import android.view.View;
+import android.widget.FrameLayout;
import org.chromium.base.ApplicationStatus;
-import org.chromium.chrome.browser.media.remote.ChromeMediaRouteDialogFactory;
import org.chromium.chrome.browser.media.router.cast.MediaSource;
import javax.annotation.Nullable;
@@ -22,11 +23,45 @@ import javax.annotation.Nullable;
*/
public abstract class BaseMediaRouteDialogManager implements MediaRouteDialogManager {
+ /**
+ * A helper class to handle the system visibility change caused by the dialog showing up.
+ * Call saveSystemVisibility() in onCreateDialog() of the DialogFragment and later
+ * restoreSystemVisibility() in onStop().
+ * TODO(avayvod): refactor this to avoid a redundant copy in ChromeMediaRouteDialogFactory.
+ */
+ protected static class SystemVisibilitySaver {
+ private int mSystemVisibilityToRestore;
+ private boolean mWasFullscreenBeforeShowing;
+
+ void saveSystemVisibility(Activity activity) {
+ // If we are in fullscreen we may have also have hidden the system UI. This
+ // is overridden when we display the dialog. Save the system UI visibility
+ // state so we can restore it.
+ FrameLayout decor = (FrameLayout) activity.getWindow().getDecorView();
+ mSystemVisibilityToRestore = decor.getSystemUiVisibility();
+ mWasFullscreenBeforeShowing = (
+ (mSystemVisibilityToRestore & View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN) != 0);
+ }
+
+ void restoreSystemVisibility(Activity activity) {
+ if (!mWasFullscreenBeforeShowing) return;
+
+ FrameLayout decor = (FrameLayout) activity.getWindow().getDecorView();
+ // In some cases we come out of fullscreen before closing this dialog. In these
+ // cases we don't want to restore the system UI visibility state.
+ boolean isStillFullscreen =
+ (decor.getSystemUiVisibility() & View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN) == 0;
+ if (!isStillFullscreen) return;
+
+ decor.setSystemUiVisibility(mSystemVisibilityToRestore);
+ }
+ }
+
private final MediaSource mMediaSource;
private final MediaRouter mAndroidMediaRouter;
private final MediaRouteDialogDelegate mDelegate;
- private DialogFragment mDialogFragment;
+ protected DialogFragment mDialogFragment;
@Override
public void openDialog() {
@@ -39,8 +74,7 @@ public abstract class BaseMediaRouteDialogManager implements MediaRouteDialogMan
FragmentManager fm = currentActivity.getSupportFragmentManager();
if (fm == null) return;
- MediaRouteDialogFactory factory = new ChromeMediaRouteDialogFactory();
- mDialogFragment = openDialogInternal(fm, factory);
+ mDialogFragment = openDialogInternal(fm);
}
@Override
@@ -68,12 +102,10 @@ public abstract class BaseMediaRouteDialogManager implements MediaRouteDialogMan
* needed.
*
* @param fm {@link FragmentManager} to use to show the dialog.
- * @param factory {@link MediaRouteDialogFactory} to use to create the dialog.
* @return null if the initialization fails, otherwise the initialized dialog fragment.
*/
@Nullable
- protected abstract DialogFragment openDialogInternal(
- FragmentManager fm, MediaRouteDialogFactory factory);
+ protected abstract DialogFragment openDialogInternal(FragmentManager fm);
protected MediaRouteDialogDelegate delegate() {
return mDelegate;
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/media/router/ChromeMediaRouterDialogController.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698