Commit 6f475998 authored by Matt Jones's avatar Matt Jones Committed by Commit Bot

Move FullscreenManager interactions to glue code for BottomSheet

This patch also removes some obsolete logic from the days of Chrome
Home like whether the android version of the toolbar is showing.

Bug: 986310, 1002277
Change-Id: Ib939d02cdf783cc0fde30dbf7089171ae52c92a7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1909930Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Commit-Queue: Matthew Jones <mdjones@chromium.org>
Cr-Commit-Position: refs/heads/master@{#715457}
parent 7c258567
...@@ -215,8 +215,7 @@ class AutofillAssistantUiTestUtil { ...@@ -215,8 +215,7 @@ class AutofillAssistantUiTestUtil {
ViewGroup coordinator = activity.findViewById(R.id.coordinator); ViewGroup coordinator = activity.findViewById(R.id.coordinator);
LayoutInflater.from(activity).inflate(R.layout.bottom_sheet, coordinator); LayoutInflater.from(activity).inflate(R.layout.bottom_sheet, coordinator);
BottomSheet bottomSheet = coordinator.findViewById(R.id.bottom_sheet); BottomSheet bottomSheet = coordinator.findViewById(R.id.bottom_sheet);
bottomSheet.init(coordinator, activity.getActivityTabProvider(), bottomSheet.init(coordinator, activity.getActivityTabProvider(), activity.getWindow(),
activity.getFullscreenManager(), activity.getWindow(),
activity.getWindowAndroid().getKeyboardDelegate()); activity.getWindowAndroid().getKeyboardDelegate());
return bottomSheet; return bottomSheet;
...@@ -227,7 +226,8 @@ class AutofillAssistantUiTestUtil { ...@@ -227,7 +226,8 @@ class AutofillAssistantUiTestUtil {
() ()
-> activity.getCompositorViewHolder() -> activity.getCompositorViewHolder()
.getLayoutManager() .getLayoutManager()
.getOverlayPanelManager()); .getOverlayPanelManager(),
activity.getFullscreenManager());
} }
/** /**
......
...@@ -101,6 +101,7 @@ import org.chromium.chrome.browser.init.ProcessInitializationHandler; ...@@ -101,6 +101,7 @@ import org.chromium.chrome.browser.init.ProcessInitializationHandler;
import org.chromium.chrome.browser.init.StartupTabPreloader; import org.chromium.chrome.browser.init.StartupTabPreloader;
import org.chromium.chrome.browser.keyboard_accessory.ManualFillingComponent; import org.chromium.chrome.browser.keyboard_accessory.ManualFillingComponent;
import org.chromium.chrome.browser.keyboard_accessory.ManualFillingComponentFactory; import org.chromium.chrome.browser.keyboard_accessory.ManualFillingComponentFactory;
import org.chromium.chrome.browser.lifecycle.Destroyable;
import org.chromium.chrome.browser.locale.LocaleManager; import org.chromium.chrome.browser.locale.LocaleManager;
import org.chromium.chrome.browser.media.PictureInPictureController; import org.chromium.chrome.browser.media.PictureInPictureController;
import org.chromium.chrome.browser.metrics.ActivityTabStartupMetricsTracker; import org.chromium.chrome.browser.metrics.ActivityTabStartupMetricsTracker;
...@@ -1428,7 +1429,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent> ...@@ -1428,7 +1429,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
ViewGroup coordinator = findViewById(R.id.coordinator); ViewGroup coordinator = findViewById(R.id.coordinator);
getLayoutInflater().inflate(R.layout.bottom_sheet, coordinator); getLayoutInflater().inflate(R.layout.bottom_sheet, coordinator);
BottomSheet sheet = coordinator.findViewById(R.id.bottom_sheet); BottomSheet sheet = coordinator.findViewById(R.id.bottom_sheet);
sheet.init(coordinator, getActivityTabProvider(), getFullscreenManager(), getWindow(), sheet.init(coordinator, getActivityTabProvider(), getWindow(),
getWindowAndroid().getKeyboardDelegate()); getWindowAndroid().getKeyboardDelegate());
mBottomSheetSnackbarManager = new SnackbarManager( mBottomSheetSnackbarManager = new SnackbarManager(
...@@ -1439,12 +1440,39 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent> ...@@ -1439,12 +1440,39 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
Supplier<OverlayPanelManager> panelManagerSupplier = Supplier<OverlayPanelManager> panelManagerSupplier =
() -> getCompositorViewHolder().getLayoutManager().getOverlayPanelManager(); () -> getCompositorViewHolder().getLayoutManager().getOverlayPanelManager();
mBottomSheetController = new BottomSheetController(getLifecycleDispatcher(), mBottomSheetController =
mActivityTabProvider, mScrimView, sheetSupplier, panelManagerSupplier); new BottomSheetController(getLifecycleDispatcher(), mActivityTabProvider,
mScrimView, sheetSupplier, panelManagerSupplier, getFullscreenManager());
((BottomContainer) findViewById(R.id.bottom_container)) ((BottomContainer) findViewById(R.id.bottom_container))
.setBottomSheetController(mBottomSheetController); .setBottomSheetController(mBottomSheetController);
ChromeFullscreenManager.FullscreenListener fullscreenListener =
new ChromeFullscreenManager.FullscreenListener() {
@Override
public void onContentOffsetChanged(int offset) {}
@Override
public void onControlsOffsetChanged(
int topOffset, int bottomOffset, boolean needsAnimate) {}
@Override
public void onToggleOverlayVideoMode(boolean enabled) {
if (mBottomSheetController.isSheetOpen()) {
mBottomSheetController.peekSheet(false);
}
}
@Override
public void onBottomControlsHeightChanged(int bottomControlsHeight) {}
};
getFullscreenManager().addListener(fullscreenListener);
getLifecycleDispatcher().register((Destroyable) () -> {
if (mFullscreenManager == null) return;
mFullscreenManager.removeListener(fullscreenListener);
});
mBottomSheetController.addObserver(new EmptyBottomSheetObserver() { mBottomSheetController.addObserver(new EmptyBottomSheetObserver() {
/** A token for suppressing app modal dialogs. */ /** A token for suppressing app modal dialogs. */
private int mAppModalToken = TokenHolder.INVALID_TOKEN; private int mAppModalToken = TokenHolder.INVALID_TOKEN;
......
...@@ -29,12 +29,9 @@ import org.chromium.base.Supplier; ...@@ -29,12 +29,9 @@ import org.chromium.base.Supplier;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.ActivityTabProvider; import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.TabLoadStatus; import org.chromium.chrome.browser.TabLoadStatus;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager.FullscreenListener;
import org.chromium.chrome.browser.gesturenav.HistoryNavigationDelegate; import org.chromium.chrome.browser.gesturenav.HistoryNavigationDelegate;
import org.chromium.chrome.browser.native_page.NativePageHost; import org.chromium.chrome.browser.native_page.NativePageHost;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabBrowserControlsState;
import org.chromium.chrome.browser.util.AccessibilityUtil; import org.chromium.chrome.browser.util.AccessibilityUtil;
import org.chromium.chrome.browser.util.MathUtils; import org.chromium.chrome.browser.util.MathUtils;
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetContent.HeightMode; import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetContent.HeightMode;
...@@ -43,7 +40,6 @@ import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController.Stat ...@@ -43,7 +40,6 @@ import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController.Stat
import org.chromium.content_public.browser.LoadUrlParams; import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.content_public.browser.SelectionPopupController; import org.chromium.content_public.browser.SelectionPopupController;
import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContents;
import org.chromium.content_public.common.BrowserControlsState;
import org.chromium.ui.KeyboardVisibilityDelegate; import org.chromium.ui.KeyboardVisibilityDelegate;
/** /**
...@@ -138,9 +134,6 @@ public class BottomSheet ...@@ -138,9 +134,6 @@ public class BottomSheet
/** Used for getting the current tab. */ /** Used for getting the current tab. */
protected Supplier<Tab> mTabSupplier; protected Supplier<Tab> mTabSupplier;
/** The fullscreen manager for information about toolbar offsets. */
private ChromeFullscreenManager mFullscreenManager;
/** A handle to the content being shown by the sheet. */ /** A handle to the content being shown by the sheet. */
@Nullable @Nullable
protected BottomSheetContent mSheetContent; protected BottomSheetContent mSheetContent;
...@@ -175,8 +168,8 @@ public class BottomSheet ...@@ -175,8 +168,8 @@ public class BottomSheet
/** Whether {@link #destroy()} has been called. **/ /** Whether {@link #destroy()} has been called. **/
private boolean mIsDestroyed; private boolean mIsDestroyed;
/** The token used to enable browser controls persistence. */ /** The ratio in the range [0, 1] that the browser controls are hidden. */
private int mPersistentControlsToken; private float mBrowserControlsHiddenRatio;
@Override @Override
public boolean shouldGestureMoveSheet(MotionEvent initialEvent, MotionEvent currentEvent) { public boolean shouldGestureMoveSheet(MotionEvent initialEvent, MotionEvent currentEvent) {
...@@ -264,22 +257,11 @@ public class BottomSheet ...@@ -264,22 +257,11 @@ public class BottomSheet
// anything with them. // anything with them.
if (!mIsTouchEnabled) return true; if (!mIsTouchEnabled) return true;
if (isToolbarAndroidViewHidden()) return false;
mGestureDetector.onTouchEvent(e); mGestureDetector.onTouchEvent(e);
return true; return true;
} }
/**
* @return Whether or not the toolbar Android View is hidden due to being scrolled off-screen.
*/
@VisibleForTesting
boolean isToolbarAndroidViewHidden() {
return mFullscreenManager == null || mFullscreenManager.getBottomControlOffset() > 0
|| mToolbarHolder.getVisibility() != VISIBLE;
}
@Override @Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int heightSize = MeasureSpec.getSize(heightMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec);
...@@ -295,16 +277,12 @@ public class BottomSheet ...@@ -295,16 +277,12 @@ public class BottomSheet
* calculations in this class. * calculations in this class.
* @param root The container of the bottom sheet. * @param root The container of the bottom sheet.
* @param tabProvider A means of accessing the active tab. * @param tabProvider A means of accessing the active tab.
* @param fullscreenManager A fullscreen manager for persisting browser controls and
* determining their offset.
* @param window Android window for getting insets. * @param window Android window for getting insets.
* @param keyboardDelegate Delegate for hiding the keyboard. * @param keyboardDelegate Delegate for hiding the keyboard.
*/ */
public void init(View root, ActivityTabProvider tabProvider, public void init(View root, ActivityTabProvider tabProvider, Window window,
ChromeFullscreenManager fullscreenManager, Window window,
KeyboardVisibilityDelegate keyboardDelegate) { KeyboardVisibilityDelegate keyboardDelegate) {
mTabSupplier = tabProvider; mTabSupplier = tabProvider;
mFullscreenManager = fullscreenManager;
mToolbarHolder = mToolbarHolder =
(TouchRestrictingFrameLayout) findViewById(R.id.bottom_sheet_toolbar_container); (TouchRestrictingFrameLayout) findViewById(R.id.bottom_sheet_toolbar_container);
...@@ -405,47 +383,25 @@ public class BottomSheet ...@@ -405,47 +383,25 @@ public class BottomSheet
return; return;
} }
if (!mGestureDetector.isScrolling()) { if (!mGestureDetector.isScrolling() && isRunningSettleAnimation()) return;
// This onLayoutChange() will be called after the user enters fullscreen video setSheetState(mCurrentState, false);
// mode. Ensure the sheet state is reset to peek so that the sheet does not
// open over the fullscreen video. See crbug.com/740499.
if (mFullscreenManager != null
&& mFullscreenManager.getPersistentFullscreenMode() && isSheetOpen()) {
setSheetState(getMinSwipableSheetState(), false);
} else {
if (isRunningSettleAnimation()) return;
setSheetState(mCurrentState, false);
}
}
} }
}); });
mFullscreenManager.addListener(new FullscreenListener() { mSheetContainer = (ViewGroup) this.getParent();
@Override mSheetContainer.removeView(this);
public void onToggleOverlayVideoMode(boolean enabled) { }
if (isSheetOpen()) setSheetState(SheetState.PEEK, false);
}
@Override
public void onControlsOffsetChanged(
int topOffset, int bottomOffset, boolean needsAnimate) {
if (getSheetState() == SheetState.HIDDEN) return;
if (getCurrentOffsetPx() > getSheetHeightForState(SheetState.PEEK)) return;
// Updating the offset will automatically account for the browser controls.
setSheetOffsetFromBottom(getCurrentOffsetPx(), StateChangeReason.SWIPE);
}
@Override /** @param ratio The current browser controls hidden ratio. */
public void onContentOffsetChanged(int offset) {} void setBrowserControlsHiddenRatio(float ratio) {
mBrowserControlsHiddenRatio = ratio;
@Override if (getSheetState() == SheetState.HIDDEN) return;
public void onBottomControlsHeightChanged(int bottomControlsHeight) {} if (getCurrentOffsetPx() > getSheetHeightForState(SheetState.PEEK)) return;
});
mSheetContainer = (ViewGroup) this.getParent(); // Updating the offset will automatically account for the browser controls.
mSheetContainer.removeView(this); setSheetOffsetFromBottom(getCurrentOffsetPx(), StateChangeReason.SWIPE);
} }
@Override @Override
...@@ -607,15 +563,6 @@ public class BottomSheet ...@@ -607,15 +563,6 @@ public class BottomSheet
mIsSheetOpen = true; mIsSheetOpen = true;
// Make sure the toolbar is visible before expanding the sheet.
if (isToolbarAndroidViewHidden()) {
TabBrowserControlsState.update(getActiveTab(), BrowserControlsState.SHOWN, false);
}
// Browser controls should stay visible until the sheet is closed.
mPersistentControlsToken =
mFullscreenManager.getBrowserVisibilityDelegate().showControlsPersistent();
dismissSelectedText(); dismissSelectedText();
for (BottomSheetObserver o : mObservers) o.onSheetOpened(reason); for (BottomSheetObserver o : mObservers) o.onSheetOpened(reason);
} }
...@@ -629,10 +576,6 @@ public class BottomSheet ...@@ -629,10 +576,6 @@ public class BottomSheet
if (!mIsSheetOpen) return; if (!mIsSheetOpen) return;
mIsSheetOpen = false; mIsSheetOpen = false;
// Update the browser controls since they are permanently shown while the sheet is open.
mFullscreenManager.getBrowserVisibilityDelegate().releasePersistentShowingToken(
mPersistentControlsToken);
for (BottomSheetObserver o : mObservers) o.onSheetClosed(reason); for (BottomSheetObserver o : mObservers) o.onSheetClosed(reason);
// If the sheet contents are cleared out before #onSheetClosed is called, do not try to // If the sheet contents are cleared out before #onSheetClosed is called, do not try to
// retrieve the accessibility string. // retrieve the accessibility string.
...@@ -700,8 +643,7 @@ public class BottomSheet ...@@ -700,8 +643,7 @@ public class BottomSheet
return 0; return 0;
} }
float peekHeight = getPeekRatio() * mContainerHeight; return getPeekRatio() * mContainerHeight * mBrowserControlsHiddenRatio;
return peekHeight * mFullscreenManager.getBrowserControlHiddenRatio();
} }
/** /**
...@@ -1210,8 +1152,7 @@ public class BottomSheet ...@@ -1210,8 +1152,7 @@ public class BottomSheet
boolean isFindInPageVisible = boolean isFindInPageVisible =
mFindInPageView != null && mFindInPageView.getVisibility() == View.VISIBLE; mFindInPageView != null && mFindInPageView.getVisibility() == View.VISIBLE;
return !isToolbarAndroidViewHidden() && !isFindInPageVisible return !isFindInPageVisible && mTargetState != SheetState.HIDDEN;
&& mTargetState != SheetState.HIDDEN;
} }
/** /**
......
...@@ -15,6 +15,8 @@ import org.chromium.chrome.browser.ActivityTabProvider.HintlessActivityTabObserv ...@@ -15,6 +15,8 @@ import org.chromium.chrome.browser.ActivityTabProvider.HintlessActivityTabObserv
import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel; import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel;
import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelManager; import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelManager;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.fullscreen.FullscreenOptions;
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher; import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.lifecycle.Destroyable; import org.chromium.chrome.browser.lifecycle.Destroyable;
import org.chromium.chrome.browser.tab.EmptyTabObserver; import org.chromium.chrome.browser.tab.EmptyTabObserver;
...@@ -89,6 +91,9 @@ public class BottomSheetController implements Destroyable { ...@@ -89,6 +91,9 @@ public class BottomSheetController implements Destroyable {
/** A {@link VrModeObserver} that observers events of entering and exiting VR mode. */ /** A {@link VrModeObserver} that observers events of entering and exiting VR mode. */
private final VrModeObserver mVrModeObserver; private final VrModeObserver mVrModeObserver;
/** A listener for browser controls offset changes. */
private final ChromeFullscreenManager.FullscreenListener mFullscreenListener;
/** The height of the shadow that sits above the toolbar. */ /** The height of the shadow that sits above the toolbar. */
private final int mToolbarShadowHeight; private final int mToolbarShadowHeight;
...@@ -113,6 +118,12 @@ public class BottomSheetController implements Destroyable { ...@@ -113,6 +118,12 @@ public class BottomSheetController implements Destroyable {
/** A means for getting the activity's current tab and observing change events. */ /** A means for getting the activity's current tab and observing change events. */
private ActivityTabProvider mTabProvider; private ActivityTabProvider mTabProvider;
/** Observer for watching the current tab. */
private ActivityTabProvider.ActivityTabTabObserver mTabObserver;
/** A fullscreen manager for polling browser controls offsets. */
private ChromeFullscreenManager mFullscreenManager;
/** The last known activity tab, if available. */ /** The last known activity tab, if available. */
private Tab mLastActivityTab; private Tab mLastActivityTab;
...@@ -133,17 +144,43 @@ public class BottomSheetController implements Destroyable { ...@@ -133,17 +144,43 @@ public class BottomSheetController implements Destroyable {
* @param bottomSheetSupplier A mechanism for creating a {@link BottomSheet}. * @param bottomSheetSupplier A mechanism for creating a {@link BottomSheet}.
* @param overlayManager A supplier of the manager for overlay panels to attach listeners to. * @param overlayManager A supplier of the manager for overlay panels to attach listeners to.
* This is a supplier to get around wating for native to be initialized. * This is a supplier to get around wating for native to be initialized.
* @param fullscreenManager A fullscreen manager for access to browser controls offsets.
*/ */
public BottomSheetController(final ActivityLifecycleDispatcher lifecycleDispatcher, public BottomSheetController(final ActivityLifecycleDispatcher lifecycleDispatcher,
final ActivityTabProvider activityTabProvider, final ScrimView scrim, final ActivityTabProvider activityTabProvider, final ScrimView scrim,
Supplier<BottomSheet> bottomSheetSupplier, Supplier<BottomSheet> bottomSheetSupplier, Supplier<OverlayPanelManager> overlayManager,
Supplier<OverlayPanelManager> overlayManager) { ChromeFullscreenManager fullscreenManager) {
mTabProvider = activityTabProvider; mTabProvider = activityTabProvider;
mOverlayPanelManager = overlayManager; mOverlayPanelManager = overlayManager;
mFullscreenManager = fullscreenManager;
mPendingSheetObservers = new ArrayList<>(); mPendingSheetObservers = new ArrayList<>();
mToolbarShadowHeight = mToolbarShadowHeight =
scrim.getResources().getDimensionPixelOffset(BottomSheet.getTopShadowResourceId()); scrim.getResources().getDimensionPixelOffset(BottomSheet.getTopShadowResourceId());
mPendingSheetObservers.add(new EmptyBottomSheetObserver() {
/** The token used to enable browser controls persistence. */
private int mPersistentControlsToken;
@Override
public void onSheetOpened(int reason) {
if (mFullscreenManager.getBrowserVisibilityDelegate() == null) return;
// Browser controls should stay visible until the sheet is closed.
mPersistentControlsToken =
mFullscreenManager.getBrowserVisibilityDelegate().showControlsPersistent();
}
@Override
public void onSheetClosed(int reason) {
if (mFullscreenManager.getBrowserVisibilityDelegate() == null) return;
// Update the browser controls since they are permanently shown while the sheet is
// open.
mFullscreenManager.getBrowserVisibilityDelegate().releasePersistentShowingToken(
mPersistentControlsToken);
}
});
mVrModeObserver = new VrModeObserver() { mVrModeObserver = new VrModeObserver() {
@Override @Override
public void onEnterVr() { public void onEnterVr() {
...@@ -156,7 +193,30 @@ public class BottomSheetController implements Destroyable { ...@@ -156,7 +193,30 @@ public class BottomSheetController implements Destroyable {
} }
}; };
mSheetInitializer = () -> initializeSheet(lifecycleDispatcher, scrim, bottomSheetSupplier); mFullscreenListener = new ChromeFullscreenManager.FullscreenListener() {
@Override
public void onContentOffsetChanged(int offset) {}
@Override
public void onControlsOffsetChanged(
int topOffset, int bottomOffset, boolean needsAnimate) {
if (mBottomSheet != null) {
mBottomSheet.setBrowserControlsHiddenRatio(
mFullscreenManager.getBrowserControlHiddenRatio());
}
}
@Override
public void onToggleOverlayVideoMode(boolean enabled) {}
@Override
public void onBottomControlsHeightChanged(int bottomControlsHeight) {}
};
mFullscreenManager.addListener(mFullscreenListener);
mSheetInitializer = () -> {
initializeSheet(lifecycleDispatcher, scrim, bottomSheetSupplier);
};
} }
/** /**
...@@ -223,6 +283,18 @@ public class BottomSheetController implements Destroyable { ...@@ -223,6 +283,18 @@ public class BottomSheetController implements Destroyable {
} }
}); });
mTabObserver = new ActivityTabProvider.ActivityTabTabObserver(mTabProvider) {
@Override
public void onEnterFullscreenMode(Tab tab, FullscreenOptions options) {
suppressSheet(StateChangeReason.COMPOSITED_UI);
}
@Override
public void onExitFullscreenMode(Tab tab) {
unsuppressSheet();
}
};
ScrimObserver scrimObserver = new ScrimObserver() { ScrimObserver scrimObserver = new ScrimObserver() {
@Override @Override
public void onScrimClick() { public void onScrimClick() {
...@@ -292,7 +364,9 @@ public class BottomSheetController implements Destroyable { ...@@ -292,7 +364,9 @@ public class BottomSheetController implements Destroyable {
@Override @Override
public void destroy() { public void destroy() {
VrModuleProvider.unregisterVrModeObserver(mVrModeObserver); VrModuleProvider.unregisterVrModeObserver(mVrModeObserver);
mFullscreenManager.removeListener(mFullscreenListener);
if (mBottomSheet != null) mBottomSheet.destroy(); if (mBottomSheet != null) mBottomSheet.destroy();
if (mTabObserver != null) mTabObserver.destroy();
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment