Commit 10e63073 authored by sandromaggi's avatar sandromaggi Committed by Commit Bot

[Autofill Assistant] Remove some ChromeActivity dependencies

This CL picks up of crrev/c/2114592. It removes more ChromeActivity
dependencies in AutofillAssistant stack.

Bug: b/151821740
Change-Id: Ifd0b588ba0d337add27f4fd38e322185dbcfe752
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2120396
Commit-Queue: Sandro Maggi <sandromaggi@google.com>
Reviewed-by: default avatarJinsuk Kim <jinsukkim@chromium.org>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Reviewed-by: default avatarMathias Carlen <mcarlen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#754868}
parent ab4cf9c7
......@@ -4,6 +4,7 @@
package org.chromium.chrome.browser.autofill_assistant;
import android.app.Activity;
import android.transition.ChangeBounds;
import android.transition.Fade;
import android.transition.TransitionManager;
......@@ -18,7 +19,6 @@ import androidx.annotation.Nullable;
import org.chromium.base.supplier.ObservableSupplierImpl;
import org.chromium.chrome.autofill_assistant.R;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.autofill_assistant.carousel.AssistantActionsCarouselCoordinator;
import org.chromium.chrome.browser.autofill_assistant.carousel.AssistantCarouselModel;
import org.chromium.chrome.browser.autofill_assistant.details.AssistantDetailsCoordinator;
......@@ -76,13 +76,14 @@ class AssistantBottomBarCoordinator implements AssistantPeekHeightCoordinator.De
@AssistantViewportMode
private int mViewportMode = AssistantViewportMode.NO_RESIZE;
AssistantBottomBarCoordinator(ChromeActivity activity, AssistantModel model,
BottomSheetController controller, TabObscuringHandler tabObscuringHandler) {
AssistantBottomBarCoordinator(Activity activity, AssistantModel model,
BottomSheetController controller,
ApplicationViewportInsetSupplier applicationViewportInsetSupplier,
TabObscuringHandler tabObscuringHandler) {
mModel = model;
mBottomSheetController = controller;
mWindowApplicationInsetSupplier =
activity.getWindowAndroid().getApplicationBottomInsetProvider();
mWindowApplicationInsetSupplier = applicationViewportInsetSupplier;
mWindowApplicationInsetSupplier.addSupplier(mInsetSupplier);
BottomSheetContent currentSheetContent = controller.getCurrentSheetContent();
......
......@@ -39,14 +39,17 @@ class AssistantCoordinator {
mOverlayCoordinator = overlayCoordinator;
} else {
mModel = new AssistantModel();
mOverlayCoordinator =
new AssistantOverlayCoordinator(activity, mModel.getOverlayModel());
mOverlayCoordinator = new AssistantOverlayCoordinator(activity,
activity.getFullscreenManager(), activity.getCompositorViewHolder(),
activity.getScrim(), mModel.getOverlayModel());
}
mBottomBarCoordinator = new AssistantBottomBarCoordinator(
activity, mModel, controller, tabObscuringHandler);
mKeyboardCoordinator =
new AssistantKeyboardCoordinator(activity, mModel, keyboardCoordinatorDelegate);
mBottomBarCoordinator = new AssistantBottomBarCoordinator(activity, mModel, controller,
activity.getWindowAndroid().getApplicationBottomInsetProvider(),
tabObscuringHandler);
mKeyboardCoordinator = new AssistantKeyboardCoordinator(activity,
activity.getWindowAndroid().getKeyboardDelegate(),
activity.getCompositorViewHolder(), mModel, keyboardCoordinatorDelegate);
mModel.setVisible(true);
}
......
......@@ -4,9 +4,10 @@
package org.chromium.chrome.browser.autofill_assistant;
import android.app.Activity;
import android.widget.TextView;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
import org.chromium.ui.KeyboardVisibilityDelegate.KeyboardVisibilityListener;
import org.chromium.ui.base.ActivityKeyboardVisibilityDelegate;
......@@ -14,8 +15,9 @@ import org.chromium.ui.base.ActivityKeyboardVisibilityDelegate;
* Coordinator responsible for enabling or disabling the soft keyboard.
*/
class AssistantKeyboardCoordinator {
private final ChromeActivity mActivity;
private final Activity mActivity;
private final ActivityKeyboardVisibilityDelegate mKeyboardDelegate;
private final CompositorViewHolder mCompositorViewHolder;
private final KeyboardVisibilityListener mKeyboardVisibilityListener =
this::onKeyboardVisibilityChanged;
private boolean mAllowShowingSoftKeyboard = true;
......@@ -25,9 +27,12 @@ class AssistantKeyboardCoordinator {
void onKeyboardVisibilityChanged(boolean visible);
}
AssistantKeyboardCoordinator(ChromeActivity activity, AssistantModel model, Delegate delegate) {
AssistantKeyboardCoordinator(Activity activity,
ActivityKeyboardVisibilityDelegate keyboardVisibilityDelegate,
CompositorViewHolder compositorViewHolder, AssistantModel model, Delegate delegate) {
mActivity = activity;
mKeyboardDelegate = activity.getWindowAndroid().getKeyboardDelegate();
mKeyboardDelegate = keyboardVisibilityDelegate;
mCompositorViewHolder = compositorViewHolder;
mDelegate = delegate;
model.addObserver((source, propertyKey) -> {
......@@ -45,12 +50,12 @@ class AssistantKeyboardCoordinator {
/** Returns whether the keyboard is currently shown. */
boolean isKeyboardShown() {
return mKeyboardDelegate.isKeyboardShowing(mActivity, mActivity.getCompositorViewHolder());
return mKeyboardDelegate.isKeyboardShowing(mActivity, mCompositorViewHolder);
}
/** Hides the keyboard. */
void hideKeyboard() {
mKeyboardDelegate.hideKeyboard(mActivity.getCompositorViewHolder());
mKeyboardDelegate.hideKeyboard(mCompositorViewHolder);
}
/** Hides the keyboard after a delay if the focus is not on a TextView */
......@@ -66,7 +71,7 @@ class AssistantKeyboardCoordinator {
private void allowShowingSoftKeyboard(boolean allowed) {
mAllowShowingSoftKeyboard = allowed;
if (!allowed) {
mKeyboardDelegate.hideKeyboard(mActivity.getCompositorViewHolder());
mKeyboardDelegate.hideKeyboard(mCompositorViewHolder);
}
}
......
......@@ -22,9 +22,10 @@ import org.chromium.chrome.browser.autofill_assistant.metrics.OnBoarding;
import org.chromium.chrome.browser.autofill_assistant.overlay.AssistantOverlayCoordinator;
import org.chromium.chrome.browser.autofill_assistant.overlay.AssistantOverlayModel;
import org.chromium.chrome.browser.autofill_assistant.overlay.AssistantOverlayState;
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
import org.chromium.chrome.browser.customtabs.CustomTabActivity;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.widget.ScrimView;
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController;
import org.chromium.ui.text.NoUnderlineClickableSpan;
import org.chromium.ui.text.SpanApplier;
......@@ -46,8 +47,9 @@ class AssistantOnboardingCoordinator {
private final Map<String, String> mParameters;
private final Context mContext;
private final BottomSheetController mController;
@Nullable
private final Tab mTab;
private final ChromeFullscreenManager mFullscreenManager;
private final CompositorViewHolder mCompositorViewHolder;
private final ScrimView mScrimView;
@Nullable
private AssistantOverlayCoordinator mOverlayCoordinator;
......@@ -59,12 +61,16 @@ class AssistantOnboardingCoordinator {
private boolean mOnboardingShown;
AssistantOnboardingCoordinator(String experimentIds, Map<String, String> parameters,
Context context, BottomSheetController controller, @Nullable Tab tab) {
Context context, BottomSheetController controller,
ChromeFullscreenManager fullscreenManager, CompositorViewHolder compositorViewHolder,
ScrimView scrimView) {
mExperimentIds = experimentIds;
mParameters = parameters;
mContext = context;
mController = controller;
mTab = tab;
mFullscreenManager = fullscreenManager;
mCompositorViewHolder = compositorViewHolder;
mScrimView = scrimView;
}
/**
......@@ -81,13 +87,12 @@ class AssistantOnboardingCoordinator {
AutofillAssistantMetrics.recordOnBoarding(OnBoarding.OB_SHOWN);
mOnboardingShown = true;
if (mTab != null) {
// If there's a tab, cover it with an overlay.
AssistantOverlayModel overlayModel = new AssistantOverlayModel();
mOverlayCoordinator =
new AssistantOverlayCoordinator(((TabImpl) mTab).getActivity(), overlayModel);
overlayModel.set(AssistantOverlayModel.STATE, AssistantOverlayState.FULL);
}
// If there's a tab, cover it with an overlay.
AssistantOverlayModel overlayModel = new AssistantOverlayModel();
mOverlayCoordinator = new AssistantOverlayCoordinator(
mContext, mFullscreenManager, mCompositorViewHolder, mScrimView, overlayModel);
overlayModel.set(AssistantOverlayModel.STATE, AssistantOverlayState.FULL);
mContent = new AssistantBottomSheetContent(mContext);
initContent(callback);
BottomSheetUtils.showContentAndExpand(mController, mContent, mAnimate);
......
......@@ -4,9 +4,11 @@
package org.chromium.chrome.browser.autofill_assistant;
import android.content.Context;
import org.chromium.chrome.autofill_assistant.R;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar;
import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager.SnackbarController;
/**
......@@ -24,8 +26,8 @@ class AssistantSnackbar {
}
/** Shows the snackbar and reports the result to {@code callback}. */
static SnackbarController show(
ChromeActivity activity, int delayMs, String message, Callback callback) {
static SnackbarController show(Context context, SnackbarManager snackbarManager, int delayMs,
String message, Callback callback) {
SnackbarController controller = new SnackbarController() {
@Override
public void onAction(Object actionData) {
......@@ -40,10 +42,10 @@ class AssistantSnackbar {
Snackbar snackBar =
Snackbar.make(message, controller, Snackbar.TYPE_ACTION,
Snackbar.UMA_AUTOFILL_ASSISTANT_STOP_UNDO)
.setAction(activity.getString(R.string.undo), /* actionData= */ null);
.setAction(context.getString(R.string.undo), /* actionData= */ null);
snackBar.setSingleLine(false);
snackBar.setDuration(delayMs);
activity.getSnackbarManager().showSnackbar(snackBar);
snackbarManager.showSnackbar(snackBar);
return controller;
}
}
......@@ -11,6 +11,9 @@ import androidx.annotation.Nullable;
import org.chromium.base.Callback;
import org.chromium.base.ThreadUtils;
import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.widget.ScrimView;
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController;
......@@ -26,15 +29,20 @@ import java.util.Map;
class AutofillAssistantActionHandlerImpl implements AutofillAssistantActionHandler {
private final Context mContext;
private final BottomSheetController mBottomSheetController;
private final ChromeFullscreenManager mFullscreenManager;
private final CompositorViewHolder mCompositorViewHolder;
private final ActivityTabProvider mActivityTabProvider;
private final ScrimView mScrimView;
private final GetCurrentTab mGetCurrentTab;
AutofillAssistantActionHandlerImpl(Context context, BottomSheetController bottomSheetController,
ScrimView scrimView, GetCurrentTab getCurrentTab) {
ChromeFullscreenManager fullscreenManager, CompositorViewHolder compositorViewHolder,
ActivityTabProvider activityTabProvider, ScrimView scrimView) {
mContext = context;
mBottomSheetController = bottomSheetController;
mFullscreenManager = fullscreenManager;
mCompositorViewHolder = compositorViewHolder;
mActivityTabProvider = activityTabProvider;
mScrimView = scrimView;
mGetCurrentTab = getCurrentTab;
}
@Override
......@@ -75,7 +83,8 @@ class AutofillAssistantActionHandlerImpl implements AutofillAssistantActionHandl
String experimentIds, Bundle arguments, Callback<Boolean> callback) {
Map<String, String> parameters = toArgumentMap(arguments);
AssistantOnboardingCoordinator coordinator = new AssistantOnboardingCoordinator(
experimentIds, parameters, mContext, mBottomSheetController, mGetCurrentTab.get());
experimentIds, parameters, mContext, mBottomSheetController, mFullscreenManager,
mCompositorViewHolder, mScrimView);
coordinator.show(accepted -> {
coordinator.hide();
callback.onResult(accepted);
......@@ -98,9 +107,9 @@ class AutofillAssistantActionHandlerImpl implements AutofillAssistantActionHandl
};
if (!AutofillAssistantPreferencesUtil.isAutofillOnboardingAccepted()) {
AssistantOnboardingCoordinator coordinator =
new AssistantOnboardingCoordinator(experimentIds, argumentMap, mContext,
mBottomSheetController, mGetCurrentTab.get());
AssistantOnboardingCoordinator coordinator = new AssistantOnboardingCoordinator(
experimentIds, argumentMap, mContext, mBottomSheetController,
mFullscreenManager, mCompositorViewHolder, mScrimView);
coordinator.show(accepted -> {
if (!accepted) {
coordinator.hide();
......@@ -121,7 +130,7 @@ class AutofillAssistantActionHandlerImpl implements AutofillAssistantActionHandl
@Nullable
private AutofillAssistantClient getOrCreateClient() {
ThreadUtils.assertOnUiThread();
Tab tab = mGetCurrentTab.get();
Tab tab = mActivityTabProvider.get();
if (tab == null || tab.getWebContents() == null) return null;
......
......@@ -10,10 +10,10 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.chromium.base.annotations.UsedByReflection;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.autofill_assistant.metrics.OnBoarding;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.widget.ScrimView;
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController;
import org.chromium.content_public.browser.WebContents;
......@@ -27,24 +27,26 @@ import java.util.Map;
@UsedByReflection("AutofillAssistantModuleEntryProvider.java")
public class AutofillAssistantModuleEntryImpl implements AutofillAssistantModuleEntry {
@Override
public void start(@NonNull Tab tab, @NonNull WebContents webContents, boolean skipOnboarding,
@NonNull String initialUrl, Map<String, String> parameters, String experimentIds,
@Nullable String callerAccount, @Nullable String userName) {
public void start(BottomSheetController bottomSheetController,
ChromeFullscreenManager fullscreenManager, CompositorViewHolder compositorViewHolder,
ScrimView scrimView, Context context, @NonNull WebContents webContents,
boolean skipOnboarding, @NonNull String initialUrl, Map<String, String> parameters,
String experimentIds, @Nullable String callerAccount, @Nullable String userName) {
if (skipOnboarding) {
AutofillAssistantMetrics.recordOnBoarding(OnBoarding.OB_NOT_SHOWN);
AutofillAssistantClient.fromWebContents(tab.getWebContents())
AutofillAssistantClient.fromWebContents(webContents)
.start(initialUrl, parameters, experimentIds, callerAccount, userName,
/* onboardingCoordinator= */ null);
return;
}
ChromeActivity activity = ((TabImpl) tab).getActivity();
AssistantOnboardingCoordinator onboardingCoordinator = new AssistantOnboardingCoordinator(
experimentIds, parameters, activity, activity.getBottomSheetController(), tab);
AssistantOnboardingCoordinator onboardingCoordinator =
new AssistantOnboardingCoordinator(experimentIds, parameters, context,
bottomSheetController, fullscreenManager, compositorViewHolder, scrimView);
onboardingCoordinator.show(accepted -> {
if (!accepted) return;
AutofillAssistantClient.fromWebContents(tab.getWebContents())
AutofillAssistantClient.fromWebContents(webContents)
.start(initialUrl, parameters, experimentIds, callerAccount, userName,
onboardingCoordinator);
});
......@@ -52,9 +54,10 @@ public class AutofillAssistantModuleEntryImpl implements AutofillAssistantModule
@Override
public AutofillAssistantActionHandler createActionHandler(Context context,
BottomSheetController bottomSheetController, ScrimView scrimView,
GetCurrentTab getCurrentTab) {
return new AutofillAssistantActionHandlerImpl(
context, bottomSheetController, scrimView, getCurrentTab);
BottomSheetController bottomSheetController, ChromeFullscreenManager fullscreenManager,
CompositorViewHolder compositorViewHolder, ActivityTabProvider activityTabProvider,
ScrimView scrimView) {
return new AutofillAssistantActionHandlerImpl(context, bottomSheetController,
fullscreenManager, compositorViewHolder, activityTabProvider, scrimView);
}
}
......@@ -236,8 +236,8 @@ class AutofillAssistantUiController {
@CalledByNative
private void showSnackbar(int delayMs, String message) {
mSnackbarController =
AssistantSnackbar.show(mActivity, delayMs, message, this::safeSnackbarResult);
mSnackbarController = AssistantSnackbar.show(mActivity, mActivity.getSnackbarManager(),
delayMs, message, this::safeSnackbarResult);
}
private void dismissSnackbar() {
......
......@@ -4,12 +4,14 @@
package org.chromium.chrome.browser.autofill_assistant.overlay;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.RectF;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.image_fetcher.ImageFetcher;
import org.chromium.chrome.browser.image_fetcher.ImageFetcherConfig;
import org.chromium.chrome.browser.image_fetcher.ImageFetcherFactory;
......@@ -24,28 +26,33 @@ import java.util.List;
* displayed.
*/
public class AssistantOverlayCoordinator {
private final ChromeActivity mActivity;
private final AssistantOverlayModel mModel;
private final AssistantOverlayEventFilter mEventFilter;
private final AssistantOverlayDrawable mDrawable;
private final ChromeFullscreenManager mFullscreenManager;
private final CompositorViewHolder mCompositorViewHolder;
private final ScrimView mScrim;
private final ImageFetcher mImageFetcher;
private boolean mScrimEnabled;
public AssistantOverlayCoordinator(ChromeActivity activity, AssistantOverlayModel model) {
this(activity, model,
public AssistantOverlayCoordinator(Context context, ChromeFullscreenManager fullscreenManager,
CompositorViewHolder compositorViewHolder, ScrimView scrim,
AssistantOverlayModel model) {
this(context, fullscreenManager, compositorViewHolder, scrim, model,
ImageFetcherFactory.createImageFetcher(ImageFetcherConfig.DISK_CACHE_ONLY));
}
public AssistantOverlayCoordinator(
ChromeActivity activity, AssistantOverlayModel model, ImageFetcher imageFetcher) {
mActivity = activity;
public AssistantOverlayCoordinator(Context context, ChromeFullscreenManager fullscreenManager,
CompositorViewHolder compositorViewHolder, ScrimView scrim, AssistantOverlayModel model,
ImageFetcher imageFetcher) {
mModel = model;
mImageFetcher = imageFetcher;
mScrim = mActivity.getScrim();
mEventFilter = new AssistantOverlayEventFilter(
mActivity, mActivity.getFullscreenManager(), mActivity.getCompositorViewHolder());
mDrawable = new AssistantOverlayDrawable(mActivity, mActivity.getFullscreenManager());
mFullscreenManager = fullscreenManager;
mCompositorViewHolder = compositorViewHolder;
mScrim = scrim;
mEventFilter =
new AssistantOverlayEventFilter(context, fullscreenManager, compositorViewHolder);
mDrawable = new AssistantOverlayDrawable(context, fullscreenManager);
// Listen for changes in the state.
// TODO(crbug.com/806868): Bind model to view through a ViewBinder instead.
......@@ -82,7 +89,7 @@ public class AssistantOverlayCoordinator {
} else if (AssistantOverlayModel.OVERLAY_IMAGE == propertyKey) {
AssistantOverlayImage image = model.get(AssistantOverlayModel.OVERLAY_IMAGE);
if (image != null && !TextUtils.isEmpty(image.mImageUrl)) {
DisplayMetrics displayMetrics = mActivity.getResources().getDisplayMetrics();
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
// TODO(b/143517837) Merge autofill assistant image fetcher UMA names.
mImageFetcher.fetchImage(image.mImageUrl,
ImageFetcher.ASSISTANT_DETAILS_UMA_CLIENT_NAME, result -> {
......@@ -141,7 +148,7 @@ public class AssistantOverlayCoordinator {
if (enabled == mScrimEnabled) return;
if (enabled) {
ScrimParams params = new ScrimParams(mActivity.getCompositorViewHolder(),
ScrimParams params = new ScrimParams(mCompositorViewHolder,
/* showInFrontOfAnchorView= */ true,
/* affectsStatusBar = */ false,
/* topMargin= */ 0,
......
......@@ -147,7 +147,7 @@ public class AssistantCollectUserDataCoordinator {
paymentMethodSection, shippingAddressSection, termsSection, termsAsCheckboxSection,
infoSection, prependedSections, appendedSections,
genericUserInterfaceContainerPrepended, genericUserInterfaceContainerAppended,
DIVIDER_TAG, activity);
DIVIDER_TAG, mActivity);
AssistantCollectUserDataBinder binder = new AssistantCollectUserDataBinder();
PropertyModelChangeProcessor.create(model, mViewHolder, binder);
......
......@@ -85,8 +85,10 @@ public class AssistantOnboardingCoordinatorTest {
}
private AssistantOnboardingCoordinator createCoordinator(Tab tab) {
AssistantOnboardingCoordinator coordinator = new AssistantOnboardingCoordinator(
"", new HashMap<String, String>(), mActivity, mBottomSheetController, mTab);
AssistantOnboardingCoordinator coordinator =
new AssistantOnboardingCoordinator("", new HashMap<String, String>(), mActivity,
mBottomSheetController, mActivity.getFullscreenManager(),
mActivity.getCompositorViewHolder(), mActivity.getScrim());
coordinator.disableAnimationForTesting();
return coordinator;
}
......@@ -172,8 +174,9 @@ public class AssistantOnboardingCoordinatorTest {
HashMap<String, String> parameters = new HashMap();
parameters.put("INTENT", "RENT_CAR");
AssistantOnboardingCoordinator coordinator = new AssistantOnboardingCoordinator(
"", parameters, mActivity, mBottomSheetController, mTab);
AssistantOnboardingCoordinator coordinator = new AssistantOnboardingCoordinator("",
parameters, mActivity, mBottomSheetController, mActivity.getFullscreenManager(),
mActivity.getCompositorViewHolder(), mActivity.getScrim());
coordinator.disableAnimationForTesting();
showOnboardingAndWait(coordinator, mCallback);
......@@ -194,8 +197,9 @@ public class AssistantOnboardingCoordinatorTest {
HashMap<String, String> parameters = new HashMap();
parameters.put("INTENT", "BUY_MOVIE_TICKET");
AssistantOnboardingCoordinator coordinator = new AssistantOnboardingCoordinator(
"4363482", parameters, mActivity, mBottomSheetController, mTab);
AssistantOnboardingCoordinator coordinator = new AssistantOnboardingCoordinator("4363482",
parameters, mActivity, mBottomSheetController, mActivity.getFullscreenManager(),
mActivity.getCompositorViewHolder(), mActivity.getScrim());
coordinator.disableAnimationForTesting();
showOnboardingAndWait(coordinator, mCallback);
......@@ -215,8 +219,9 @@ public class AssistantOnboardingCoordinatorTest {
AutofillAssistantPreferencesUtil.setInitialPreferences(true);
HashMap<String, String> parameters = new HashMap();
AssistantOnboardingCoordinator coordinator = new AssistantOnboardingCoordinator(
"", parameters, mActivity, mBottomSheetController, mTab);
AssistantOnboardingCoordinator coordinator = new AssistantOnboardingCoordinator("",
parameters, mActivity, mBottomSheetController, mActivity.getFullscreenManager(),
mActivity.getCompositorViewHolder(), mActivity.getScrim());
coordinator.disableAnimationForTesting();
showOnboardingAndWait(coordinator, mCallback);
......
......@@ -70,8 +70,8 @@ public class AutofillAssistantDirectActionHandlerTest {
mModuleEntryProvider.setCannotInstall();
mHandler = new AutofillAssistantDirectActionHandler(mActivity, mBottomSheetController,
mActivity.getScrim(), mActivity.getTabModelSelector()::getCurrentTab,
mModuleEntryProvider);
mActivity.getFullscreenManager(), mActivity.getCompositorViewHolder(),
mActivity.getActivityTabProvider(), mActivity.getScrim(), mModuleEntryProvider);
mSharedPreferencesManager.removeKey(
ChromePreferenceKeys.AUTOFILL_ASSISTANT_ONBOARDING_ACCEPTED);
......
......@@ -35,6 +35,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.autofill_assistant.overlay.AssistantOverlayCoordinator;
import org.chromium.chrome.browser.autofill_assistant.overlay.AssistantOverlayImage;
import org.chromium.chrome.browser.autofill_assistant.overlay.AssistantOverlayModel;
......@@ -85,9 +86,12 @@ public class AutofillAssistantOverlayUiTest {
/** Creates a coordinator for use in UI tests with a custom overlay image. */
private AssistantOverlayCoordinator createCoordinator(
AssistantOverlayModel model, @Nullable Bitmap overlayImage) throws ExecutionException {
ChromeActivity activity = mTestRule.getActivity();
return runOnUiThreadBlocking(
()
-> new AssistantOverlayCoordinator(mTestRule.getActivity(), model,
-> new AssistantOverlayCoordinator(activity,
activity.getFullscreenManager(), activity.getCompositorViewHolder(),
activity.getScrim(), model,
new AutofillAssistantUiTestUtil.MockImageFetcher(
overlayImage, null)));
}
......
......@@ -10,6 +10,9 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.chromium.base.Callback;
import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.widget.ScrimView;
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController;
......@@ -36,9 +39,12 @@ class TestingAutofillAssistantModuleEntryProvider extends AutofillAssistantModul
*/
static class MockAutofillAssistantActionHandler extends AutofillAssistantActionHandlerImpl {
public MockAutofillAssistantActionHandler(Context context,
BottomSheetController bottomSheetController, ScrimView scrimView,
GetCurrentTab getCurrentTab) {
super(context, bottomSheetController, scrimView, getCurrentTab);
BottomSheetController bottomSheetController,
ChromeFullscreenManager fullscreenManager,
CompositorViewHolder compositorViewHolder, ActivityTabProvider activityTabProvider,
ScrimView scrimView) {
super(context, bottomSheetController, fullscreenManager, compositorViewHolder,
activityTabProvider, scrimView);
}
@Override
......@@ -57,16 +63,21 @@ class TestingAutofillAssistantModuleEntryProvider extends AutofillAssistantModul
/** Mock module entry. */
static class MockAutofillAssistantModuleEntry implements AutofillAssistantModuleEntry {
@Override
public void start(@NonNull Tab tab, @NonNull WebContents webContents,
boolean skipOnboarding, String initialUrl, Map<String, String> parameters,
String experimentIds, @Nullable String callerAccount, @Nullable String userName) {}
public void start(BottomSheetController bottomSheetController,
ChromeFullscreenManager fullscreenManager,
CompositorViewHolder compositorViewHolder, ScrimView scrimView, Context context,
@NonNull WebContents webContents, boolean skipOnboarding,
@NonNull String initialUrl, Map<String, String> parameters, String experimentIds,
@Nullable String callerAccount, @Nullable String userName) {}
@Override
public AutofillAssistantActionHandler createActionHandler(Context context,
BottomSheetController bottomSheetController, ScrimView scrimView,
GetCurrentTab getCurrentTab) {
return new MockAutofillAssistantActionHandler(
context, bottomSheetController, scrimView, getCurrentTab);
BottomSheetController bottomSheetController,
ChromeFullscreenManager fullscreenManager,
CompositorViewHolder compositorViewHolder, ActivityTabProvider activityTabProvider,
ScrimView scrimView) {
return new MockAutofillAssistantActionHandler(context, bottomSheetController,
fullscreenManager, compositorViewHolder, activityTabProvider, scrimView);
}
}
......
......@@ -11,10 +11,13 @@ import androidx.annotation.Nullable;
import org.chromium.base.Callback;
import org.chromium.base.ThreadUtils;
import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
import org.chromium.chrome.browser.directactions.DirectActionHandler;
import org.chromium.chrome.browser.directactions.DirectActionReporter;
import org.chromium.chrome.browser.directactions.DirectActionReporter.Definition;
import org.chromium.chrome.browser.directactions.DirectActionReporter.Type;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.widget.ScrimView;
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController;
......@@ -34,20 +37,25 @@ public class AutofillAssistantDirectActionHandler implements DirectActionHandler
private final Context mContext;
private final BottomSheetController mBottomSheetController;
private final ChromeFullscreenManager mFullscreenManager;
private final CompositorViewHolder mCompositorViewHolder;
private final ScrimView mScrimView;
private final GetCurrentTab mGetCurrentTab;
private final ActivityTabProvider mActivityTabProvider;
private final AutofillAssistantModuleEntryProvider mModuleEntryProvider;
@Nullable
private AutofillAssistantActionHandler mDelegate;
AutofillAssistantDirectActionHandler(Context context,
BottomSheetController bottomSheetController, ScrimView scrimView,
GetCurrentTab getCurrentTab, AutofillAssistantModuleEntryProvider moduleEntryProvider) {
BottomSheetController bottomSheetController, ChromeFullscreenManager fullscreenManager,
CompositorViewHolder compositorViewHolder, ActivityTabProvider activityTabProvider,
ScrimView scrimView, AutofillAssistantModuleEntryProvider moduleEntryProvider) {
mContext = context;
mBottomSheetController = bottomSheetController;
mScrimView = scrimView;
mGetCurrentTab = getCurrentTab;
mFullscreenManager = fullscreenManager;
mCompositorViewHolder = compositorViewHolder;
mActivityTabProvider = activityTabProvider;
mModuleEntryProvider = moduleEntryProvider;
}
......@@ -201,7 +209,7 @@ public class AutofillAssistantDirectActionHandler implements DirectActionHandler
return;
}
Tab tab = mGetCurrentTab.get();
Tab tab = mActivityTabProvider.get();
if (tab == null) {
// TODO(b/134741524): Allow DFM loading UI to work with no tabs.
callback.onResult(null);
......@@ -219,7 +227,7 @@ public class AutofillAssistantDirectActionHandler implements DirectActionHandler
@Nullable AutofillAssistantModuleEntry entry) {
if (entry == null) return null;
return entry.createActionHandler(
mContext, mBottomSheetController, mScrimView, mGetCurrentTab);
return entry.createActionHandler(mContext, mBottomSheetController, mFullscreenManager,
mCompositorViewHolder, mActivityTabProvider, mScrimView);
}
}
......@@ -15,12 +15,13 @@ import org.chromium.base.Callback;
import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.autofill_assistant.metrics.DropOutReason;
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
import org.chromium.chrome.browser.directactions.DirectActionHandler;
import org.chromium.chrome.browser.flags.ActivityType;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.metrics.UmaSessionStats;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.widget.ScrimView;
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController;
......@@ -102,7 +103,9 @@ public class AutofillAssistantFacade {
return;
}
moduleEntry.start(tab, tab.getWebContents(),
moduleEntry.start(activity.getBottomSheetController(),
activity.getFullscreenManager(), activity.getCompositorViewHolder(),
activity.getScrim(), activity, tab.getWebContents(),
!AutofillAssistantPreferencesUtil.getShowOnboarding(),
arguments.getInitialUrl(), arguments.getParameters(),
arguments.getExperimentIds(), arguments.getCallerAccount(),
......@@ -129,12 +132,12 @@ public class AutofillAssistantFacade {
* can also return null if autofill assistant is not available for some other reasons.
*/
public static DirectActionHandler createDirectActionHandler(Context context,
BottomSheetController bottomSheetController, ScrimView scrimView,
TabModelSelector tabModelSelector) {
// TODO(b/134740534): Consider restricting signature of createDirectActionHandler() to get
// only getCurrentTab instead of a TabModelSelector.
return new AutofillAssistantDirectActionHandler(context, bottomSheetController, scrimView,
tabModelSelector::getCurrentTab, AutofillAssistantModuleEntryProvider.INSTANCE);
BottomSheetController bottomSheetController, ChromeFullscreenManager fullscreenManager,
CompositorViewHolder compositorViewHolder, ActivityTabProvider activityTabProvider,
ScrimView scrimView) {
return new AutofillAssistantDirectActionHandler(context, bottomSheetController,
fullscreenManager, compositorViewHolder, activityTabProvider, scrimView,
AutofillAssistantModuleEntryProvider.INSTANCE);
}
/** Provides the callback with a tab that has a web contents, waits if necessary. */
......
......@@ -9,7 +9,9 @@ import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.widget.ScrimView;
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController;
import org.chromium.components.module_installer.builder.ModuleInterface;
......@@ -30,19 +32,24 @@ interface AutofillAssistantModuleEntry {
* a single autostartable script for the tab's current URL, runs that script until the end and
* disappears.
*/
void start(@NonNull Tab tab, @NonNull WebContents webContents, boolean skipOnboarding,
@NonNull String initialUrl, Map<String, String> parameters, String experimentIds,
@Nullable String callerAccount, @Nullable String userName);
void start(BottomSheetController bottomSheetController,
ChromeFullscreenManager fullscreenManager, CompositorViewHolder compositorViewHolder,
ScrimView scrimView, Context context, @NonNull WebContents webContents,
boolean skipOnboarding, @NonNull String initialUrl, Map<String, String> parameters,
String experimentIds, @Nullable String callerAccount, @Nullable String userName);
/**
* Returns a {@link AutofillAssistantActionHandler} instance tied to the activity owning the
* given bottom sheet, and scrim view.
*
* @param context activity context
* @param bottomSheetController bottom sheet controller instance of the activity
* @param fullscreenManager fullscreen manager of the activity
* @param compositorViewHolder compositor view holder of the activity
* @param activityTabProvider activity tab provider
* @param scrimView scrim view of the activity
* @param getCurrentTab a way to get the activity's current tab, if there is any
*/
AutofillAssistantActionHandler createActionHandler(Context context,
BottomSheetController bottomSheetController, ScrimView scrimView,
GetCurrentTab getCurrentTab);
BottomSheetController bottomSheetController, ChromeFullscreenManager fullscreenManager,
CompositorViewHolder compositorViewHolder, ActivityTabProvider activityTabProvider,
ScrimView scrimView);
}
// 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.autofill_assistant;
import androidx.annotation.Nullable;
import org.chromium.chrome.browser.tab.Tab;
/** Return the activity's current tab or {@code null}. */
interface GetCurrentTab {
@Nullable
Tab get();
}
......@@ -12,5 +12,4 @@ public_autofill_assistant_java_sources = [
"//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantModuleEntry.java",
"//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantModuleEntryProvider.java",
"//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPreferencesUtil.java",
"//chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/GetCurrentTab.java",
]
......@@ -12,10 +12,13 @@ import android.os.CancellationSignal;
import androidx.annotation.Nullable;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ActivityTabProvider;
import org.chromium.chrome.browser.AppHooks;
import org.chromium.chrome.browser.autofill_assistant.AutofillAssistantFacade;
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
import org.chromium.chrome.browser.findinpage.FindToolbarManager;
import org.chromium.chrome.browser.flags.ActivityType;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.lifecycle.Destroyable;
import org.chromium.chrome.browser.lifecycle.NativeInitObserver;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
......@@ -34,18 +37,20 @@ import java.util.function.Consumer;
*/
@TargetApi(29)
public class DirectActionInitializer implements NativeInitObserver, Destroyable {
private Context mContext;
private final Context mContext;
private final BottomSheetController mBottomSheetController;
private final ChromeFullscreenManager mFullscreenManager;
private final CompositorViewHolder mCompositorViewHolder;
private final ActivityTabProvider mActivityTabProvider;
private final TabModelSelector mTabModelSelector;
private final ScrimView mScrim;
@ActivityType
private int mActivityType;
private MenuOrKeyboardActionController mMenuOrKeyboardActionController;
private Runnable mGoBackAction;
private TabModelSelector mTabModelSelector;
@Nullable
private FindToolbarManager mFindToolbarManager;
@Nullable
private BottomSheetController mBottomSheetController;
private ScrimView mScrim;
private boolean mDirectActionsRegistered;
@Nullable
private DirectActionCoordinator mCoordinator;
......@@ -61,12 +66,17 @@ public class DirectActionInitializer implements NativeInitObserver, Destroyable
* @param tabModelSelector The activity's {@link TabModelSelector}
* @param findToolbarManager Manager to use for the "find_in_page" action, if it exists
* @param bottomSheetController Controller for the activity's bottom sheet, if it exists
* @param fullscreenManager fullscreen manager of the activity
* @param compositorViewHolder compositor view holder of the activity
* @param activityTabProvider activity tab provider
* @param scrim The activity's scrim view, if it exists
*/
public DirectActionInitializer(Context context, @ActivityType int activityType,
MenuOrKeyboardActionController actionController, Runnable goBackAction,
TabModelSelector tabModelSelector, @Nullable FindToolbarManager findToolbarManager,
@Nullable BottomSheetController bottomSheetController, ScrimView scrim) {
@Nullable BottomSheetController bottomSheetController,
ChromeFullscreenManager fullscreenManager, CompositorViewHolder compositorViewHolder,
ActivityTabProvider activityTabProvider, ScrimView scrim) {
mContext = context;
mActivityType = activityType;
mMenuOrKeyboardActionController = actionController;
......@@ -74,6 +84,9 @@ public class DirectActionInitializer implements NativeInitObserver, Destroyable
mTabModelSelector = tabModelSelector;
mFindToolbarManager = findToolbarManager;
mBottomSheetController = bottomSheetController;
mFullscreenManager = fullscreenManager;
mCompositorViewHolder = compositorViewHolder;
mActivityTabProvider = activityTabProvider;
mScrim = scrim;
mDirectActionsRegistered = false;
......@@ -124,12 +137,17 @@ public class DirectActionInitializer implements NativeInitObserver, Destroyable
* @param tabModelSelector The activity's {@link TabModelSelector}
* @param findToolbarManager Manager to use for the "find_in_page" action, if it exists
* @param bottomSheetController Controller for the activity's bottom sheet, if it exists
* @param fullscreenManager fullscreen manager of the activity
* @param compositorViewHolder compositor view holder of the activity
* @param activityTabProvider activity tab provider
* @param scrim The activity's scrim view, if it exists
*/
void registerCommonChromeActions(Context context, @ActivityType int activityType,
private void registerCommonChromeActions(Context context, @ActivityType int activityType,
MenuOrKeyboardActionController actionController, Runnable goBackAction,
TabModelSelector tabModelSelector, @Nullable FindToolbarManager findToolbarManager,
@Nullable BottomSheetController bottomSheetController, ScrimView scrim) {
@Nullable BottomSheetController bottomSheetController,
ChromeFullscreenManager fullscreenManager, CompositorViewHolder compositorViewHolder,
ActivityTabProvider activityTabProvider, ScrimView scrim) {
mCoordinator.register(new GoBackDirectActionHandler(goBackAction));
mCoordinator.register(
new FindInPageDirectActionHandler(tabModelSelector, findToolbarManager));
......@@ -138,8 +156,9 @@ public class DirectActionInitializer implements NativeInitObserver, Destroyable
.whitelistActions(R.id.forward_menu_id, R.id.reload_menu_id);
if (AutofillAssistantFacade.areDirectActionsAvailable(activityType)) {
DirectActionHandler handler = AutofillAssistantFacade.createDirectActionHandler(
context, bottomSheetController, scrim, tabModelSelector);
DirectActionHandler handler = AutofillAssistantFacade.createDirectActionHandler(context,
bottomSheetController, fullscreenManager, compositorViewHolder,
activityTabProvider, scrim);
if (handler != null) mCoordinator.register(handler);
}
}
......@@ -194,7 +213,7 @@ public class DirectActionInitializer implements NativeInitObserver, Destroyable
AutofillAssistantFacade.areDirectActionsAvailable(mActivityType)
? mBottomSheetController
: null,
mScrim);
mFullscreenManager, mCompositorViewHolder, mActivityTabProvider, mScrim);
if (mActivityType == ActivityType.TABBED) {
registerTabManipulationActions(mMenuOrKeyboardActionController, mTabModelSelector);
......
......@@ -583,7 +583,9 @@ public class RootUiCoordinator
TabModelSelector tabModelSelector = mActivity.getTabModelSelector();
mDirectActionInitializer = new DirectActionInitializer(mActivity, activityType, mActivity,
mActivity::onBackPressed, tabModelSelector, mFindToolbarManager,
mActivity.getBottomSheetController(), mScrimView);
mActivity.getBottomSheetController(), mActivity.getFullscreenManager(),
mActivity.getCompositorViewHolder(), mActivity.getActivityTabProvider(),
mScrimView);
mActivity.getLifecycleDispatcher().register(mDirectActionInitializer);
}
......
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