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