Commit 38e66853 authored by Matt Jones's avatar Matt Jones Committed by Commit Bot

Replace ViewportSupplier with layout check

This patch removes the viewport type check for the TopToolbarOverlay
in place of checking specific layouts. The format in this patch is
much closer to what we want longer-term, especially with the
deprecation of the ViewportMode concept.

Bug: 1100332
Change-Id: Ief878a1c3b5b499cd411ab979d748cfd1477297a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2350391
Commit-Queue: Matthew Jones <mdjones@chromium.org>
Reviewed-by: default avatarMei Liang <meiliang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#805356}
parent 70901442
...@@ -18,7 +18,6 @@ import androidx.annotation.VisibleForTesting; ...@@ -18,7 +18,6 @@ import androidx.annotation.VisibleForTesting;
import org.chromium.base.ObserverList; import org.chromium.base.ObserverList;
import org.chromium.base.TraceEvent; import org.chromium.base.TraceEvent;
import org.chromium.base.supplier.ObservableSupplierImpl; import org.chromium.base.supplier.ObservableSupplierImpl;
import org.chromium.base.supplier.Supplier;
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;
...@@ -416,13 +415,9 @@ public class LayoutManager implements LayoutUpdateHost, LayoutProvider, ...@@ -416,13 +415,9 @@ public class LayoutManager implements LayoutUpdateHost, LayoutProvider,
// 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()) {
Supplier<Integer> viewportModeSupplier = ()
-> getActiveLayout() != null ? getActiveLayout().getViewportMode()
: Layout.ViewportMode.ALWAYS_FULLSCREEN;
mToolbarOverlay = new TopToolbarOverlayCoordinator(mContext, mFrameRequestSupplier, mToolbarOverlay = new TopToolbarOverlayCoordinator(mContext, mFrameRequestSupplier,
this, controlContainer, tabProvider, getBrowserControlsManager(), this, controlContainer, tabProvider, getBrowserControlsManager(),
viewportModeSupplier, mAndroidViewShownSupplier, mAndroidViewShownSupplier, () -> renderHost.getResourceManager());
() -> renderHost.getResourceManager());
} }
// Initialize Layouts // Initialize Layouts
......
...@@ -44,7 +44,6 @@ public class TopToolbarOverlayCoordinator implements SceneOverlay { ...@@ -44,7 +44,6 @@ public class TopToolbarOverlayCoordinator implements SceneOverlay {
LayoutManager layoutManager, ControlContainer controlContainer, LayoutManager layoutManager, ControlContainer controlContainer,
ActivityTabProvider tabSupplier, ActivityTabProvider tabSupplier,
BrowserControlsStateProvider browserControlsStateProvider, BrowserControlsStateProvider browserControlsStateProvider,
Supplier<Integer> viewportModeSupplier,
ObservableSupplier<Boolean> androidViewShownSupplier, ObservableSupplier<Boolean> androidViewShownSupplier,
Supplier<ResourceManager> resourceManagerSupplier) { Supplier<ResourceManager> resourceManagerSupplier) {
mModel = new PropertyModel.Builder(TopToolbarOverlayProperties.ALL_KEYS) mModel = new PropertyModel.Builder(TopToolbarOverlayProperties.ALL_KEYS)
...@@ -60,8 +59,7 @@ public class TopToolbarOverlayCoordinator implements SceneOverlay { ...@@ -60,8 +59,7 @@ public class TopToolbarOverlayCoordinator implements SceneOverlay {
mModel, mSceneLayer, TopToolbarSceneLayer::bind, frameRequestSupplier, true); mModel, mSceneLayer, TopToolbarSceneLayer::bind, frameRequestSupplier, true);
mMediator = new TopToolbarOverlayMediator(mModel, context, layoutManager, controlContainer, mMediator = new TopToolbarOverlayMediator(mModel, context, layoutManager, controlContainer,
tabSupplier, browserControlsStateProvider, viewportModeSupplier, tabSupplier, browserControlsStateProvider, androidViewShownSupplier);
androidViewShownSupplier);
} }
/** Clean up this component. */ /** Clean up this component. */
......
...@@ -11,13 +11,14 @@ import androidx.annotation.VisibleForTesting; ...@@ -11,13 +11,14 @@ import androidx.annotation.VisibleForTesting;
import org.chromium.base.Callback; import org.chromium.base.Callback;
import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.ObservableSupplier;
import org.chromium.base.supplier.Supplier;
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.compositor.layouts.Layout;
import org.chromium.chrome.browser.compositor.layouts.LayoutManager; import org.chromium.chrome.browser.compositor.layouts.LayoutManager;
import org.chromium.chrome.browser.compositor.layouts.SceneChangeObserver; 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.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;
...@@ -58,9 +59,6 @@ public class TopToolbarOverlayMediator { ...@@ -58,9 +59,6 @@ public class TopToolbarOverlayMediator {
/** An observer of the browser controls offsets. */ /** An observer of the browser controls offsets. */
private final BrowserControlsStateProvider.Observer mBrowserControlsObserver; private final BrowserControlsStateProvider.Observer mBrowserControlsObserver;
/** A means of accessing the current viewport mode. */
private final Supplier<Integer> mViewportModeSupplier;
/** A means of checking whether the toolbar android view is being force-hidden or shown. */ /** A means of checking whether the toolbar android view is being force-hidden or shown. */
private final ObservableSupplier<Boolean> mAndroidViewShownSupplier; private final ObservableSupplier<Boolean> mAndroidViewShownSupplier;
...@@ -73,17 +71,18 @@ public class TopToolbarOverlayMediator { ...@@ -73,17 +71,18 @@ public class TopToolbarOverlayMediator {
/** The last non-null tab. */ /** The last non-null tab. */
private Tab mLastActiveTab; private Tab mLastActiveTab;
/** Whether the active layout has its own toolbar to display instead of this one. */
private boolean mLayoutHasOwnToolbar;
TopToolbarOverlayMediator(PropertyModel model, Context context, LayoutManager layoutManager, TopToolbarOverlayMediator(PropertyModel model, Context context, LayoutManager layoutManager,
ControlContainer controlContainer, ActivityTabProvider tabSupplier, ControlContainer controlContainer, ActivityTabProvider tabSupplier,
BrowserControlsStateProvider browserControlsStateProvider, BrowserControlsStateProvider browserControlsStateProvider,
Supplier<Integer> viewportModeSupplier,
ObservableSupplier<Boolean> androidViewShownSupplier) { ObservableSupplier<Boolean> androidViewShownSupplier) {
mContext = context; mContext = context;
mLayoutManager = layoutManager; mLayoutManager = layoutManager;
mToolbarContainer = controlContainer; mToolbarContainer = controlContainer;
mTabSupplier = tabSupplier; mTabSupplier = tabSupplier;
mBrowserControlsStateProvider = browserControlsStateProvider; mBrowserControlsStateProvider = browserControlsStateProvider;
mViewportModeSupplier = viewportModeSupplier;
mAndroidViewShownSupplier = androidViewShownSupplier; mAndroidViewShownSupplier = androidViewShownSupplier;
mModel = model; mModel = model;
...@@ -93,6 +92,11 @@ public class TopToolbarOverlayMediator { ...@@ -93,6 +92,11 @@ public class TopToolbarOverlayMediator {
@Override @Override
public void onSceneChange(Layout layout) { 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
// its own toolbar, only check for the vertical tab switcher.
mLayoutHasOwnToolbar =
layout instanceof StackLayout || layout instanceof ToolbarSwipeLayout;
updateVisibility(); updateVisibility();
} }
}; };
...@@ -238,7 +242,7 @@ public class TopToolbarOverlayMediator { ...@@ -238,7 +242,7 @@ public class TopToolbarOverlayMediator {
private void updateVisibility() { private void updateVisibility() {
mModel.set(TopToolbarOverlayProperties.VISIBLE, mModel.set(TopToolbarOverlayProperties.VISIBLE,
!BrowserControlsUtils.areBrowserControlsOffScreen(mBrowserControlsStateProvider) !BrowserControlsUtils.areBrowserControlsOffScreen(mBrowserControlsStateProvider)
&& mViewportModeSupplier.get() != Layout.ViewportMode.ALWAYS_FULLSCREEN); && !mLayoutHasOwnToolbar);
} }
/** @return Whether this overlay should be attached to the tree. */ /** @return Whether this overlay should be attached to the tree. */
......
...@@ -20,12 +20,10 @@ import org.mockito.Captor; ...@@ -20,12 +20,10 @@ import org.mockito.Captor;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.chromium.base.supplier.ObservableSupplier;
import org.chromium.base.supplier.ObservableSupplierImpl; import org.chromium.base.supplier.ObservableSupplierImpl;
import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.BaseRobolectricTestRunner;
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.Layout.ViewportMode;
import org.chromium.chrome.browser.compositor.layouts.LayoutManager; import org.chromium.chrome.browser.compositor.layouts.LayoutManager;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabImpl; import org.chromium.chrome.browser.tab.TabImpl;
...@@ -51,9 +49,6 @@ public class TopToolbarOverlayMediatorTest { ...@@ -51,9 +49,6 @@ public class TopToolbarOverlayMediatorTest {
@Mock @Mock
private BrowserControlsStateProvider mBrowserControlsProvider; private BrowserControlsStateProvider mBrowserControlsProvider;
@Mock
private ObservableSupplier<Integer> mViewportModeSupplier;
@Mock @Mock
private TabImpl mTab; private TabImpl mTab;
...@@ -81,8 +76,6 @@ public class TopToolbarOverlayMediatorTest { ...@@ -81,8 +76,6 @@ public class TopToolbarOverlayMediatorTest {
mAndroidViewShownSupplier = new ObservableSupplierImpl<>(); mAndroidViewShownSupplier = new ObservableSupplierImpl<>();
mAndroidViewShownSupplier.set(true); mAndroidViewShownSupplier.set(true);
when(mViewportModeSupplier.get()).thenReturn(ViewportMode.DYNAMIC_BROWSER_CONTROLS);
TopToolbarOverlayMediator.setToolbarBackgroundColorForTesting(Color.RED); TopToolbarOverlayMediator.setToolbarBackgroundColorForTesting(Color.RED);
TopToolbarOverlayMediator.setUrlBarColorForTesting(Color.BLUE); TopToolbarOverlayMediator.setUrlBarColorForTesting(Color.BLUE);
TopToolbarOverlayMediator.setIsTabletForTesting(false); TopToolbarOverlayMediator.setIsTabletForTesting(false);
...@@ -98,9 +91,9 @@ public class TopToolbarOverlayMediatorTest { ...@@ -98,9 +91,9 @@ public class TopToolbarOverlayMediatorTest {
.with(TopToolbarOverlayProperties.PROGRESS_BAR_INFO, null) .with(TopToolbarOverlayProperties.PROGRESS_BAR_INFO, null)
.build(); .build();
mMediator = new TopToolbarOverlayMediator(mModel, mContext, mLayoutManager, mMediator =
mControlContainer, mTabSupplier, mBrowserControlsProvider, mViewportModeSupplier, new TopToolbarOverlayMediator(mModel, mContext, mLayoutManager, mControlContainer,
mAndroidViewShownSupplier); mTabSupplier, mBrowserControlsProvider, mAndroidViewShownSupplier);
// Ensure the observer is added to the initial tab. // Ensure the observer is added to the initial tab.
verify(mTabSupplier).addObserverAndTrigger(mActivityTabObserverCaptor.capture()); verify(mTabSupplier).addObserverAndTrigger(mActivityTabObserverCaptor.capture());
......
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