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