Commit e7f9d3f7 authored by Matt Jones's avatar Matt Jones Committed by Commit Bot

Break TopToolbarOverlay dependency on old layout system

This patch migrates the TopToolbarOverlay to use the new layouts
module rather than the LayoutManagerImpl class. The old observer
in the mediator has been replaced with the LayoutStateObserver
and a new supplier has been added to the coordinator's constructor
for the ResourceManager.

Bug: 1070281, 1100332
Change-Id: I061ee98a3e7bb8db8f2a23d75573077bac0c271c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2527010
Commit-Queue: Matthew Jones <mdjones@chromium.org>
Reviewed-by: default avatarPatrick Noland <pnoland@chromium.org>
Cr-Commit-Position: refs/heads/master@{#825823}
parent 1ff97baf
...@@ -8,12 +8,13 @@ import android.content.Context; ...@@ -8,12 +8,13 @@ import android.content.Context;
import android.graphics.RectF; import android.graphics.RectF;
import org.chromium.base.Callback; import org.chromium.base.Callback;
import org.chromium.base.supplier.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.browser_controls.BrowserControlsStateProvider; import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider;
import org.chromium.chrome.browser.compositor.layouts.LayoutManagerImpl;
import org.chromium.chrome.browser.layouts.CompositorModelChangeProcessor; import org.chromium.chrome.browser.layouts.CompositorModelChangeProcessor;
import org.chromium.chrome.browser.layouts.EventFilter; import org.chromium.chrome.browser.layouts.EventFilter;
import org.chromium.chrome.browser.layouts.LayoutManager;
import org.chromium.chrome.browser.layouts.SceneOverlay; import org.chromium.chrome.browser.layouts.SceneOverlay;
import org.chromium.chrome.browser.layouts.components.VirtualView; import org.chromium.chrome.browser.layouts.components.VirtualView;
import org.chromium.chrome.browser.layouts.scene_layer.SceneOverlayLayer; import org.chromium.chrome.browser.layouts.scene_layer.SceneOverlayLayer;
...@@ -37,10 +38,11 @@ public class TopToolbarOverlayCoordinator implements SceneOverlay { ...@@ -37,10 +38,11 @@ public class TopToolbarOverlayCoordinator implements SceneOverlay {
/** Business logic for this overlay. */ /** Business logic for this overlay. */
private final TopToolbarOverlayMediator mMediator; private final TopToolbarOverlayMediator mMediator;
public TopToolbarOverlayCoordinator(Context context, LayoutManagerImpl layoutManager, public TopToolbarOverlayCoordinator(Context context, LayoutManager layoutManager,
Callback<ClipDrawableProgressBar.DrawingInfo> progressInfoCallback, Callback<ClipDrawableProgressBar.DrawingInfo> progressInfoCallback,
ActivityTabProvider tabSupplier, ActivityTabProvider tabSupplier,
BrowserControlsStateProvider browserControlsStateProvider) { BrowserControlsStateProvider browserControlsStateProvider,
Supplier<ResourceManager> resourceManagerSupplier) {
mModel = new PropertyModel.Builder(TopToolbarOverlayProperties.ALL_KEYS) mModel = new PropertyModel.Builder(TopToolbarOverlayProperties.ALL_KEYS)
.with(TopToolbarOverlayProperties.RESOURCE_ID, R.id.control_container) .with(TopToolbarOverlayProperties.RESOURCE_ID, R.id.control_container)
.with(TopToolbarOverlayProperties.URL_BAR_RESOURCE_ID, .with(TopToolbarOverlayProperties.URL_BAR_RESOURCE_ID,
...@@ -49,7 +51,7 @@ public class TopToolbarOverlayCoordinator implements SceneOverlay { ...@@ -49,7 +51,7 @@ public class TopToolbarOverlayCoordinator implements SceneOverlay {
.with(TopToolbarOverlayProperties.CONTENT_OFFSET, .with(TopToolbarOverlayProperties.CONTENT_OFFSET,
browserControlsStateProvider.getContentOffset()) browserControlsStateProvider.getContentOffset())
.build(); .build();
mSceneLayer = new TopToolbarSceneLayer(() -> layoutManager.getResourceManager()); mSceneLayer = new TopToolbarSceneLayer(resourceManagerSupplier);
mChangeProcessor = mChangeProcessor =
layoutManager.createCompositorMCP(mModel, mSceneLayer, TopToolbarSceneLayer::bind); layoutManager.createCompositorMCP(mModel, mSceneLayer, TopToolbarSceneLayer::bind);
......
...@@ -13,11 +13,9 @@ import org.chromium.base.Callback; ...@@ -13,11 +13,9 @@ import org.chromium.base.Callback;
import org.chromium.chrome.browser.ActivityTabProvider; import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider;
import org.chromium.chrome.browser.browser_controls.BrowserControlsUtils; import org.chromium.chrome.browser.browser_controls.BrowserControlsUtils;
import org.chromium.chrome.browser.compositor.layouts.Layout; import org.chromium.chrome.browser.layouts.LayoutStateProvider;
import org.chromium.chrome.browser.compositor.layouts.LayoutManagerImpl; import org.chromium.chrome.browser.layouts.LayoutStateProvider.LayoutStateObserver;
import org.chromium.chrome.browser.compositor.layouts.SceneChangeObserver; import org.chromium.chrome.browser.layouts.LayoutType;
import org.chromium.chrome.browser.compositor.layouts.ToolbarSwipeLayout;
import org.chromium.chrome.browser.compositor.layouts.phone.StackLayout;
import org.chromium.chrome.browser.tab.EmptyTabObserver; import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabObserver; import org.chromium.chrome.browser.tab.TabObserver;
...@@ -37,10 +35,10 @@ public class TopToolbarOverlayMediator { ...@@ -37,10 +35,10 @@ public class TopToolbarOverlayMediator {
private final Context mContext; private final Context mContext;
/** A handle to the layout manager for observing scene changes. */ /** A handle to the layout manager for observing scene changes. */
private final LayoutManagerImpl mLayoutManager; private final LayoutStateProvider mLayoutStateProvider;
/** The observer of changes to the active layout. */ /** The observer of changes to the active layout. */
private final SceneChangeObserver mSceneChangeObserver; private final LayoutStateObserver mSceneChangeObserver;
/** A means of populating draw info for the progress bar. */ /** A means of populating draw info for the progress bar. */
private final Callback<ClipDrawableProgressBar.DrawingInfo> mProgressInfoCallback; private final Callback<ClipDrawableProgressBar.DrawingInfo> mProgressInfoCallback;
...@@ -69,32 +67,29 @@ public class TopToolbarOverlayMediator { ...@@ -69,32 +67,29 @@ public class TopToolbarOverlayMediator {
/** Whether the android view for this overlay is visible. */ /** Whether the android view for this overlay is visible. */
private boolean mIsAndroidViewVisible; private boolean mIsAndroidViewVisible;
TopToolbarOverlayMediator(PropertyModel model, Context context, LayoutManagerImpl layoutManager, TopToolbarOverlayMediator(PropertyModel model, Context context,
LayoutStateProvider layoutStateProvider,
Callback<ClipDrawableProgressBar.DrawingInfo> progressInfoCallback, Callback<ClipDrawableProgressBar.DrawingInfo> progressInfoCallback,
ActivityTabProvider tabSupplier, ActivityTabProvider tabSupplier,
BrowserControlsStateProvider browserControlsStateProvider) { BrowserControlsStateProvider browserControlsStateProvider) {
mContext = context; mContext = context;
mLayoutManager = layoutManager; mLayoutStateProvider = layoutStateProvider;
mProgressInfoCallback = progressInfoCallback; mProgressInfoCallback = progressInfoCallback;
mTabSupplier = tabSupplier; mTabSupplier = tabSupplier;
mBrowserControlsStateProvider = browserControlsStateProvider; mBrowserControlsStateProvider = browserControlsStateProvider;
mModel = model; mModel = model;
mSceneChangeObserver = new SceneChangeObserver() { mSceneChangeObserver = new LayoutStateObserver() {
@Override @Override
public void onTabSelectionHinted(int tabId) {} public void onStartedShowing(@LayoutType int layout, boolean showToolbar) {
@Override
public void onSceneChange(Layout layout) {
// TODO(1100332): Use layout IDs instead of type checking when they are available.
// TODO(1100332): Once ToolbarSwipeLayout uses a SceneLayer that does not include // TODO(1100332): Once ToolbarSwipeLayout uses a SceneLayer that does not include
// its own toolbar, only check for the vertical tab switcher. // its own toolbar, only check for the vertical tab switcher.
mLayoutHasOwnToolbar = mLayoutHasOwnToolbar =
layout instanceof StackLayout || layout instanceof ToolbarSwipeLayout; layout == LayoutType.TAB_SWITCHER || layout == LayoutType.TOOLBAR_SWIPE;
updateVisibility(); updateVisibility();
} }
}; };
mLayoutManager.addSceneChangeObserver(mSceneChangeObserver); mLayoutStateProvider.addObserver(mSceneChangeObserver);
final TabObserver currentTabObserver = new EmptyTabObserver() { final TabObserver currentTabObserver = new EmptyTabObserver() {
@Override @Override
...@@ -230,7 +225,7 @@ public class TopToolbarOverlayMediator { ...@@ -230,7 +225,7 @@ public class TopToolbarOverlayMediator {
mTabSupplierObserver.onActivityTabChanged(null, false); mTabSupplierObserver.onActivityTabChanged(null, false);
mLastActiveTab = null; mLastActiveTab = null;
mLayoutManager.removeSceneChangeObserver(mSceneChangeObserver); mLayoutStateProvider.removeObserver(mSceneChangeObserver);
mBrowserControlsStateProvider.removeObserver(mBrowserControlsObserver); mBrowserControlsStateProvider.removeObserver(mBrowserControlsObserver);
} }
......
...@@ -758,7 +758,7 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve ...@@ -758,7 +758,7 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve
startSurfaceSupplier, () -> { startSurfaceSupplier, () -> {
NewTabPage ntp = getNewTabPageForCurrentTab(); NewTabPage ntp = getNewTabPageForCurrentTab();
if (ntp != null) mLocationBar.onTabLoadingNTP(ntp); if (ntp != null) mLocationBar.onTabLoadingNTP(ntp);
}); }, () -> mLayoutManager.getResourceManager());
// clang-format on // clang-format on
mHomepageStateListener = () -> { mHomepageStateListener = () -> {
mHomeButtonVisibilitySupplier.set(HomepageManager.isHomepageEnabled()); mHomeButtonVisibilitySupplier.set(HomepageManager.isHomepageEnabled());
......
...@@ -22,10 +22,10 @@ import org.chromium.chrome.R; ...@@ -22,10 +22,10 @@ import org.chromium.chrome.R;
import org.chromium.chrome.browser.ActivityTabProvider; import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider;
import org.chromium.chrome.browser.compositor.Invalidator; import org.chromium.chrome.browser.compositor.Invalidator;
import org.chromium.chrome.browser.compositor.layouts.LayoutManagerImpl;
import org.chromium.chrome.browser.compositor.overlays.toolbar.TopToolbarOverlayCoordinator; import org.chromium.chrome.browser.compositor.overlays.toolbar.TopToolbarOverlayCoordinator;
import org.chromium.chrome.browser.device.DeviceClassManager; import org.chromium.chrome.browser.device.DeviceClassManager;
import org.chromium.chrome.browser.findinpage.FindToolbar; import org.chromium.chrome.browser.findinpage.FindToolbar;
import org.chromium.chrome.browser.layouts.LayoutManager;
import org.chromium.chrome.browser.layouts.LayoutStateProvider; import org.chromium.chrome.browser.layouts.LayoutStateProvider;
import org.chromium.chrome.browser.omnibox.LocationBar; import org.chromium.chrome.browser.omnibox.LocationBar;
import org.chromium.chrome.browser.tabmodel.IncognitoStateProvider; import org.chromium.chrome.browser.tabmodel.IncognitoStateProvider;
...@@ -45,6 +45,7 @@ import org.chromium.chrome.features.start_surface.StartSurface; ...@@ -45,6 +45,7 @@ import org.chromium.chrome.features.start_surface.StartSurface;
import org.chromium.chrome.features.start_surface.StartSurfaceConfiguration; import org.chromium.chrome.features.start_surface.StartSurfaceConfiguration;
import org.chromium.chrome.features.start_surface.StartSurfaceState; import org.chromium.chrome.features.start_surface.StartSurfaceState;
import org.chromium.components.browser_ui.widget.ClipDrawableProgressBar; import org.chromium.components.browser_ui.widget.ClipDrawableProgressBar;
import org.chromium.ui.resources.ResourceManager;
import java.util.List; import java.util.List;
...@@ -91,6 +92,7 @@ public class TopToolbarCoordinator implements Toolbar { ...@@ -91,6 +92,7 @@ public class TopToolbarCoordinator implements Toolbar {
private Callback<ClipDrawableProgressBar.DrawingInfo> mProgressDrawInfoCallback; private Callback<ClipDrawableProgressBar.DrawingInfo> mProgressDrawInfoCallback;
private ToolbarControlContainer mControlContainer; private ToolbarControlContainer mControlContainer;
private Supplier<ResourceManager> mResourceManagerSupplier;
/** /**
* Creates a new {@link TopToolbarCoordinator}. * Creates a new {@link TopToolbarCoordinator}.
...@@ -110,6 +112,7 @@ public class TopToolbarCoordinator implements Toolbar { ...@@ -110,6 +112,7 @@ public class TopToolbarCoordinator implements Toolbar {
* for the {@link Invalidator} a chance to defer the actual invalidate to sync drawing. * for the {@link Invalidator} a chance to defer the actual invalidate to sync drawing.
* @param identityDiscButtonSupplier Supplier of Identity Disc button. * @param identityDiscButtonSupplier Supplier of Identity Disc button.
* @param startSurfaceSupplier Supplier of the StartSurface. * @param startSurfaceSupplier Supplier of the StartSurface.
* @param resourceManagerSupplier A supplier of a resource manager for native textures.
*/ */
public TopToolbarCoordinator(ToolbarControlContainer controlContainer, public TopToolbarCoordinator(ToolbarControlContainer controlContainer,
ToolbarLayout toolbarLayout, ToolbarDataProvider toolbarDataProvider, ToolbarLayout toolbarLayout, ToolbarDataProvider toolbarDataProvider,
...@@ -125,12 +128,14 @@ public class TopToolbarCoordinator implements Toolbar { ...@@ -125,12 +128,14 @@ public class TopToolbarCoordinator implements Toolbar {
ObservableSupplier<Boolean> homeButtonVisibilitySupplier, ObservableSupplier<Boolean> homeButtonVisibilitySupplier,
ObservableSupplier<Boolean> identityDiscStateSupplier, ObservableSupplier<Boolean> identityDiscStateSupplier,
Callback<Runnable> invalidatorCallback, Supplier<ButtonData> identityDiscButtonSupplier, Callback<Runnable> invalidatorCallback, Supplier<ButtonData> identityDiscButtonSupplier,
OneshotSupplier<StartSurface> startSurfaceSupplier, Runnable tabOrModelChangeRunnable) { OneshotSupplier<StartSurface> startSurfaceSupplier, Runnable tabOrModelChangeRunnable,
Supplier<ResourceManager> resourceManagerSupplier) {
mControlContainer = controlContainer; mControlContainer = controlContainer;
mToolbarLayout = toolbarLayout; mToolbarLayout = toolbarLayout;
mMenuButtonCoordinator = browsingModeMenuButtonCoordinator; mMenuButtonCoordinator = browsingModeMenuButtonCoordinator;
mOptionalButtonController = new OptionalBrowsingModeButtonController(buttonDataProviders, mOptionalButtonController = new OptionalBrowsingModeButtonController(buttonDataProviders,
userEducationHelper, mToolbarLayout, () -> toolbarDataProvider.getTab()); userEducationHelper, mToolbarLayout, () -> toolbarDataProvider.getTab());
mResourceManagerSupplier = resourceManagerSupplier;
mProgressDrawInfoCallback = (info) -> { mProgressDrawInfoCallback = (info) -> {
if (controlContainer == null) return; if (controlContainer == null) return;
controlContainer.getProgressBarDrawingInfo(info); controlContainer.getProgressBarDrawingInfo(info);
...@@ -188,7 +193,7 @@ public class TopToolbarCoordinator implements Toolbar { ...@@ -188,7 +193,7 @@ public class TopToolbarCoordinator implements Toolbar {
OnClickListener tabSwitcherClickHandler, OnClickListener tabSwitcherClickHandler,
OnLongClickListener tabSwitcherLongClickHandler, OnClickListener newTabClickHandler, OnLongClickListener tabSwitcherLongClickHandler, OnClickListener newTabClickHandler,
OnClickListener bookmarkClickHandler, OnClickListener customTabsBackClickHandler, OnClickListener bookmarkClickHandler, OnClickListener customTabsBackClickHandler,
LayoutManagerImpl layoutManager, ActivityTabProvider tabProvider, LayoutManager layoutManager, ActivityTabProvider tabProvider,
BrowserControlsStateProvider browserControlsStateProvider) { BrowserControlsStateProvider browserControlsStateProvider) {
assert mTabModelSelectorSupplier.get() != null; assert mTabModelSelectorSupplier.get() != null;
if (mTabSwitcherModeCoordinatorPhone != null) { if (mTabSwitcherModeCoordinatorPhone != null) {
...@@ -217,9 +222,9 @@ public class TopToolbarCoordinator implements Toolbar { ...@@ -217,9 +222,9 @@ public class TopToolbarCoordinator implements Toolbar {
// If fullscreen is disabled, don't bother creating this overlay; only the android view will // If fullscreen is disabled, don't bother creating this overlay; only the android view will
// ever be shown. // ever be shown.
if (DeviceClassManager.enableFullscreen()) { if (DeviceClassManager.enableFullscreen()) {
mOverlayCoordinator = mOverlayCoordinator = new TopToolbarOverlayCoordinator(mToolbarLayout.getContext(),
new TopToolbarOverlayCoordinator(mToolbarLayout.getContext(), layoutManager, layoutManager, mProgressDrawInfoCallback, tabProvider,
mProgressDrawInfoCallback, tabProvider, browserControlsStateProvider); browserControlsStateProvider, mResourceManagerSupplier);
layoutManager.addSceneOverlay(mOverlayCoordinator); layoutManager.addSceneOverlay(mOverlayCoordinator);
mToolbarLayout.setOverlayCoordinator(mOverlayCoordinator); mToolbarLayout.setOverlayCoordinator(mOverlayCoordinator);
} }
......
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