Commit d39cac25 authored by Brandon Wylie's avatar Brandon Wylie Committed by Commit Bot

[ToolbarMVC] Inject ActivityLifecycleDispatcher to LocationBar

Eliminate #onNativeLibraryReady from the LocationBar interface. Prevent
Toolbar classes from poking at LocationBar to do native initialization.

Change-Id: I8c3439f8021309a23fe48eec8d7647015d2570dd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2473344
Commit-Queue: Brandon Wylie <wylieb@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Reviewed-by: default avatarPatrick Noland <pnoland@chromium.org>
Reviewed-by: default avatarwho/bttk <bttk@chromium.org>
Cr-Commit-Position: refs/heads/master@{#822729}
parent 6a08b611
...@@ -631,7 +631,6 @@ public class CustomTabToolbar extends ToolbarLayout implements View.OnLongClickL ...@@ -631,7 +631,6 @@ public class CustomTabToolbar extends ToolbarLayout implements View.OnLongClickL
mLocationBarDataProvider = locationBarDataProvider; mLocationBarDataProvider = locationBarDataProvider;
} }
@Override
public void onNativeLibraryReady() { public void onNativeLibraryReady() {
mSecurityButton.setOnClickListener(v -> { mSecurityButton.setOnClickListener(v -> {
Tab currentTab = mLocationBarDataProvider.getTab(); Tab currentTab = mLocationBarDataProvider.getTab();
......
...@@ -21,9 +21,6 @@ public interface LocationBar extends Destroyable { ...@@ -21,9 +21,6 @@ public interface LocationBar extends Destroyable {
/** Handle all necessary tasks that can be delayed until initialization completes. */ /** Handle all necessary tasks that can be delayed until initialization completes. */
default void onDeferredStartup() {} default void onDeferredStartup() {}
/** Handles native dependent initialization for this class. */
void onNativeLibraryReady();
/** Triggered when the current tab has changed to a {@link NewTabPage}. */ /** Triggered when the current tab has changed to a {@link NewTabPage}. */
default void onTabLoadingNTP(NewTabPage ntp) {} default void onTabLoadingNTP(NewTabPage ntp) {}
......
...@@ -14,7 +14,9 @@ import org.chromium.base.supplier.Supplier; ...@@ -14,7 +14,9 @@ import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.browser.ActivityTabProvider; import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.WindowDelegate; import org.chromium.chrome.browser.WindowDelegate;
import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior; import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.lifecycle.Destroyable; import org.chromium.chrome.browser.lifecycle.Destroyable;
import org.chromium.chrome.browser.lifecycle.NativeInitObserver;
import org.chromium.chrome.browser.ntp.FakeboxDelegate; import org.chromium.chrome.browser.ntp.FakeboxDelegate;
import org.chromium.chrome.browser.ntp.NewTabPage; import org.chromium.chrome.browser.ntp.NewTabPage;
import org.chromium.chrome.browser.omnibox.voice.VoiceRecognitionHandler; import org.chromium.chrome.browser.omnibox.voice.VoiceRecognitionHandler;
...@@ -39,13 +41,14 @@ import java.util.List; ...@@ -39,13 +41,14 @@ import java.util.List;
* <p>The coordinator creates and owns elements within this component. * <p>The coordinator creates and owns elements within this component.
*/ */
public final class LocationBarCoordinator public final class LocationBarCoordinator
implements LocationBar, FakeboxDelegate, UrlBar.UrlBarDelegate { implements LocationBar, FakeboxDelegate, UrlBar.UrlBarDelegate, NativeInitObserver {
/** Identifies coordinators with methods specific to a device type. */ /** Identifies coordinators with methods specific to a device type. */
public interface SubCoordinator extends Destroyable {} public interface SubCoordinator extends Destroyable {}
private LocationBarLayout mLocationBarLayout; private LocationBarLayout mLocationBarLayout;
@Nullable @Nullable
private SubCoordinator mSubCoordinator; private SubCoordinator mSubCoordinator;
private ActivityLifecycleDispatcher mActivityLifecycleDispatcher;
/** /**
* Creates {@link LocationBarCoordinator} and its subcoordinator: {@link * Creates {@link LocationBarCoordinator} and its subcoordinator: {@link
...@@ -68,6 +71,7 @@ public final class LocationBarCoordinator ...@@ -68,6 +71,7 @@ public final class LocationBarCoordinator
* @param shareDelegateSupplier A supplier for {@link ShareDelegate} object. * @param shareDelegateSupplier A supplier for {@link ShareDelegate} object.
* @param incognitoStateProvider An {@link IncognitoStateProvider} to access the current * @param incognitoStateProvider An {@link IncognitoStateProvider} to access the current
* incognito state. * incognito state.
* @param activityLifecycleDispatcher Allows observation of the activity state.
* @throws IllegalArgumentException if the view is neither {@link LocationBarPhone} nor {@link * @throws IllegalArgumentException if the view is neither {@link LocationBarPhone} nor {@link
* LocationBarTablet}. * LocationBarTablet}.
*/ */
...@@ -78,7 +82,8 @@ public final class LocationBarCoordinator ...@@ -78,7 +82,8 @@ public final class LocationBarCoordinator
WindowAndroid windowAndroid, ActivityTabProvider activityTabProvider, WindowAndroid windowAndroid, ActivityTabProvider activityTabProvider,
Supplier<ModalDialogManager> modalDialogManagerSupplier, Supplier<ModalDialogManager> modalDialogManagerSupplier,
Supplier<ShareDelegate> shareDelegateSupplier, Supplier<ShareDelegate> shareDelegateSupplier,
IncognitoStateProvider incognitoStateProvider) { IncognitoStateProvider incognitoStateProvider,
ActivityLifecycleDispatcher activityLifecycleDispatcher) {
mLocationBarLayout = (LocationBarLayout) locationBarLayout; mLocationBarLayout = (LocationBarLayout) locationBarLayout;
if (locationBarLayout instanceof LocationBarPhone) { if (locationBarLayout instanceof LocationBarPhone) {
...@@ -97,10 +102,18 @@ public final class LocationBarCoordinator ...@@ -97,10 +102,18 @@ public final class LocationBarCoordinator
mLocationBarLayout.setDefaultTextEditActionModeCallback(actionModeCallback); mLocationBarLayout.setDefaultTextEditActionModeCallback(actionModeCallback);
mLocationBarLayout.initializeControls(windowDelegate, windowAndroid, activityTabProvider, mLocationBarLayout.initializeControls(windowDelegate, windowAndroid, activityTabProvider,
modalDialogManagerSupplier, shareDelegateSupplier, incognitoStateProvider); modalDialogManagerSupplier, shareDelegateSupplier, incognitoStateProvider);
mActivityLifecycleDispatcher = activityLifecycleDispatcher;
mActivityLifecycleDispatcher.register(this);
} }
@Override @Override
public void destroy() { public void destroy() {
if (mActivityLifecycleDispatcher != null) {
mActivityLifecycleDispatcher.unregister(this);
mActivityLifecycleDispatcher = null;
}
if (mSubCoordinator != null) { if (mSubCoordinator != null) {
mSubCoordinator.destroy(); mSubCoordinator.destroy();
mSubCoordinator = null; mSubCoordinator = null;
...@@ -112,13 +125,13 @@ public final class LocationBarCoordinator ...@@ -112,13 +125,13 @@ public final class LocationBarCoordinator
} }
@Override @Override
public void onDeferredStartup() { public void onFinishNativeInitialization() {
mLocationBarLayout.onDeferredStartup(); mLocationBarLayout.onFinishNativeInitialization();
} }
@Override @Override
public void onNativeLibraryReady() { public void onDeferredStartup() {
mLocationBarLayout.onNativeLibraryReady(); mLocationBarLayout.onDeferredStartup();
} }
@Override @Override
......
...@@ -46,7 +46,6 @@ import org.chromium.chrome.browser.WindowDelegate; ...@@ -46,7 +46,6 @@ import org.chromium.chrome.browser.WindowDelegate;
import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior; import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.browser.gsa.GSAState; import org.chromium.chrome.browser.gsa.GSAState;
import org.chromium.chrome.browser.lifecycle.Destroyable;
import org.chromium.chrome.browser.locale.LocaleManager; import org.chromium.chrome.browser.locale.LocaleManager;
import org.chromium.chrome.browser.native_page.NativePageFactory; import org.chromium.chrome.browser.native_page.NativePageFactory;
import org.chromium.chrome.browser.ntp.FakeboxDelegate; import org.chromium.chrome.browser.ntp.FakeboxDelegate;
...@@ -98,10 +97,10 @@ import java.util.List; ...@@ -98,10 +97,10 @@ import java.util.List;
* This class represents the location bar where the user types in URLs and * This class represents the location bar where the user types in URLs and
* search terms. * search terms.
*/ */
public class LocationBarLayout extends FrameLayout public class LocationBarLayout
implements OnClickListener, AutocompleteDelegate, FakeboxDelegate, extends FrameLayout implements OnClickListener, AutocompleteDelegate, FakeboxDelegate,
VoiceRecognitionHandler.Delegate, AssistantVoiceSearchService.Observer, VoiceRecognitionHandler.Delegate,
Destroyable, UrlBarDelegate { AssistantVoiceSearchService.Observer, UrlBarDelegate {
private static final int KEYBOARD_HIDE_DELAY_MS = 150; private static final int KEYBOARD_HIDE_DELAY_MS = 150;
private static final int KEYBOARD_MODE_CHANGE_DELAY_MS = 300; private static final int KEYBOARD_MODE_CHANGE_DELAY_MS = 300;
...@@ -245,8 +244,10 @@ public class LocationBarLayout extends FrameLayout ...@@ -245,8 +244,10 @@ public class LocationBarLayout extends FrameLayout
mVoiceRecognitionHandler = new VoiceRecognitionHandler(this); mVoiceRecognitionHandler = new VoiceRecognitionHandler(this);
} }
@Override /**
public void destroy() { * Called when activity is being destroyed.
*/
void destroy() {
mUrlFocusChangeListeners.clear(); mUrlFocusChangeListeners.clear();
if (mAutocompleteCoordinator != null) { if (mAutocompleteCoordinator != null) {
...@@ -356,10 +357,7 @@ public class LocationBarLayout extends FrameLayout ...@@ -356,10 +357,7 @@ public class LocationBarLayout extends FrameLayout
mAutocompleteCoordinator.prefetchZeroSuggestResults(); mAutocompleteCoordinator.prefetchZeroSuggestResults();
} }
/** public void onFinishNativeInitialization() {
* Handles native dependent initialization for this class.
*/
public void onNativeLibraryReady() {
TemplateUrlServiceFactory.get().runWhenLoaded(this::registerTemplateUrlObserver); TemplateUrlServiceFactory.get().runWhenLoaded(this::registerTemplateUrlObserver);
mNativeInitialized = true; mNativeInitialized = true;
......
...@@ -45,7 +45,8 @@ class LocationBarPhone extends LocationBarLayout { ...@@ -45,7 +45,8 @@ class LocationBarPhone extends LocationBarLayout {
mUrlBar = findViewById(R.id.url_bar); mUrlBar = findViewById(R.id.url_bar);
mStatusView = findViewById(R.id.location_bar_status); mStatusView = findViewById(R.id.location_bar_status);
// Assign the first visible view here only if it hasn't been set by the DSE icon experiment. // Assign the first visible view here only if it hasn't been set by the DSE icon experiment.
// See onNativeLibrary ready for when this variable is set for the DSE icon case. // See onFinishNativeInitialization ready for when this variable is set for the DSE icon
// case.
mFirstVisibleFocusedView = mFirstVisibleFocusedView =
mFirstVisibleFocusedView == null ? mUrlBar : mFirstVisibleFocusedView; mFirstVisibleFocusedView == null ? mUrlBar : mFirstVisibleFocusedView;
......
...@@ -252,7 +252,7 @@ public class SearchActivity extends AsyncInitializationActivity ...@@ -252,7 +252,7 @@ public class SearchActivity extends AsyncInitializationActivity
mTab.loadUrl(new LoadUrlParams(ContentUrlConstants.ABOUT_BLANK_DISPLAY_URL)); mTab.loadUrl(new LoadUrlParams(ContentUrlConstants.ABOUT_BLANK_DISPLAY_URL));
mSearchBoxDataProvider.onNativeLibraryReady(mTab); mSearchBoxDataProvider.onNativeLibraryReady(mTab);
mSearchBox.onNativeLibraryReady(); mSearchBox.onFinishNativeInitialization();
mProfileSupplier.set(Profile.fromWebContents(webContents)); mProfileSupplier.set(Profile.fromWebContents(webContents));
// Force the user to choose a search engine if they have to. // Force the user to choose a search engine if they have to.
......
...@@ -72,8 +72,8 @@ public class SearchActivityLocationBarLayout extends LocationBarLayout { ...@@ -72,8 +72,8 @@ public class SearchActivityLocationBarLayout extends LocationBarLayout {
} }
@Override @Override
public void onNativeLibraryReady() { public void onFinishNativeInitialization() {
super.onNativeLibraryReady(); super.onFinishNativeInitialization();
mNativeLibraryReady = true; mNativeLibraryReady = true;
mPendingSearchPromoDecision = LocaleManager.getInstance().needToCheckForSearchEnginePromo(); mPendingSearchPromoDecision = LocaleManager.getInstance().needToCheckForSearchEnginePromo();
......
...@@ -57,6 +57,7 @@ import org.chromium.chrome.browser.homepage.HomepageManager; ...@@ -57,6 +57,7 @@ import org.chromium.chrome.browser.homepage.HomepageManager;
import org.chromium.chrome.browser.homepage.HomepagePolicyManager; import org.chromium.chrome.browser.homepage.HomepagePolicyManager;
import org.chromium.chrome.browser.identity_disc.IdentityDiscController; import org.chromium.chrome.browser.identity_disc.IdentityDiscController;
import org.chromium.chrome.browser.intent.IntentMetadata; import org.chromium.chrome.browser.intent.IntentMetadata;
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.night_mode.NightModeStateProvider; import org.chromium.chrome.browser.night_mode.NightModeStateProvider;
import org.chromium.chrome.browser.ntp.FakeboxDelegate; import org.chromium.chrome.browser.ntp.FakeboxDelegate;
import org.chromium.chrome.browser.ntp.IncognitoNewTabPage; import org.chromium.chrome.browser.ntp.IncognitoNewTabPage;
...@@ -270,6 +271,7 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve ...@@ -270,6 +271,7 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve
* @param nightModeStateProvider Provides the state of night mode. * @param nightModeStateProvider Provides the state of night mode.
* @param statusBarColorController The {@link StatusBarColorController} for the app. * @param statusBarColorController The {@link StatusBarColorController} for the app.
* @param appMenuDelegate Allows interacting with the app menu. * @param appMenuDelegate Allows interacting with the app menu.
* @param activityLifecycleDispatcher Allows monitoring the activity lifecycle,
*/ */
public ToolbarManager(AppCompatActivity activity, BrowserControlsSizer controlsSizer, public ToolbarManager(AppCompatActivity activity, BrowserControlsSizer controlsSizer,
FullscreenManager fullscreenManager, ToolbarControlContainer controlContainer, FullscreenManager fullscreenManager, ToolbarControlContainer controlContainer,
...@@ -293,7 +295,8 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve ...@@ -293,7 +295,8 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve
Supplier<Boolean> isInOverviewModeSupplier, boolean isCustomTab, Supplier<Boolean> isInOverviewModeSupplier, boolean isCustomTab,
Supplier<ModalDialogManager> modalDialogManagerSupplier, Supplier<ModalDialogManager> modalDialogManagerSupplier,
NightModeStateProvider nightModeStateProvider, NightModeStateProvider nightModeStateProvider,
StatusBarColorController statusBarColorController, AppMenuDelegate appMenuDelegate) { StatusBarColorController statusBarColorController, AppMenuDelegate appMenuDelegate,
ActivityLifecycleDispatcher activityLifecycleDispatcher) {
TraceEvent.begin("ToolbarManager.ToolbarManager"); TraceEvent.begin("ToolbarManager.ToolbarManager");
mActivity = activity; mActivity = activity;
mWindowAndroid = windowAndroid; mWindowAndroid = windowAndroid;
...@@ -403,8 +406,9 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve ...@@ -403,8 +406,9 @@ public class ToolbarManager implements UrlFocusChangeListener, ThemeColorObserve
LocationBarCoordinator locationBarCoordinator = new LocationBarCoordinator( LocationBarCoordinator locationBarCoordinator = new LocationBarCoordinator(
mActivity.findViewById(R.id.location_bar), profileSupplier, mLocationBarModel, mActivity.findViewById(R.id.location_bar), profileSupplier, mLocationBarModel,
mActionModeController.getActionModeCallback(), mActionModeController.getActionModeCallback(),
new WindowDelegate(mActivity.getWindow()), mWindowAndroid, mActivityTabProvider, new WindowDelegate(mActivity.getWindow()), windowAndroid, mActivityTabProvider,
modalDialogManagerSupplier, mShareDelegateSupplier, mIncognitoStateProvider); modalDialogManagerSupplier, shareDelegateSupplier, mIncognitoStateProvider,
activityLifecycleDispatcher);
toolbarLayout.setLocationBarCoordinator(locationBarCoordinator); toolbarLayout.setLocationBarCoordinator(locationBarCoordinator);
mLocationBar = locationBarCoordinator; mLocationBar = locationBarCoordinator;
} }
......
...@@ -366,10 +366,6 @@ public class ToolbarPhone extends ToolbarLayout ...@@ -366,10 +366,6 @@ public class ToolbarPhone extends ToolbarLayout
@Override @Override
void destroy() { void destroy() {
if (mLocationBar != null) {
mLocationBar.destroy();
mLocationBar = null;
}
cancelAnimations(); cancelAnimations();
super.destroy(); super.destroy();
} }
...@@ -451,8 +447,6 @@ public class ToolbarPhone extends ToolbarLayout ...@@ -451,8 +447,6 @@ public class ToolbarPhone extends ToolbarLayout
protected void onNativeLibraryReady() { protected void onNativeLibraryReady() {
super.onNativeLibraryReady(); super.onNativeLibraryReady();
getLocationBar().onNativeLibraryReady();
enableTabSwitchingResources(); enableTabSwitchingResources();
if (mHomeButton != null) { if (mHomeButton != null) {
......
...@@ -150,15 +150,6 @@ public class ToolbarTablet extends ToolbarLayout ...@@ -150,15 +150,6 @@ public class ToolbarTablet extends ToolbarLayout
mLocationBar = locationBarCoordinator; mLocationBar = locationBarCoordinator;
} }
@Override
void destroy() {
if (mLocationBar != null) {
mLocationBar.destroy();
mLocationBar = null;
}
super.destroy();
}
/** /**
* Sets up key listeners after native initialization is complete, so that we can invoke * Sets up key listeners after native initialization is complete, so that we can invoke
* native functions. * native functions.
...@@ -166,7 +157,6 @@ public class ToolbarTablet extends ToolbarLayout ...@@ -166,7 +157,6 @@ public class ToolbarTablet extends ToolbarLayout
@Override @Override
public void onNativeLibraryReady() { public void onNativeLibraryReady() {
super.onNativeLibraryReady(); super.onNativeLibraryReady();
mLocationBar.onNativeLibraryReady();
mHomeButton.setOnClickListener(this); mHomeButton.setOnClickListener(this);
mHomeButton.setOnKeyListener(new KeyboardNavigationListener() { mHomeButton.setOnKeyListener(new KeyboardNavigationListener() {
@Override @Override
......
...@@ -594,7 +594,7 @@ public class RootUiCoordinator ...@@ -594,7 +594,7 @@ public class RootUiCoordinator
mActivity.getWindowAndroid(), mActivity::isInOverviewMode, mActivity.getWindowAndroid(), mActivity::isInOverviewMode,
mActivity.isCustomTab(), mActivity.getModalDialogManagerSupplier(), mActivity.isCustomTab(), mActivity.getModalDialogManagerSupplier(),
mActivity.getNightModeStateProvider(), mActivity.getStatusBarColorController(), mActivity.getNightModeStateProvider(), mActivity.getStatusBarColorController(),
/* appMenuDelegate= */ mActivity); /* appMenuDelegate= */ mActivity, mActivity.getLifecycleDispatcher());
if (!mActivity.supportsAppMenu()) { if (!mActivity.supportsAppMenu()) {
mToolbarManager.getToolbar().disableMenuButton(); mToolbarManager.getToolbar().disableMenuButton();
} }
......
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