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