| 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;
|
|
|