Commit 083976a7 authored by Jinsuk Kim's avatar Jinsuk Kim Committed by Commit Bot

Toolbar: No more HomepageManager dependencies

HomepageManager is referenced in toolbar/ for mostly its static util
methods. This CL injects the method references of them instead to
the classes from ToolbarManager.

Bug: 1127732
Change-Id: I2b863ede270ee17ad992c88f2ce02fa23f969fbc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2519349
Commit-Queue: Jinsuk Kim <jinsukkim@chromium.org>
Reviewed-by: default avatarFilip Gorski <fgorski@chromium.org>
Cr-Commit-Position: refs/heads/master@{#825247}
parent 0f6438ff
......@@ -116,6 +116,7 @@ import org.chromium.chrome.features.start_surface.StartSurfaceConfiguration;
import org.chromium.chrome.features.start_surface.StartSurfaceState;
import org.chromium.components.browser_ui.styles.ChromeColors;
import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator;
import org.chromium.components.embedder_support.util.UrlConstants;
import org.chromium.components.embedder_support.util.UrlUtilities;
import org.chromium.components.search_engines.TemplateUrl;
import org.chromium.components.search_engines.TemplateUrlService;
......@@ -156,7 +157,8 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve
new ObservableSupplierImpl<>();
private final ObservableSupplier<Boolean> mOmniboxFocusStateSupplier;
private BottomControlsCoordinator mBottomControlsCoordinator;
private ObservableSupplierImpl<BottomControlsCoordinator> mBottomControlsCoordinatorSupplier =
new ObservableSupplierImpl<>();
private TabModelSelector mTabModelSelector;
private TabModelSelectorObserver mTabModelSelectorObserver;
private ObservableSupplier<TabModelSelector> mTabModelSelectorSupplier;
......@@ -362,10 +364,11 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve
mCustomTabThemeColorProvider = new SettableThemeColorProvider(/* context= */ mActivity);
mActivityTabProvider = tabProvider;
mToolbarTabController = new ToolbarTabControllerImpl(mLocationBarModel::getTab,
// clang-format off
mToolbarTabController = new ToolbarTabControllerImpl(mLocationBarModel::getTab,
() -> mShowStartSurfaceSupplier != null && mShowStartSurfaceSupplier.get(),
profileSupplier, () -> mBottomControlsCoordinator, this::updateButtonStatus);
profileSupplier, mBottomControlsCoordinatorSupplier, ToolbarManager::homepageUrl,
this::updateButtonStatus);
// clang-format on
BrowserStateBrowserControlsVisibilityDelegate controlsVisibilityDelegate =
......@@ -920,21 +923,21 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve
* Enable the bottom controls.
*/
public void enableBottomControls() {
mBottomControlsCoordinator = new BottomControlsCoordinator(mBrowserControlsSizer,
// clang-format off
mBottomControlsCoordinatorSupplier.set(new BottomControlsCoordinator(mBrowserControlsSizer,
mFullscreenManager, mActivity.findViewById(R.id.bottom_controls_stub),
mActivityTabProvider, mAppThemeColorProvider, mShareDelegateSupplier,
mMenuButtonCoordinator.getMenuButtonHelperSupplier(), mShowStartSurfaceSupplier,
mToolbarTabController::openHomepage,
(reason)
-> setUrlBarFocus(true, reason),
mScrimCoordinator, mOmniboxFocusStateSupplier);
mMenuButtonCoordinator.getMenuButtonHelperSupplier(),
mToolbarTabController::openHomepage, (reason) -> setUrlBarFocus(true, reason),
mScrimCoordinator, mOmniboxFocusStateSupplier));
// clang-format on
}
/**
* @return The coordinator for the bottom controls if it exists.
*/
public BottomControlsCoordinator getBottomControlsCoordinator() {
return mBottomControlsCoordinator;
return mBottomControlsCoordinatorSupplier.get();
}
/**
......@@ -995,13 +998,13 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve
// init directly.
mMenuButtonCoordinator.onNativeInitialized();
if (mBottomControlsCoordinator != null) {
BottomControlsCoordinator bcc = mBottomControlsCoordinatorSupplier.get();
if (bcc != null) {
Runnable closeAllTabsAction = () -> {
mTabModelSelector.getModel(mIncognitoStateProvider.isIncognitoSelected())
.closeAllTabs();
};
mBottomControlsCoordinator.initializeWithNative(mActivity,
mCompositorViewHolder.getResourceManager(),
bcc.initializeWithNative(mActivity, mCompositorViewHolder.getResourceManager(),
mCompositorViewHolder.getLayoutManager(), tabSwitcherClickHandler,
newTabClickHandler, mWindowAndroid, mTabCountProvider, mIncognitoStateProvider,
mActivity.findViewById(R.id.control_container), closeAllTabsAction);
......@@ -1033,10 +1036,10 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve
UserEducationHelper userEducationHelper = new UserEducationHelper(
mActivity, mHandler, TrackerFactory::getTrackerForProfile);
View homeButton = mControlContainer.findViewById(R.id.home_button);
mHomeButtonCoordinator =
new HomeButtonCoordinator(mActivity, homeButton, mActivityTabProvider,
userEducationHelper, mIncognitoStateProvider::isIncognitoSelected,
mIntentMetadataOneshotSupplier, mPromoShownOneshotSupplier);
mHomeButtonCoordinator = new HomeButtonCoordinator(mActivity, homeButton,
mActivityTabProvider, userEducationHelper,
mIncognitoStateProvider::isIncognitoSelected, mIntentMetadataOneshotSupplier,
mPromoShownOneshotSupplier, HomepageManager::isHomepageNonNtp);
ToggleTabStackButton toggleTabStackButton =
mControlContainer.findViewById(R.id.tab_switcher_button);
mToggleTabStackButtonCoordinator = new ToggleTabStackButtonCoordinator(mActivity,
......@@ -1135,9 +1138,9 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve
HomepageManager.getInstance().removeListener(mHomepageStateListener);
if (mBottomControlsCoordinator != null) {
mBottomControlsCoordinator.destroy();
mBottomControlsCoordinator = null;
if (mBottomControlsCoordinatorSupplier.get() != null) {
mBottomControlsCoordinatorSupplier.get().destroy();
mBottomControlsCoordinatorSupplier = null;
}
mToolbar.removeUrlExpansionObserver(mStatusBarColorController);
......@@ -1218,6 +1221,13 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve
mToolbar.onAccessibilityStatusChanged(enabled);
}
@VisibleForTesting
static String homepageUrl() {
String homePageUrl = HomepageManager.getHomepageUri();
if (TextUtils.isEmpty(homePageUrl)) homePageUrl = UrlConstants.NTP_URL;
return homePageUrl;
}
private void registerTemplateUrlObserver() {
final TemplateUrlService templateUrlService = TemplateUrlServiceFactory.get();
assert mTemplateUrlObserver == null;
......
......@@ -4,14 +4,11 @@
package org.chromium.chrome.browser.toolbar;
import android.text.TextUtils;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.homepage.HomepageManager;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.toolbar.bottom.BottomControlsCoordinator;
......@@ -31,6 +28,7 @@ public class ToolbarTabControllerImpl implements ToolbarTabController {
private final Supplier<Boolean> mOverrideHomePageSupplier;
private final Supplier<Profile> mProfileSupplier;
private final Supplier<BottomControlsCoordinator> mBottomControlsCoordinatorSupplier;
private final Supplier<String> mHomepageUrlSupplier;
private final Runnable mOnSuccessRunnable;
/**
......@@ -39,6 +37,7 @@ public class ToolbarTabControllerImpl implements ToolbarTabController {
* @param overrideHomePageSupplier Supplier that returns true if it overrides the default
* homepage behavior.
* @param profileSupplier Supplier for the current profile.
* @param homepageUrlSupplier Supplier for the homepage URL.
* @param onSuccessRunnable Runnable that is invoked when the active tab is asked to perform the
* corresponding ToolbarTabController action; it is not invoked if the tab cannot
* perform the action or for openHompage.
......@@ -46,11 +45,12 @@ public class ToolbarTabControllerImpl implements ToolbarTabController {
public ToolbarTabControllerImpl(Supplier<Tab> tabSupplier,
Supplier<Boolean> overrideHomePageSupplier, Supplier<Profile> profileSupplier,
Supplier<BottomControlsCoordinator> bottomControlsCoordinatorSupplier,
Runnable onSuccessRunnable) {
Supplier<String> homepageUrlSupplier, Runnable onSuccessRunnable) {
mTabSupplier = tabSupplier;
mOverrideHomePageSupplier = overrideHomePageSupplier;
mProfileSupplier = profileSupplier;
mBottomControlsCoordinatorSupplier = bottomControlsCoordinatorSupplier;
mHomepageUrlSupplier = homepageUrlSupplier;
mOnSuccessRunnable = onSuccessRunnable;
}
......@@ -114,10 +114,7 @@ public class ToolbarTabControllerImpl implements ToolbarTabController {
}
Tab currentTab = mTabSupplier.get();
if (currentTab == null) return;
String homePageUrl = HomepageManager.getHomepageUri();
if (TextUtils.isEmpty(homePageUrl)) {
homePageUrl = UrlConstants.NTP_URL;
}
String homePageUrl = mHomepageUrlSupplier.get();
boolean is_chrome_internal =
homePageUrl.startsWith(ContentUrlConstants.ABOUT_URL_SHORT_PREFIX)
|| homePageUrl.startsWith(UrlConstants.CHROME_URL_SHORT_PREFIX)
......
......@@ -68,8 +68,6 @@ public class BottomControlsCoordinator {
* @param themeColorProvider The {@link ThemeColorProvider} for the bottom toolbar.
* @param shareDelegateSupplier The supplier for the {@link ShareDelegate} the bottom controls
* should use to share content.
* @param showStartSurfaceCallable The action that opens the start surface, returning true if
* the start surface is shown.
* @param openHomepageAction The action that opens the homepage.
* @param setUrlBarFocusAction The function that sets Url bar focus. The first argument is
* whether the bar should be focused, and the second is the OmniboxFocusReason.
......@@ -82,8 +80,8 @@ public class BottomControlsCoordinator {
ThemeColorProvider themeColorProvider,
ObservableSupplier<ShareDelegate> shareDelegateSupplier,
ObservableSupplier<AppMenuButtonHelper> menuButtonHelperSupplier,
Supplier<Boolean> showStartSurfaceCallable, Runnable openHomepageAction,
Callback<Integer> setUrlBarFocusAction, ScrimCoordinator scrimCoordinator,
Runnable openHomepageAction, Callback<Integer> setUrlBarFocusAction,
ScrimCoordinator scrimCoordinator,
ObservableSupplier<Boolean> omniboxFocusStateSupplier) {
final ScrollingBottomViewResourceFrameLayout root =
(ScrollingBottomViewResourceFrameLayout) stub.inflate();
......
......@@ -11,11 +11,11 @@ import androidx.annotation.VisibleForTesting;
import org.chromium.base.supplier.BooleanSupplier;
import org.chromium.base.supplier.OneshotSupplier;
import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.feed.shared.FeedFeatures;
import org.chromium.chrome.browser.flags.FeatureParamUtils;
import org.chromium.chrome.browser.homepage.HomepageManager;
import org.chromium.chrome.browser.intent.IntentMetadata;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.toolbar.HomeButton;
......@@ -43,6 +43,7 @@ public class HomeButtonCoordinator {
private final ActivityTabProvider.ActivityTabTabObserver mPageLoadObserver;
private final OneshotSupplier<IntentMetadata> mIntentMetadataOneshotSupplier;
private final OneshotSupplier<Boolean> mPromoShownOneshotSupplier;
private final Supplier<Boolean> mIsHomepageNonNtpSupplier;
/**
* @param context The Android context used for various view operations.
......@@ -52,18 +53,21 @@ public class HomeButtonCoordinator {
* @param isIncognitoSupplier Supplier for whether the current tab is incognito.
* @param intentMetadataOneshotSupplier Potentially delayed information about launching intent.
* @param promoShownOneshotSupplier Potentially delayed information about if a promo was shown.
* @param isHomepageNonNtpSupplier Supplier for whether the current homepage is not NTP.
*/
public HomeButtonCoordinator(Context context, View homeButton,
ActivityTabProvider activityTabProvider, UserEducationHelper userEducationHelper,
BooleanSupplier isIncognitoSupplier,
OneshotSupplier<IntentMetadata> intentMetadataOneshotSupplier,
OneshotSupplier<Boolean> promoShownOneshotSupplier) {
OneshotSupplier<Boolean> promoShownOneshotSupplier,
Supplier<Boolean> isHomepageNonNtpSupplier) {
mContext = context;
mHomeButton = homeButton;
mUserEducationHelper = userEducationHelper;
mIsIncognitoSupplier = isIncognitoSupplier;
mIntentMetadataOneshotSupplier = intentMetadataOneshotSupplier;
mPromoShownOneshotSupplier = promoShownOneshotSupplier;
mIsHomepageNonNtpSupplier = isHomepageNonNtpSupplier;
mPageLoadObserver = new ActivityTabProvider.ActivityTabTabObserver(activityTabProvider) {
@Override
public void onPageLoadFinished(Tab tab, String url) {
......@@ -87,7 +91,7 @@ public class HomeButtonCoordinator {
if (mHomeButton == null || !mHomeButton.isShown()) return;
if (mIsIncognitoSupplier.getAsBoolean()) return;
if (UrlUtilities.isNTPUrl(url)) return;
if (HomepageManager.isHomepageNonNtp()) return;
if (mIsHomepageNonNtpSupplier.get()) return;
if (mPromoShownOneshotSupplier.get() == null || mPromoShownOneshotSupplier.get()) return;
IntentMetadata intentMetadata = mIntentMetadataOneshotSupplier.get();
......
......@@ -87,9 +87,9 @@ public class ToolbarTabControllerImplTest {
doReturn(mTab).when(mTabSupplier).get();
doReturn(false).when(mOverrideHomePageSupplier).get();
TrackerFactory.setTrackerForTests(mTracker);
mToolbarTabController =
new ToolbarTabControllerImpl(mTabSupplier, mOverrideHomePageSupplier,
mProfileSupplier, mBottomControlsCoordinatorSupplier, mRunnable);
mToolbarTabController = new ToolbarTabControllerImpl(mTabSupplier,
mOverrideHomePageSupplier, mProfileSupplier, mBottomControlsCoordinatorSupplier,
ToolbarManager::homepageUrl, mRunnable);
}
@Test
......
......@@ -139,8 +139,11 @@ public class HomeButtonCoordinatorTest {
}
private HomeButtonCoordinator newHomeButtonCoordinator(View view) {
// clang-format off
return new HomeButtonCoordinator(mContext, view, mActivityTabProvider, mUserEducationHelper,
() -> mIsIncognito, mIntentMetadataOneshotSupplier, mPromoShownOneshotSupplier);
() -> mIsIncognito, mIntentMetadataOneshotSupplier, mPromoShownOneshotSupplier,
HomepageManager::isHomepageNonNtp);
// clang-format on
}
private void verifyIphNotShown() {
......
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