Commit a617d4c0 authored by Pavel Shmakov's avatar Pavel Shmakov Committed by Commit Bot

Extract toolbar code out of CustomTabActivity

Bug: 916531
Change-Id: I802b01621be55b440fd3624764a51b63f087d81d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1638458
Commit-Queue: Pavel Shmakov <pshmakov@chromium.org>
Reviewed-by: default avatarYusuf Ozuysal <yusufo@chromium.org>
Reviewed-by: default avatarPeter Conn <peconn@chromium.org>
Cr-Commit-Position: refs/heads/master@{#665958}
parent eec7c07a
...@@ -378,7 +378,6 @@ chrome_java_sources = [ ...@@ -378,7 +378,6 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/customtabs/CustomTabActivityLifecycleUmaTracker.java", "java/src/org/chromium/chrome/browser/customtabs/CustomTabActivityLifecycleUmaTracker.java",
"java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java", "java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java",
"java/src/org/chromium/chrome/browser/customtabs/CustomTabBottomBarDelegate.java", "java/src/org/chromium/chrome/browser/customtabs/CustomTabBottomBarDelegate.java",
"java/src/org/chromium/chrome/browser/customtabs/CustomTabBrowserControlsVisibilityDelegate.java",
"java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java", "java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java",
"java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java", "java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java",
"java/src/org/chromium/chrome/browser/customtabs/CustomTabStatusBarColorProvider.java", "java/src/org/chromium/chrome/browser/customtabs/CustomTabStatusBarColorProvider.java",
...@@ -431,6 +430,8 @@ chrome_java_sources = [ ...@@ -431,6 +430,8 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleMetrics.java", "java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ModuleMetrics.java",
"java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ObjectWrapper.java", "java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/ObjectWrapper.java",
"java/src/org/chromium/chrome/browser/customtabs/features/CustomTabNavigationBarController.java", "java/src/org/chromium/chrome/browser/customtabs/features/CustomTabNavigationBarController.java",
"java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabBrowserControlsVisibilityDelegate.java",
"java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarCoordinator.java",
"java/src/org/chromium/chrome/browser/database/SQLiteCursor.java", "java/src/org/chromium/chrome/browser/database/SQLiteCursor.java",
"java/src/org/chromium/chrome/browser/datareduction/DataReductionMainMenuItem.java", "java/src/org/chromium/chrome/browser/datareduction/DataReductionMainMenuItem.java",
"java/src/org/chromium/chrome/browser/datareduction/DataReductionPromoScreen.java", "java/src/org/chromium/chrome/browser/datareduction/DataReductionPromoScreen.java",
......
...@@ -274,6 +274,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent> ...@@ -274,6 +274,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
private boolean mTabModelsInitialized; private boolean mTabModelsInitialized;
private boolean mNativeInitialized; private boolean mNativeInitialized;
private boolean mRemoveWindowBackgroundDone; private boolean mRemoveWindowBackgroundDone;
private boolean mToolbarInitialized;
// The class cannot implement TouchExplorationStateChangeListener, // The class cannot implement TouchExplorationStateChangeListener,
// because it is only available for Build.VERSION_CODES.KITKAT and later. // because it is only available for Build.VERSION_CODES.KITKAT and later.
...@@ -297,6 +298,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent> ...@@ -297,6 +298,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
private SnackbarManager mSnackbarManager; private SnackbarManager mSnackbarManager;
@Nullable @Nullable
private ToolbarManager mToolbarManager; private ToolbarManager mToolbarManager;
@Nullable
private FindToolbarManager mFindToolbarManager; private FindToolbarManager mFindToolbarManager;
private BottomSheetController mBottomSheetController; private BottomSheetController mBottomSheetController;
private UpdateNotificationController mUpdateNotificationController; private UpdateNotificationController mUpdateNotificationController;
...@@ -499,7 +501,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent> ...@@ -499,7 +501,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
mCompositorViewHolder.getCompositorView()); mCompositorViewHolder.getCompositorView());
initializeTabModels(); initializeTabModels();
initializeToolbar(); initializeToolbarIfNecessary();
if (!isFinishing() && getFullscreenManager() != null) { if (!isFinishing() && getFullscreenManager() != null) {
getFullscreenManager().initialize( getFullscreenManager().initialize(
(ControlContainer) findViewById(R.id.control_container), (ControlContainer) findViewById(R.id.control_container),
...@@ -642,6 +644,15 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent> ...@@ -642,6 +644,15 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
return true; return true;
} }
private void initializeToolbarIfNecessary() {
// TODO(pshmakov): make ToolbarManager and FindToolbarManager lazy, don't create them unless
// getToolbarManager() or getFindToolbarManager() is called.
if (!mToolbarInitialized) {
mToolbarInitialized = true;
initializeToolbar();
}
}
/** /**
* Constructs {@link ToolbarManager} and the handler necessary for controlling the menu on the * Constructs {@link ToolbarManager} and the handler necessary for controlling the menu on the
* {@link Toolbar}. Extending classes can override this call to avoid creating the toolbar. * {@link Toolbar}. Extending classes can override this call to avoid creating the toolbar.
...@@ -732,13 +743,20 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent> ...@@ -732,13 +743,20 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
*/ */
@Nullable @Nullable
public ToolbarManager getToolbarManager() { public ToolbarManager getToolbarManager() {
if (isInitialLayoutInflationComplete()) {
initializeToolbarIfNecessary();
}
return mToolbarManager; return mToolbarManager;
} }
/** /**
* @return {@link FindToolbarManager} that belongs to this activity. * @return {@link FindToolbarManager} that belongs to this activity.
*/ */
@Nullable
public FindToolbarManager getFindToolbarManager() { public FindToolbarManager getFindToolbarManager() {
if (isInitialLayoutInflationComplete()) {
initializeToolbarIfNecessary();
}
return mFindToolbarManager; return mFindToolbarManager;
} }
...@@ -1843,7 +1861,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent> ...@@ -1843,7 +1861,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
* {@link Layout}s. * {@link Layout}s.
* @param controlContainer A {@link ControlContainer} instance to draw. * @param controlContainer A {@link ControlContainer} instance to draw.
*/ */
protected void initializeCompositorContent(LayoutManager layoutManager, View urlBar, public void initializeCompositorContent(LayoutManager layoutManager, View urlBar,
ViewGroup contentContainer, ControlContainer controlContainer) { ViewGroup contentContainer, ControlContainer controlContainer) {
if (mContextualSearchManager != null) { if (mContextualSearchManager != null) {
mContextualSearchManager.initialize(contentContainer); mContextualSearchManager.initialize(contentContainer);
......
...@@ -8,36 +8,32 @@ import static org.chromium.chrome.browser.browserservices.trustedwebactivityui.T ...@@ -8,36 +8,32 @@ import static org.chromium.chrome.browser.browserservices.trustedwebactivityui.T
import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.browserservices.trustedwebactivityui.TrustedWebActivityModel; import org.chromium.chrome.browser.browserservices.trustedwebactivityui.TrustedWebActivityModel;
import org.chromium.chrome.browser.customtabs.CustomTabBrowserControlsVisibilityDelegate; import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarCoordinator;
import org.chromium.chrome.browser.dependency_injection.ActivityScope; import org.chromium.chrome.browser.dependency_injection.ActivityScope;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.fullscreen.FullscreenManager;
import org.chromium.ui.modelutil.PropertyKey; import org.chromium.ui.modelutil.PropertyKey;
import org.chromium.ui.modelutil.PropertyObservable; import org.chromium.ui.modelutil.PropertyObservable;
import javax.inject.Inject; import javax.inject.Inject;
import dagger.Lazy;
/** /**
* Hides and shows the toolbar according to the state of the Trusted Web Activity. * Hides and shows the toolbar according to the state of the Trusted Web Activity.
*
* TODO(pshmakov): Since we now have CustomTabToolbarCoordinator representing toolbar as a separate
* feature, this class doesn't make sense any more. Remove it, and let TrustedWebActivityCoordinator
* talk to CustomTabToolbarCoordinator.
*/ */
@ActivityScope @ActivityScope
public class TrustedWebActivityToolbarView implements public class TrustedWebActivityToolbarView implements
PropertyObservable.PropertyObserver<PropertyKey> { PropertyObservable.PropertyObserver<PropertyKey> {
private final Lazy<ChromeFullscreenManager> mFullscreenManager; private final CustomTabToolbarCoordinator mCustomTabToolbarCoordinator;
private final CustomTabBrowserControlsVisibilityDelegate mControlsVisibilityDelegate;
private final TrustedWebActivityModel mModel; private final TrustedWebActivityModel mModel;
private final ChromeActivity mActivity; private final ChromeActivity mActivity;
private int mControlsHidingToken = FullscreenManager.INVALID_TOKEN;
@Inject @Inject
public TrustedWebActivityToolbarView(Lazy<ChromeFullscreenManager> fullscreenManager, public TrustedWebActivityToolbarView(CustomTabToolbarCoordinator customTabToolbarCoordinator,
CustomTabBrowserControlsVisibilityDelegate controlsVisibilityDelegate, TrustedWebActivityModel model,
TrustedWebActivityModel model, ChromeActivity activity) { ChromeActivity activity) {
mFullscreenManager = fullscreenManager; mCustomTabToolbarCoordinator = customTabToolbarCoordinator;
mControlsVisibilityDelegate = controlsVisibilityDelegate;
mModel = model; mModel = model;
mActivity = activity; mActivity = activity;
mModel.addObserver(this); mModel.addObserver(this);
...@@ -53,16 +49,11 @@ public class TrustedWebActivityToolbarView implements ...@@ -53,16 +49,11 @@ public class TrustedWebActivityToolbarView implements
boolean hide = mModel.get(TOOLBAR_HIDDEN); boolean hide = mModel.get(TOOLBAR_HIDDEN);
mControlsVisibilityDelegate.setTrustedWebActivityMode(hide); mCustomTabToolbarCoordinator.setToolbarHidden(hide);
ChromeFullscreenManager fullscreenManager = mFullscreenManager.get(); if (!hide) {
if (hide) {
mControlsHidingToken =
fullscreenManager.hideAndroidControlsAndClearOldToken(mControlsHidingToken);
} else {
fullscreenManager.releaseAndroidControlsHidingToken(mControlsHidingToken);
// Force showing the controls for a bit when leaving Trusted Web Activity mode. // Force showing the controls for a bit when leaving Trusted Web Activity mode.
fullscreenManager.getBrowserVisibilityDelegate().showControlsTransient(); mCustomTabToolbarCoordinator.showToolbarTemporarily();
} }
} }
} }
...@@ -87,7 +87,7 @@ public class CustomButtonParams { ...@@ -87,7 +87,7 @@ public class CustomButtonParams {
/** /**
* @return The drawable for the customized button. * @return The drawable for the customized button.
*/ */
Drawable getIcon(Context context) { public Drawable getIcon(Context context) {
if (mShouldTint) { if (mShouldTint) {
return new TintedDrawable(context, mIcon); return new TintedDrawable(context, mIcon);
} else { } else {
...@@ -98,7 +98,7 @@ public class CustomButtonParams { ...@@ -98,7 +98,7 @@ public class CustomButtonParams {
/** /**
* @return The content description for the customized button. * @return The content description for the customized button.
*/ */
String getDescription() { public String getDescription() {
return mDescription; return mDescription;
} }
...@@ -274,7 +274,11 @@ public class CustomButtonParams { ...@@ -274,7 +274,11 @@ public class CustomButtonParams {
/** /**
* @return Whether the given icon's size is suitable to put on toolbar. * @return Whether the given icon's size is suitable to put on toolbar.
*/ */
static boolean doesIconFitToolbar(Context context, Bitmap bitmap) { public boolean doesIconFitToolbar(Context context) {
return doesIconFitToolbar(context, mIcon);
}
private static boolean doesIconFitToolbar(Context context, Bitmap bitmap) {
int height = context.getResources().getDimensionPixelSize(R.dimen.toolbar_icon_height); int height = context.getResources().getDimensionPixelSize(R.dimen.toolbar_icon_height);
if (bitmap.getHeight() < height) return false; if (bitmap.getHeight() < height) return false;
int scaledWidth = bitmap.getWidth() / bitmap.getHeight() * height; int scaledWidth = bitmap.getWidth() / bitmap.getHeight() * height;
......
...@@ -16,6 +16,7 @@ import org.chromium.base.VisibleForTesting; ...@@ -16,6 +16,7 @@ import org.chromium.base.VisibleForTesting;
import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.ChromeTabbedActivity;
import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulator; import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulator;
import org.chromium.chrome.browser.contextmenu.ContextMenuPopulator; import org.chromium.chrome.browser.contextmenu.ContextMenuPopulator;
import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabBrowserControlsVisibilityDelegate;
import org.chromium.chrome.browser.dependency_injection.ActivityScope; import org.chromium.chrome.browser.dependency_injection.ActivityScope;
import org.chromium.chrome.browser.externalauth.ExternalAuthUtils; import org.chromium.chrome.browser.externalauth.ExternalAuthUtils;
import org.chromium.chrome.browser.externalnav.ExternalNavigationDelegateImpl; import org.chromium.chrome.browser.externalnav.ExternalNavigationDelegateImpl;
......
...@@ -767,7 +767,7 @@ public class CustomTabIntentDataProvider extends BrowserSessionDataProvider { ...@@ -767,7 +767,7 @@ public class CustomTabIntentDataProvider extends BrowserSessionDataProvider {
/** /**
* @return See {@link #EXTRA_UI_TYPE}. * @return See {@link #EXTRA_UI_TYPE}.
*/ */
boolean isMediaViewer() { public boolean isMediaViewer() {
return mUiType == CustomTabsUiType.MEDIA_VIEWER; return mUiType == CustomTabsUiType.MEDIA_VIEWER;
} }
......
...@@ -108,4 +108,11 @@ public class CustomTabStatusBarColorProvider { ...@@ -108,4 +108,11 @@ public class CustomTabStatusBarColorProvider {
return false; return false;
} }
/**
* Called when toolbar color is changed so that the status bar can adapt.
*/
public void onToolbarColorChanged() {
mStatusBarColorController.updateStatusBarColor(false);
}
} }
...@@ -44,6 +44,7 @@ import org.chromium.chrome.browser.tab.TabRedirectHandler; ...@@ -44,6 +44,7 @@ import org.chromium.chrome.browser.tab.TabRedirectHandler;
import org.chromium.chrome.browser.tabmodel.AsyncTabParams; import org.chromium.chrome.browser.tabmodel.AsyncTabParams;
import org.chromium.chrome.browser.tabmodel.AsyncTabParamsManager; import org.chromium.chrome.browser.tabmodel.AsyncTabParamsManager;
import org.chromium.chrome.browser.tabmodel.TabModel; import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.tabmodel.TabModelSelectorImpl; import org.chromium.chrome.browser.tabmodel.TabModelSelectorImpl;
import org.chromium.chrome.browser.tabmodel.TabReparentingParams; import org.chromium.chrome.browser.tabmodel.TabReparentingParams;
import org.chromium.chrome.browser.translate.TranslateBridge; import org.chromium.chrome.browser.translate.TranslateBridge;
...@@ -178,6 +179,11 @@ public class CustomTabActivityTabController implements InflationObserver, Native ...@@ -178,6 +179,11 @@ public class CustomTabActivityTabController implements InflationObserver, Native
mTabFactory.getTabModelSelector().saveState(); mTabFactory.getTabModelSelector().saveState();
} }
/** Returns {@link TabModelSelector}. Should be called after postInflationStartup. */
public TabModelSelector getTabModelSelector() {
return mTabFactory.getTabModelSelector();
}
@Override @Override
public void onPreInflationStartup() { public void onPreInflationStartup() {
// This must be requested before adding content. // This must be requested before adding content.
......
...@@ -9,7 +9,6 @@ import org.chromium.chrome.browser.customtabs.CustomTabActivityLifecycleUmaTrack ...@@ -9,7 +9,6 @@ import org.chromium.chrome.browser.customtabs.CustomTabActivityLifecycleUmaTrack
import org.chromium.chrome.browser.customtabs.CustomTabBottomBarDelegate; import org.chromium.chrome.browser.customtabs.CustomTabBottomBarDelegate;
import org.chromium.chrome.browser.customtabs.CustomTabStatusBarColorProvider; import org.chromium.chrome.browser.customtabs.CustomTabStatusBarColorProvider;
import org.chromium.chrome.browser.customtabs.CustomTabTabPersistencePolicy; import org.chromium.chrome.browser.customtabs.CustomTabTabPersistencePolicy;
import org.chromium.chrome.browser.customtabs.CustomTabTopBarDelegate;
import org.chromium.chrome.browser.customtabs.content.CustomTabActivityInitialPageLoader; import org.chromium.chrome.browser.customtabs.content.CustomTabActivityInitialPageLoader;
import org.chromium.chrome.browser.customtabs.content.CustomTabActivityNavigationController; import org.chromium.chrome.browser.customtabs.content.CustomTabActivityNavigationController;
import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabController; import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabController;
...@@ -17,10 +16,10 @@ import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabFactor ...@@ -17,10 +16,10 @@ import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabFactor
import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabProvider; import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabProvider;
import org.chromium.chrome.browser.customtabs.dynamicmodule.DynamicModuleCoordinator; import org.chromium.chrome.browser.customtabs.dynamicmodule.DynamicModuleCoordinator;
import org.chromium.chrome.browser.customtabs.dynamicmodule.DynamicModuleToolbarController; import org.chromium.chrome.browser.customtabs.dynamicmodule.DynamicModuleToolbarController;
import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarCoordinator;
import org.chromium.chrome.browser.dependency_injection.ActivityScope; import org.chromium.chrome.browser.dependency_injection.ActivityScope;
import org.chromium.chrome.browser.dependency_injection.ChromeActivityCommonsModule; import org.chromium.chrome.browser.dependency_injection.ChromeActivityCommonsModule;
import org.chromium.chrome.browser.dependency_injection.ChromeActivityComponent; import org.chromium.chrome.browser.dependency_injection.ChromeActivityComponent;
import org.chromium.chrome.browser.tab.TabObserverRegistrar;
import dagger.Subcomponent; import dagger.Subcomponent;
...@@ -35,8 +34,6 @@ public interface CustomTabActivityComponent extends ChromeActivityComponent { ...@@ -35,8 +34,6 @@ public interface CustomTabActivityComponent extends ChromeActivityComponent {
DynamicModuleToolbarController resolveDynamicModuleToolbarController(); DynamicModuleToolbarController resolveDynamicModuleToolbarController();
DynamicModuleCoordinator resolveDynamicModuleCoordinator(); DynamicModuleCoordinator resolveDynamicModuleCoordinator();
TabObserverRegistrar resolveTabObserverRegistrar();
CustomTabTopBarDelegate resolveTobBarDelegate();
CustomTabBottomBarDelegate resolveBottomBarDelegate(); CustomTabBottomBarDelegate resolveBottomBarDelegate();
CustomTabActivityTabController resolveTabController(); CustomTabActivityTabController resolveTabController();
CustomTabActivityTabFactory resolveTabFactory(); CustomTabActivityTabFactory resolveTabFactory();
...@@ -45,6 +42,7 @@ public interface CustomTabActivityComponent extends ChromeActivityComponent { ...@@ -45,6 +42,7 @@ public interface CustomTabActivityComponent extends ChromeActivityComponent {
CustomTabActivityNavigationController resolveNavigationController(); CustomTabActivityNavigationController resolveNavigationController();
CustomTabActivityTabProvider resolveTabProvider(); CustomTabActivityTabProvider resolveTabProvider();
CustomTabStatusBarColorProvider resolveCustomTabStatusBarColorProvider(); CustomTabStatusBarColorProvider resolveCustomTabStatusBarColorProvider();
CustomTabToolbarCoordinator resolveToolbarCoordinator();
CustomTabTabPersistencePolicy resolveTabPersistencePolicy(); // For testing CustomTabTabPersistencePolicy resolveTabPersistencePolicy(); // For testing
} }
...@@ -5,8 +5,8 @@ ...@@ -5,8 +5,8 @@
package org.chromium.chrome.browser.customtabs.dynamicmodule; package org.chromium.chrome.browser.customtabs.dynamicmodule;
import org.chromium.base.VisibleForTesting; import org.chromium.base.VisibleForTesting;
import org.chromium.chrome.browser.customtabs.CustomTabBrowserControlsVisibilityDelegate;
import org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider; import org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider;
import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarCoordinator;
import org.chromium.chrome.browser.dependency_injection.ActivityScope; import org.chromium.chrome.browser.dependency_injection.ActivityScope;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager; import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.fullscreen.FullscreenManager; import org.chromium.chrome.browser.fullscreen.FullscreenManager;
...@@ -24,7 +24,7 @@ import dagger.Lazy; ...@@ -24,7 +24,7 @@ import dagger.Lazy;
@ActivityScope @ActivityScope
public class DynamicModuleToolbarController implements InflationObserver, NativeInitObserver { public class DynamicModuleToolbarController implements InflationObserver, NativeInitObserver {
private final Lazy<ChromeFullscreenManager> mFullscreenManager; private final Lazy<ChromeFullscreenManager> mFullscreenManager;
private final CustomTabBrowserControlsVisibilityDelegate mControlsVisibilityDelegate; private final CustomTabToolbarCoordinator mToolbarCoordinator;
private final CustomTabIntentDataProvider mIntentDataProvider; private final CustomTabIntentDataProvider mIntentDataProvider;
private int mControlsHidingToken = FullscreenManager.INVALID_TOKEN; private int mControlsHidingToken = FullscreenManager.INVALID_TOKEN;
...@@ -32,12 +32,12 @@ public class DynamicModuleToolbarController implements InflationObserver, Native ...@@ -32,12 +32,12 @@ public class DynamicModuleToolbarController implements InflationObserver, Native
@Inject @Inject
public DynamicModuleToolbarController(Lazy<ChromeFullscreenManager> fullscreenManager, public DynamicModuleToolbarController(Lazy<ChromeFullscreenManager> fullscreenManager,
CustomTabBrowserControlsVisibilityDelegate controlsVisibilityDelegate,
CustomTabIntentDataProvider intentDataProvider, CustomTabIntentDataProvider intentDataProvider,
ActivityLifecycleDispatcher activityLifecycleDispatcher) { ActivityLifecycleDispatcher activityLifecycleDispatcher,
this.mFullscreenManager = fullscreenManager; CustomTabToolbarCoordinator toolbarCoordinator) {
this.mControlsVisibilityDelegate = controlsVisibilityDelegate; mFullscreenManager = fullscreenManager;
this.mIntentDataProvider = intentDataProvider; mToolbarCoordinator = toolbarCoordinator;
mIntentDataProvider = intentDataProvider;
activityLifecycleDispatcher.register(this); activityLifecycleDispatcher.register(this);
} }
...@@ -47,7 +47,7 @@ public class DynamicModuleToolbarController implements InflationObserver, Native ...@@ -47,7 +47,7 @@ public class DynamicModuleToolbarController implements InflationObserver, Native
@Override @Override
public void onPostInflationStartup() { public void onPostInflationStartup() {
mControlsVisibilityDelegate.setModuleLoadingMode(true); mToolbarCoordinator.setToolbarHidden(true);
mControlsHidingToken = mControlsHidingToken =
mFullscreenManager.get().hideAndroidControlsAndClearOldToken(mControlsHidingToken); mFullscreenManager.get().hideAndroidControlsAndClearOldToken(mControlsHidingToken);
mHasReleasedToken = false; mHasReleasedToken = false;
...@@ -61,7 +61,7 @@ public class DynamicModuleToolbarController implements InflationObserver, Native ...@@ -61,7 +61,7 @@ public class DynamicModuleToolbarController implements InflationObserver, Native
} }
/* package */ void releaseAndroidControlsHidingToken() { /* package */ void releaseAndroidControlsHidingToken() {
mControlsVisibilityDelegate.setModuleLoadingMode(false); mToolbarCoordinator.setToolbarHidden(false);
mFullscreenManager.get().releaseAndroidControlsHidingToken(mControlsHidingToken); mFullscreenManager.get().releaseAndroidControlsHidingToken(mControlsHidingToken);
mHasReleasedToken = true; mHasReleasedToken = true;
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
package org.chromium.chrome.browser.customtabs; package org.chromium.chrome.browser.customtabs.features.toolbar;
import org.chromium.chrome.browser.ActivityTabProvider; import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.dependency_injection.ActivityScope; import org.chromium.chrome.browser.dependency_injection.ActivityScope;
...@@ -23,8 +23,7 @@ public class CustomTabBrowserControlsVisibilityDelegate ...@@ -23,8 +23,7 @@ public class CustomTabBrowserControlsVisibilityDelegate
implements BrowserControlsVisibilityDelegate { implements BrowserControlsVisibilityDelegate {
private final Lazy<ChromeFullscreenManager> mFullscreenManagerDelegate; private final Lazy<ChromeFullscreenManager> mFullscreenManagerDelegate;
private final ActivityTabProvider mTabProvider; private final ActivityTabProvider mTabProvider;
private boolean mIsInTwaMode; private boolean mHidden;
private boolean mIsInModuleLoadingMode;
@Inject @Inject
public CustomTabBrowserControlsVisibilityDelegate( public CustomTabBrowserControlsVisibilityDelegate(
...@@ -34,32 +33,18 @@ public class CustomTabBrowserControlsVisibilityDelegate ...@@ -34,32 +33,18 @@ public class CustomTabBrowserControlsVisibilityDelegate
} }
/** /**
* Sets trusted web activity mode. In trusted web activity mode browser controls should be * Sets browser controls hidden. Note: this is not enough to completely hide the toolbar, use
* hidden. * {@link CustomTabToolbarCoordinator#setToolbarHidden} for that.
*/ */
public void setTrustedWebActivityMode(boolean isInTwaMode) { public void setControlsHidden(boolean hidden) {
if (mIsInTwaMode == isInTwaMode) { if (hidden == mHidden) return;
return; mHidden = hidden;
}
mIsInTwaMode = isInTwaMode;
updateActiveTabFullscreenEnabledState();
}
/**
* Sets module loading mode. In module loading mode browser controls should be hidden.
*/
public void setModuleLoadingMode(boolean isInModuleLoadingMode) {
if (mIsInModuleLoadingMode == isInModuleLoadingMode) {
return;
}
mIsInModuleLoadingMode = isInModuleLoadingMode;
updateActiveTabFullscreenEnabledState(); updateActiveTabFullscreenEnabledState();
} }
@Override @Override
public boolean canShowBrowserControls() { public boolean canShowBrowserControls() {
return !mIsInTwaMode && !mIsInModuleLoadingMode return !mHidden && getDefaultVisibilityDelegate().canShowBrowserControls();
&& getDefaultVisibilityDelegate().canShowBrowserControls();
} }
@Override @Override
......
...@@ -24,6 +24,7 @@ import org.chromium.chrome.browser.toolbar.ToolbarManager; ...@@ -24,6 +24,7 @@ import org.chromium.chrome.browser.toolbar.ToolbarManager;
import org.chromium.chrome.browser.ui.system.StatusBarColorController; import org.chromium.chrome.browser.ui.system.StatusBarColorController;
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController; import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController;
import org.chromium.content_public.browser.ScreenOrientationProvider; import org.chromium.content_public.browser.ScreenOrientationProvider;
import org.chromium.chrome.browser.widget.findinpage.FindToolbarManager;
import org.chromium.ui.base.ActivityWindowAndroid; import org.chromium.ui.base.ActivityWindowAndroid;
import javax.inject.Named; import javax.inject.Named;
...@@ -143,4 +144,9 @@ public class ChromeActivityCommonsModule { ...@@ -143,4 +144,9 @@ public class ChromeActivityCommonsModule {
public ScreenOrientationProvider provideScreenOrientationProvider() { public ScreenOrientationProvider provideScreenOrientationProvider() {
return ScreenOrientationProvider.getInstance(); return ScreenOrientationProvider.getInstance();
} }
@Provides
public FindToolbarManager provideFindToolbarManager() {
return mActivity.getFindToolbarManager();
}
} }
...@@ -92,6 +92,7 @@ public abstract class AsyncInitializationActivity ...@@ -92,6 +92,7 @@ public abstract class AsyncInitializationActivity
private boolean mFirstDrawComplete; private boolean mFirstDrawComplete;
private Runnable mOnInflationCompleteCallback; private Runnable mOnInflationCompleteCallback;
private boolean mInitialLayoutInflationComplete;
public AsyncInitializationActivity() { public AsyncInitializationActivity() {
mHandler = new Handler(); mHandler = new Handler();
...@@ -761,6 +762,14 @@ public abstract class AsyncInitializationActivity ...@@ -761,6 +762,14 @@ public abstract class AsyncInitializationActivity
if (mOnInflationCompleteCallback == null) return; if (mOnInflationCompleteCallback == null) return;
mOnInflationCompleteCallback.run(); mOnInflationCompleteCallback.run();
mOnInflationCompleteCallback = null; mOnInflationCompleteCallback = null;
mInitialLayoutInflationComplete = true;
}
/**
* Returns whether initial inflation is complete.
*/
public boolean isInitialLayoutInflationComplete() {
return mInitialLayoutInflationComplete;
} }
/** /**
......
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