Commit 88757c64 authored by Jinsuk Kim's avatar Jinsuk Kim Committed by Commit Bot

Toolbar: HomeButton without HomepageManager dependency

Made HomeButton work without dependency on chrome.browser.homepage
classes. All the deps are now deferred to ToolbarManager.
The dependencies are injected not through ctor but init method
introduced in this CL since the home button and the enclosing view
(ToolbarLayout) are instantiated from xml.

Menu handling logic was moved to HomepageManager to make it test-
friendly.

Also removed a bunch of dead code in HomeButton. Several public setters
(ActivityTabObserver, ThemeColorProvider, StartSurfaceSupplier) were
used by BrowsingModeBottomToolbarCoordinator only (see
https://crrev.com/c/1981099). There's no callsite left any more as
the class was already gone.

Bug: 1127732
Change-Id: I56b8cc200d79a2790f0fd81b515bbe0d41fe5d99
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2459428Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Reviewed-by: default avatarWenyu Fu <wenyufu@chromium.org>
Reviewed-by: default avatarMatthew Jones <mdjones@chromium.org>
Commit-Queue: Jinsuk Kim <jinsukkim@chromium.org>
Cr-Commit-Position: refs/heads/master@{#819659}
parent 3790f1e6
......@@ -4,6 +4,7 @@
package org.chromium.chrome.browser.homepage;
import android.content.Context;
import android.text.TextUtils;
import androidx.annotation.NonNull;
......@@ -12,10 +13,14 @@ import androidx.annotation.VisibleForTesting;
import org.chromium.base.ObserverList;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.homepage.settings.HomepageMetricsEnums.HomepageLocationType;
import org.chromium.chrome.browser.homepage.settings.HomepageSettings;
import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations;
import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
import org.chromium.chrome.browser.settings.SettingsLauncher;
import org.chromium.chrome.browser.settings.SettingsLauncherImpl;
import org.chromium.components.embedder_support.util.UrlConstants;
import org.chromium.components.embedder_support.util.UrlUtilities;
......@@ -40,12 +45,14 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat
private final SharedPreferencesManager mSharedPreferencesManager;
private final ObserverList<HomepageStateListener> mHomepageStateListeners;
private SettingsLauncher mSettingsLauncher;
private HomepageManager() {
mSharedPreferencesManager = SharedPreferencesManager.getInstance();
mHomepageStateListeners = new ObserverList<>();
HomepagePolicyManager.getInstance().addListener(this);
PartnerBrowserCustomizations.getInstance().setPartnerHomepageListener(this);
mSettingsLauncher = new SettingsLauncherImpl();
}
/**
......@@ -73,6 +80,19 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat
mHomepageStateListeners.removeObserver(listener);
}
/**
* Menu click handler on home button.
* @param context {@link Context} used for launching a settings activity.
*/
public void onMenuClick(Context context) {
assert ChromeFeatureList.isInitialized();
if (ChromeFeatureList.isEnabled(ChromeFeatureList.HOMEPAGE_SETTINGS_UI_CONVERSION)) {
mSettingsLauncher.launchSettingsActivity(context, HomepageSettings.class);
} else {
setPrefHomepageEnabled(false);
}
}
/**
* Notify any listeners about a homepage state change.
*/
......@@ -295,4 +315,9 @@ public class HomepageManager implements HomepagePolicyManager.HomepagePolicyStat
public void onHomepageUpdate() {
notifyHomepageUpdated();
}
@VisibleForTesting
public void setSettingsLauncherForTesting(SettingsLauncher launcher) {
mSettingsLauncher = launcher;
}
}
......@@ -53,6 +53,7 @@ import org.chromium.chrome.browser.findinpage.FindToolbarObserver;
import org.chromium.chrome.browser.fullscreen.FullscreenManager;
import org.chromium.chrome.browser.fullscreen.FullscreenOptions;
import org.chromium.chrome.browser.homepage.HomepageManager;
import org.chromium.chrome.browser.homepage.HomepagePolicyManager;
import org.chromium.chrome.browser.identity_disc.IdentityDiscController;
import org.chromium.chrome.browser.ntp.FakeboxDelegate;
import org.chromium.chrome.browser.ntp.IncognitoNewTabPage;
......@@ -683,6 +684,12 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve
identityDiscController.addObserver(
(canShowHint) -> mIdentityDiscStateSupplier.set(canShowHint));
}
HomeButton homeButton = toolbarLayout.getHomeButton();
if (homeButton != null) {
homeButton.init(mHomeButtonVisibilitySupplier,
HomepageManager.getInstance()::onMenuClick,
HomepagePolicyManager::isHomepageManagedByPolicy);
}
return toolbar;
}
......
......@@ -365,10 +365,6 @@ public class ToolbarPhone extends ToolbarLayout implements OnClickListener, TabC
@Override
void destroy() {
if (mHomeButton != null) {
mHomeButton.destroy();
mHomeButton = null;
}
if (mLocationBar != null) {
mLocationBar.destroy();
mLocationBar = null;
......
......@@ -151,10 +151,6 @@ public class ToolbarTablet extends ToolbarLayout
@Override
void destroy() {
if (mHomeButton != null) {
mHomeButton.destroy();
mHomeButton = null;
}
if (mLocationBar != null) {
mLocationBar.destroy();
mLocationBar = null;
......
......@@ -26,9 +26,11 @@ import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.chromium.base.supplier.ObservableSupplierImpl;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.homepage.HomepageManager;
import org.chromium.chrome.browser.homepage.HomepagePolicyManager;
import org.chromium.chrome.browser.homepage.HomepageTestRule;
import org.chromium.chrome.browser.homepage.settings.HomepageSettings;
import org.chromium.chrome.browser.settings.SettingsLauncher;
......@@ -83,8 +85,11 @@ public class HomeButtonTest extends DummyUiActivityTestCase {
mIdHomeButton = View.generateViewId();
mHomeButton = new HomeButton(getActivity(), null);
mHomeButton.init(new ObservableSupplierImpl<Boolean>(),
HomepageManager.getInstance()::onMenuClick,
HomepagePolicyManager::isHomepageManagedByPolicy);
mHomeButton.setId(mIdHomeButton);
mHomeButton.setSettingsLauncherForTests(mSettingsLauncher);
HomepageManager.getInstance().setSettingsLauncherForTesting(mSettingsLauncher);
HomeButton.setSaveContextMenuForTests(true);
content.addView(mHomeButton);
......
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