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