Commit e5940bb6 authored by Peter Kotwicz's avatar Peter Kotwicz Committed by Commit Bot

[Android CustomTabs] Introduce BaseCustomTabRootUiCoordinator

This CL introduces a CCT/WebAPK specific RootUICoordinator -
BaseCustomTabRootUiCoordinator

BUG=1020324, 1015627

Change-Id: I5ec73d189cc0016cbfc73734fd27ba962d9d1fb9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1938833
Commit-Queue: Peter Kotwicz <pkotwicz@chromium.org>
Reviewed-by: default avatarPeter Conn <peconn@chromium.org>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Cr-Commit-Position: refs/heads/master@{#719860}
parent 43fc40ae
...@@ -363,6 +363,7 @@ chrome_java_sources = [ ...@@ -363,6 +363,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/crash/PureJavaExceptionHandler.java", "java/src/org/chromium/chrome/browser/crash/PureJavaExceptionHandler.java",
"java/src/org/chromium/chrome/browser/crash/PureJavaExceptionReporter.java", "java/src/org/chromium/chrome/browser/crash/PureJavaExceptionReporter.java",
"java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java", "java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java",
"java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java",
"java/src/org/chromium/chrome/browser/customtabs/ClientManager.java", "java/src/org/chromium/chrome/browser/customtabs/ClientManager.java",
"java/src/org/chromium/chrome/browser/customtabs/CloseButtonNavigator.java", "java/src/org/chromium/chrome/browser/customtabs/CloseButtonNavigator.java",
"java/src/org/chromium/chrome/browser/customtabs/CustomButtonParams.java", "java/src/org/chromium/chrome/browser/customtabs/CustomButtonParams.java",
......
...@@ -389,7 +389,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent> ...@@ -389,7 +389,7 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
// to the RootUiCoordinator, passing the activity is an easy way to get access to a // to the RootUiCoordinator, passing the activity is an easy way to get access to a
// number of objects that will ultimately be owned by the RootUiCoordinator. This is not // number of objects that will ultimately be owned by the RootUiCoordinator. This is not
// a recommended pattern. // a recommended pattern.
return new RootUiCoordinator(this, null, null, getShareDelegateSupplier()); return new RootUiCoordinator(this, null, getShareDelegateSupplier());
} }
private C createComponent() { private C createComponent() {
......
...@@ -1584,8 +1584,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements ScreenshotMo ...@@ -1584,8 +1584,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements ScreenshotMo
@Override @Override
protected RootUiCoordinator createRootUiCoordinator() { protected RootUiCoordinator createRootUiCoordinator() {
return new TabbedRootUiCoordinator(this, null, this::onOmniboxFocusChanged, return new TabbedRootUiCoordinator(
mIntentWithEffect, getShareDelegateSupplier()); this, this::onOmniboxFocusChanged, mIntentWithEffect, getShareDelegateSupplier());
} }
@Override @Override
......
...@@ -48,12 +48,8 @@ public abstract class BaseCustomTabActivity<C extends ChromeActivityComponent> ...@@ -48,12 +48,8 @@ public abstract class BaseCustomTabActivity<C extends ChromeActivityComponent>
@Override @Override
protected RootUiCoordinator createRootUiCoordinator() { protected RootUiCoordinator createRootUiCoordinator() {
// TODO(https://crbug.com/1020324): Move this logic into a CustomTabRootUICoordinator that return new BaseCustomTabRootUiCoordinator(
// can synchronously orchestrate the creation of child coordinators. this, getShareDelegateSupplier(), mToolbarCoordinator, mNavigationController);
return new RootUiCoordinator(this, (toolbarManager) -> {
mToolbarCoordinator.onToolbarInitialized(toolbarManager);
mNavigationController.onToolbarInitialized(toolbarManager);
}, null, getShareDelegateSupplier());
} }
/** /**
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.customtabs;
import org.chromium.base.ObservableSupplier;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.customtabs.content.CustomTabActivityNavigationController;
import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarCoordinator;
import org.chromium.chrome.browser.share.ShareDelegate;
import org.chromium.chrome.browser.ui.RootUiCoordinator;
/**
* A {@link RootUiCoordinator} variant that controls UI for {@link BaseCustomTabActivity}.
*/
public class BaseCustomTabRootUiCoordinator extends RootUiCoordinator {
private final CustomTabToolbarCoordinator mToolbarCoordinator;
private final CustomTabActivityNavigationController mNavigationController;
public BaseCustomTabRootUiCoordinator(ChromeActivity activity,
ObservableSupplier<ShareDelegate> shareDelegateSupplier,
CustomTabToolbarCoordinator customTabToolbarCoordinator,
CustomTabActivityNavigationController customTabNavigationController) {
super(activity, null, shareDelegateSupplier);
mToolbarCoordinator = customTabToolbarCoordinator;
mNavigationController = customTabNavigationController;
}
@Override
protected void initializeToolbar() {
super.initializeToolbar();
mToolbarCoordinator.onToolbarInitialized(mToolbarManager);
mNavigationController.onToolbarInitialized(mToolbarManager);
}
}
...@@ -28,7 +28,6 @@ import org.chromium.chrome.browser.share.ShareDelegate; ...@@ -28,7 +28,6 @@ import org.chromium.chrome.browser.share.ShareDelegate;
import org.chromium.chrome.browser.signin.SigninPromoUtil; import org.chromium.chrome.browser.signin.SigninPromoUtil;
import org.chromium.chrome.browser.status_indicator.StatusIndicatorCoordinator; import org.chromium.chrome.browser.status_indicator.StatusIndicatorCoordinator;
import org.chromium.chrome.browser.toolbar.ToolbarButtonInProductHelpController; import org.chromium.chrome.browser.toolbar.ToolbarButtonInProductHelpController;
import org.chromium.chrome.browser.toolbar.ToolbarManager;
import org.chromium.chrome.browser.ui.ImmersiveModeManager; import org.chromium.chrome.browser.ui.ImmersiveModeManager;
import org.chromium.chrome.browser.ui.RootUiCoordinator; import org.chromium.chrome.browser.ui.RootUiCoordinator;
import org.chromium.chrome.browser.ui.appmenu.AppMenuHandler; import org.chromium.chrome.browser.ui.appmenu.AppMenuHandler;
...@@ -54,19 +53,15 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator implements Native ...@@ -54,19 +53,15 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator implements Native
/** /**
* Construct a new TabbedRootUiCoordinator. * Construct a new TabbedRootUiCoordinator.
* @param activity The activity whose UI the coordinator is responsible for. * @param activity The activity whose UI the coordinator is responsible for.
* @param toolbarManagerCallback callback to invoke when the
* ToolbarManager is created.
* @param onOmniboxFocusChangedListener callback to invoke when Omnibox focus * @param onOmniboxFocusChangedListener callback to invoke when Omnibox focus
* changes. * changes.
* @param intentWithEffect Whether or not {@code activity} was launched with an * @param intentWithEffect Whether or not {@code activity} was launched with an
* intent to open a single tab. * intent to open a single tab.
*/ */
public TabbedRootUiCoordinator(ChromeActivity activity, public TabbedRootUiCoordinator(ChromeActivity activity,
Callback<ToolbarManager> toolbarManagerCallback,
Callback<Boolean> onOmniboxFocusChangedListener, boolean intentWithEffect, Callback<Boolean> onOmniboxFocusChangedListener, boolean intentWithEffect,
ObservableSupplier<ShareDelegate> shareDelegateSupplier) { ObservableSupplier<ShareDelegate> shareDelegateSupplier) {
super(activity, toolbarManagerCallback, onOmniboxFocusChangedListener, super(activity, onOmniboxFocusChangedListener, shareDelegateSupplier);
shareDelegateSupplier);
mIntentWithEffect = intentWithEffect; mIntentWithEffect = intentWithEffect;
} }
......
...@@ -73,9 +73,7 @@ public class RootUiCoordinator ...@@ -73,9 +73,7 @@ public class RootUiCoordinator
private TabThemeColorProvider mTabThemeColorProvider; private TabThemeColorProvider mTabThemeColorProvider;
@Nullable @Nullable
private Callback<Boolean> mOnOmniboxFocusChangedListener; private Callback<Boolean> mOnOmniboxFocusChangedListener;
private ToolbarManager mToolbarManager; protected ToolbarManager mToolbarManager;
@Nullable
private Callback<ToolbarManager> mToolbarManagerCallback;
private ModalDialogManagerObserver mModalDialogManagerObserver; private ModalDialogManagerObserver mModalDialogManagerObserver;
private VrModeObserver mVrModeObserver; private VrModeObserver mVrModeObserver;
...@@ -84,18 +82,14 @@ public class RootUiCoordinator ...@@ -84,18 +82,14 @@ public class RootUiCoordinator
* Create a new {@link RootUiCoordinator} for the given activity. * Create a new {@link RootUiCoordinator} for the given activity.
* @param activity The containing {@link ChromeActivity}. TODO(https://crbug.com/931496): * @param activity The containing {@link ChromeActivity}. TODO(https://crbug.com/931496):
* Remove this in favor of passing in direct dependencies. * Remove this in favor of passing in direct dependencies.
* @param toolbarManagerCallback Callback<ToolbarManager> callback to invoke when the
* ToolbarManager is created.
* @param onOmniboxFocusChangedListener Callback<Boolean> callback to invoke when Omnibox focus * @param onOmniboxFocusChangedListener Callback<Boolean> callback to invoke when Omnibox focus
* changes. * changes.
*/ */
public RootUiCoordinator(ChromeActivity activity, public RootUiCoordinator(ChromeActivity activity,
@Nullable Callback<ToolbarManager> toolbarManagerCallback,
@Nullable Callback<Boolean> onOmniboxFocusChangedListener, @Nullable Callback<Boolean> onOmniboxFocusChangedListener,
ObservableSupplier<ShareDelegate> shareDelegateSupplier) { ObservableSupplier<ShareDelegate> shareDelegateSupplier) {
mActivity = activity; mActivity = activity;
mOnOmniboxFocusChangedListener = onOmniboxFocusChangedListener; mOnOmniboxFocusChangedListener = onOmniboxFocusChangedListener;
mToolbarManagerCallback = toolbarManagerCallback;
mActivity.getLifecycleDispatcher().register(this); mActivity.getLifecycleDispatcher().register(this);
mMenuOrKeyboardActionController = mActivity.getMenuOrKeyboardActionController(); mMenuOrKeyboardActionController = mActivity.getMenuOrKeyboardActionController();
...@@ -306,10 +300,6 @@ public class RootUiCoordinator ...@@ -306,10 +300,6 @@ public class RootUiCoordinator
if (!mActivity.supportsAppMenu()) { if (!mActivity.supportsAppMenu()) {
mToolbarManager.getToolbar().disableMenuButton(); mToolbarManager.getToolbar().disableMenuButton();
} }
if (mToolbarManagerCallback != null) {
mToolbarManagerCallback.onResult(mToolbarManager);
}
} }
} }
......
...@@ -164,7 +164,7 @@ public class ShareIntentTest { ...@@ -164,7 +164,7 @@ public class ShareIntentTest {
}); });
RootUiCoordinator rootUiCoordinator = TestThreadUtils.runOnUiThreadBlocking(() -> { RootUiCoordinator rootUiCoordinator = TestThreadUtils.runOnUiThreadBlocking(() -> {
return new RootUiCoordinator( return new RootUiCoordinator(
mockActivity, null, null, mockActivity.getShareDelegateSupplier()); mockActivity, null, mockActivity.getShareDelegateSupplier());
}); });
ShareHelper.setLastShareComponentName( ShareHelper.setLastShareComponentName(
new ComponentName("test.package", "test.activity"), null); new ComponentName("test.package", "test.activity"), null);
......
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