Commit 9291040a authored by Matt Jones's avatar Matt Jones Committed by Commit Bot

Replace TopToolbarOverlay's ControlContainer dependency

This patch replaces the TopToolbarOverlay's dependency on the
ControlContainer with a callback for the progress bar's draw info.
This will make chainging the ownership of TopToolbarOverlay from
the LayoutManager to the TopToolbarCoordinator easier.

Bug: 1100332
Change-Id: Id6cd9ae9f2ffe8b4dd70436c360147fb9877dcc0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2357955Reviewed-by: default avatarPatrick Noland <pnoland@chromium.org>
Commit-Queue: Matthew Jones <mdjones@chromium.org>
Cr-Commit-Position: refs/heads/master@{#813386}
parent 238fa3b0
......@@ -16,6 +16,7 @@ import android.view.ViewGroup;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import org.chromium.base.Callback;
import org.chromium.base.ObserverList;
import org.chromium.base.TraceEvent;
import org.chromium.base.supplier.ObservableSupplier;
......@@ -65,6 +66,7 @@ import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver;
import org.chromium.chrome.browser.tabmodel.TabModelUtils;
import org.chromium.chrome.browser.toolbar.ControlContainer;
import org.chromium.chrome.browser.toolbar.ToolbarColors;
import org.chromium.components.browser_ui.widget.ClipDrawableProgressBar;
import org.chromium.components.embedder_support.util.UrlConstants;
import org.chromium.ui.base.LocalizationUtils;
import org.chromium.ui.base.SPenSupport;
......@@ -467,8 +469,12 @@ public class LayoutManager implements LayoutUpdateHost, LayoutProvider,
// If fullscreen is disabled, don't bother creating this overlay; only the android view will
// ever be shown.
if (DeviceClassManager.enableFullscreen()) {
Callback<ClipDrawableProgressBar.DrawingInfo> progressInfoCallback = (info) -> {
if (controlContainer == null) return;
controlContainer.getProgressBarDrawingInfo(info);
};
mToolbarOverlay = new TopToolbarOverlayCoordinator(mContext, mFrameRequestSupplier,
this, controlContainer, tabProvider, getBrowserControlsManager(),
this, progressInfoCallback, tabProvider, getBrowserControlsManager(),
mAndroidViewShownSupplier, () -> renderHost.getResourceManager());
addSceneOverlay(mToolbarOverlay);
}
......
......@@ -7,8 +7,7 @@ package org.chromium.chrome.browser.compositor.overlays.toolbar;
import android.content.Context;
import android.graphics.RectF;
import androidx.annotation.Nullable;
import org.chromium.base.Callback;
import org.chromium.base.supplier.ObservableSupplier;
import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.R;
......@@ -21,7 +20,7 @@ import org.chromium.chrome.browser.compositor.layouts.components.VirtualView;
import org.chromium.chrome.browser.compositor.layouts.eventfilter.EventFilter;
import org.chromium.chrome.browser.compositor.overlays.SceneOverlay;
import org.chromium.chrome.browser.compositor.scene_layer.SceneOverlayLayer;
import org.chromium.chrome.browser.toolbar.ControlContainer;
import org.chromium.components.browser_ui.widget.ClipDrawableProgressBar;
import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.resources.ResourceManager;
......@@ -43,7 +42,8 @@ public class TopToolbarOverlayCoordinator implements SceneOverlay {
public TopToolbarOverlayCoordinator(Context context,
CompositorModelChangeProcessor.FrameRequestSupplier frameRequestSupplier,
LayoutManager layoutManager, @Nullable ControlContainer controlContainer,
LayoutManager layoutManager,
Callback<ClipDrawableProgressBar.DrawingInfo> progressInfoCallback,
ActivityTabProvider tabSupplier,
BrowserControlsStateProvider browserControlsStateProvider,
ObservableSupplier<Boolean> androidViewShownSupplier,
......@@ -60,8 +60,9 @@ public class TopToolbarOverlayCoordinator implements SceneOverlay {
mChangeProcessor = CompositorModelChangeProcessor.create(
mModel, mSceneLayer, TopToolbarSceneLayer::bind, frameRequestSupplier, true);
mMediator = new TopToolbarOverlayMediator(mModel, context, layoutManager, controlContainer,
tabSupplier, browserControlsStateProvider, androidViewShownSupplier);
mMediator =
new TopToolbarOverlayMediator(mModel, context, layoutManager, progressInfoCallback,
tabSupplier, browserControlsStateProvider, androidViewShownSupplier);
}
/** Clean up this component. */
......
......@@ -7,7 +7,6 @@ package org.chromium.chrome.browser.compositor.overlays.toolbar;
import android.content.Context;
import androidx.annotation.ColorInt;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import org.chromium.base.Callback;
......@@ -23,7 +22,6 @@ import org.chromium.chrome.browser.compositor.layouts.phone.StackLayout;
import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabObserver;
import org.chromium.chrome.browser.toolbar.ControlContainer;
import org.chromium.chrome.browser.toolbar.ToolbarColors;
import org.chromium.components.browser_ui.widget.ClipDrawableProgressBar;
import org.chromium.ui.base.DeviceFormFactor;
......@@ -45,8 +43,8 @@ public class TopToolbarOverlayMediator {
/** The observer of changes to the active layout. */
private final SceneChangeObserver mSceneChangeObserver;
/** A Layout for browser controls. */
private final @Nullable ControlContainer mToolbarContainer;
/** A means of populating draw info for the progress bar. */
private final Callback<ClipDrawableProgressBar.DrawingInfo> mProgressInfoCallback;
/** Provides current tab. */
private final ActivityTabProvider mTabSupplier;
......@@ -76,12 +74,13 @@ public class TopToolbarOverlayMediator {
private boolean mLayoutHasOwnToolbar;
TopToolbarOverlayMediator(PropertyModel model, Context context, LayoutManager layoutManager,
@Nullable ControlContainer controlContainer, ActivityTabProvider tabSupplier,
Callback<ClipDrawableProgressBar.DrawingInfo> progressInfoCallback,
ActivityTabProvider tabSupplier,
BrowserControlsStateProvider browserControlsStateProvider,
ObservableSupplier<Boolean> androidViewShownSupplier) {
mContext = context;
mLayoutManager = layoutManager;
mToolbarContainer = controlContainer;
mProgressInfoCallback = progressInfoCallback;
mTabSupplier = tabSupplier;
mBrowserControlsStateProvider = browserControlsStateProvider;
mAndroidViewShownSupplier = androidViewShownSupplier;
......@@ -205,9 +204,7 @@ public class TopToolbarOverlayMediator {
/** Update the state of the composited progress bar. */
private void updateProgress() {
// Tablets have their own version of a progress "spinner".
if (isTablet() || mToolbarContainer == null) {
return;
}
if (isTablet()) return;
if (mModel.get(TopToolbarOverlayProperties.PROGRESS_BAR_INFO) == null) {
mModel.set(TopToolbarOverlayProperties.PROGRESS_BAR_INFO,
......@@ -216,8 +213,7 @@ public class TopToolbarOverlayMediator {
// Update and set the progress info to trigger an update; the PROGRESS_BAR_INFO
// property skips the object equality check.
mToolbarContainer.getProgressBarDrawingInfo(
mModel.get(TopToolbarOverlayProperties.PROGRESS_BAR_INFO));
mProgressInfoCallback.onResult(mModel.get(TopToolbarOverlayProperties.PROGRESS_BAR_INFO));
mModel.set(TopToolbarOverlayProperties.PROGRESS_BAR_INFO,
mModel.get(TopToolbarOverlayProperties.PROGRESS_BAR_INFO));
}
......
......@@ -28,7 +28,6 @@ import org.chromium.chrome.browser.compositor.layouts.LayoutManager;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.tab.TabObserver;
import org.chromium.chrome.browser.toolbar.ControlContainer;
import org.chromium.ui.modelutil.PropertyModel;
/** Tests for the top toolbar overlay's mediator (composited version of the top toolbar). */
......@@ -43,9 +42,6 @@ public class TopToolbarOverlayMediatorTest {
@Mock
private LayoutManager mLayoutManager;
@Mock
private ControlContainer mControlContainer;
@Mock
private BrowserControlsStateProvider mBrowserControlsProvider;
......@@ -91,9 +87,8 @@ public class TopToolbarOverlayMediatorTest {
.with(TopToolbarOverlayProperties.PROGRESS_BAR_INFO, null)
.build();
mMediator =
new TopToolbarOverlayMediator(mModel, mContext, mLayoutManager, mControlContainer,
mTabSupplier, mBrowserControlsProvider, mAndroidViewShownSupplier);
mMediator = new TopToolbarOverlayMediator(mModel, mContext, mLayoutManager,
(info) -> {}, mTabSupplier, mBrowserControlsProvider, mAndroidViewShownSupplier);
// Ensure the observer is added to the initial tab.
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