Commit b600d648 authored by Rahul Goyal's avatar Rahul Goyal Committed by Chromium LUCI CQ

[Autofill Assistant] Extract base onboarding coordinator class.

The goal is to add a second implementation further downstream.
This CL is a refactoring only and should not have user-facing changes.

Bug: b/174445633
Change-Id: I9d0fc65daf53c968557a79dd6db0bdfc7c03bf46
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2573138Reviewed-by: default avatarClemens Arbesser <arbesser@google.com>
Reviewed-by: default avatarMathias Carlen <mcarlen@chromium.org>
Commit-Queue: Rahul Goyal <goyalrahul@google.com>
Cr-Commit-Position: refs/heads/master@{#838003}
parent 96155d9f
...@@ -96,7 +96,6 @@ android_library("java") { ...@@ -96,7 +96,6 @@ android_library("java") {
"java/src/org/chromium/chrome/browser/autofill_assistant/AssistantInfoPopup.java", "java/src/org/chromium/chrome/browser/autofill_assistant/AssistantInfoPopup.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/AssistantKeyboardCoordinator.java", "java/src/org/chromium/chrome/browser/autofill_assistant/AssistantKeyboardCoordinator.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/AssistantModel.java", "java/src/org/chromium/chrome/browser/autofill_assistant/AssistantModel.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/AssistantOnboardingCoordinator.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/AssistantPeekHeightCoordinator.java", "java/src/org/chromium/chrome/browser/autofill_assistant/AssistantPeekHeightCoordinator.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/AssistantRootViewContainer.java", "java/src/org/chromium/chrome/browser/autofill_assistant/AssistantRootViewContainer.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/AssistantSnackbar.java", "java/src/org/chromium/chrome/browser/autofill_assistant/AssistantSnackbar.java",
...@@ -110,6 +109,8 @@ android_library("java") { ...@@ -110,6 +109,8 @@ android_library("java") {
"java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantModuleEntryImpl.java", "java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantModuleEntryImpl.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantServiceInjector.java", "java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantServiceInjector.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiController.java", "java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiController.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/BaseOnboardingCoordinator.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/BottomSheetOnboardingCoordinator.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/BottomSheetUtils.java", "java/src/org/chromium/chrome/browser/autofill_assistant/BottomSheetUtils.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/FeedbackContext.java", "java/src/org/chromium/chrome/browser/autofill_assistant/FeedbackContext.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/LayoutUtils.java", "java/src/org/chromium/chrome/browser/autofill_assistant/LayoutUtils.java",
...@@ -199,11 +200,11 @@ generate_jni("jni_headers") { ...@@ -199,11 +200,11 @@ generate_jni("jni_headers") {
"java/src/org/chromium/chrome/browser/autofill_assistant/AssistantDialogButton.java", "java/src/org/chromium/chrome/browser/autofill_assistant/AssistantDialogButton.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/AssistantInfoPopup.java", "java/src/org/chromium/chrome/browser/autofill_assistant/AssistantInfoPopup.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/AssistantModel.java", "java/src/org/chromium/chrome/browser/autofill_assistant/AssistantModel.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/AssistantOnboardingCoordinator.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java", "java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantClient.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantDirectActionImpl.java", "java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantDirectActionImpl.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantLiteService.java", "java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantLiteService.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiController.java", "java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiController.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/BaseOnboardingCoordinator.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/carousel/AssistantChip.java", "java/src/org/chromium/chrome/browser/autofill_assistant/carousel/AssistantChip.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/details/AssistantDetails.java", "java/src/org/chromium/chrome/browser/autofill_assistant/details/AssistantDetails.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/details/AssistantDetailsModel.java", "java/src/org/chromium/chrome/browser/autofill_assistant/details/AssistantDetailsModel.java",
...@@ -270,7 +271,6 @@ android_library("test_java") { ...@@ -270,7 +271,6 @@ android_library("test_java") {
testonly = true testonly = true
sources = [ sources = [
"javatests/src/org/chromium/chrome/browser/autofill_assistant/AssistantOnboardingCoordinatorTest.java",
"javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantAccessibilityIntegrationTest.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantAccessibilityIntegrationTest.java",
"javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantActionsCarouselUiTest.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantActionsCarouselUiTest.java",
"javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantAutostartTest.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantAutostartTest.java",
...@@ -299,6 +299,7 @@ android_library("test_java") { ...@@ -299,6 +299,7 @@ android_library("test_java") {
"javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantTriggerScriptIntegrationTest.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantTriggerScriptIntegrationTest.java",
"javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTest.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTest.java",
"javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTestUtil.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTestUtil.java",
"javatests/src/org/chromium/chrome/browser/autofill_assistant/BottomSheetOnboardingCoordinatorTest.java",
"javatests/src/org/chromium/chrome/browser/autofill_assistant/TestingAutofillAssistantModuleEntryProvider.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/TestingAutofillAssistantModuleEntryProvider.java",
] ]
......
...@@ -82,8 +82,8 @@ class AutofillAssistantActionHandlerImpl implements AutofillAssistantActionHandl ...@@ -82,8 +82,8 @@ class AutofillAssistantActionHandlerImpl implements AutofillAssistantActionHandl
public void performOnboarding( public void performOnboarding(
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 = BottomSheetOnboardingCoordinator coordinator =
new AssistantOnboardingCoordinator(experimentIds, parameters, mContext, new BottomSheetOnboardingCoordinator(experimentIds, parameters, mContext,
mBottomSheetController, mBrowserControls, mCompositorViewHolder, mScrim); mBottomSheetController, mBrowserControls, mCompositorViewHolder, mScrim);
coordinator.show(accepted -> { coordinator.show(accepted -> {
coordinator.hide(); coordinator.hide();
...@@ -101,13 +101,13 @@ class AutofillAssistantActionHandlerImpl implements AutofillAssistantActionHandl ...@@ -101,13 +101,13 @@ class AutofillAssistantActionHandlerImpl implements AutofillAssistantActionHandl
} }
Map<String, String> argumentMap = toArgumentMap(arguments); Map<String, String> argumentMap = toArgumentMap(arguments);
Callback<AssistantOnboardingCoordinator> afterOnboarding = (onboardingCoordinator) -> { Callback<BottomSheetOnboardingCoordinator> afterOnboarding = (onboardingCoordinator) -> {
callback.onResult(client.performDirectAction( callback.onResult(client.performDirectAction(
name, experimentIds, argumentMap, onboardingCoordinator)); name, experimentIds, argumentMap, onboardingCoordinator));
}; };
if (!AutofillAssistantPreferencesUtil.isAutofillOnboardingAccepted()) { if (!AutofillAssistantPreferencesUtil.isAutofillOnboardingAccepted()) {
AssistantOnboardingCoordinator coordinator = new AssistantOnboardingCoordinator( BottomSheetOnboardingCoordinator coordinator = new BottomSheetOnboardingCoordinator(
experimentIds, argumentMap, mContext, mBottomSheetController, mBrowserControls, experimentIds, argumentMap, mContext, mBottomSheetController, mBrowserControls,
mCompositorViewHolder, mScrim); mCompositorViewHolder, mScrim);
coordinator.show(accepted -> { coordinator.show(accepted -> {
......
...@@ -109,7 +109,7 @@ public class AutofillAssistantClient { ...@@ -109,7 +109,7 @@ public class AutofillAssistantClient {
*/ */
boolean start(String initialUrl, Map<String, String> parameters, String experimentIds, boolean start(String initialUrl, Map<String, String> parameters, String experimentIds,
@Nullable String callerAccount, @Nullable String userName, boolean isChromeCustomTab, @Nullable String callerAccount, @Nullable String userName, boolean isChromeCustomTab,
@Nullable AssistantOnboardingCoordinator onboardingCoordinator) { @Nullable BaseOnboardingCoordinator onboardingCoordinator) {
if (mNativeClientAndroid == 0) return false; if (mNativeClientAndroid == 0) return false;
checkNativeClientIsAliveOrThrow(); checkNativeClientIsAliveOrThrow();
...@@ -213,7 +213,7 @@ public class AutofillAssistantClient { ...@@ -213,7 +213,7 @@ public class AutofillAssistantClient {
*/ */
public boolean performDirectAction(String actionId, String experimentIds, public boolean performDirectAction(String actionId, String experimentIds,
Map<String, String> arguments, Map<String, String> arguments,
@Nullable AssistantOnboardingCoordinator onboardingCoordinator) { @Nullable BaseOnboardingCoordinator onboardingCoordinator) {
if (mNativeClientAndroid == 0) return false; if (mNativeClientAndroid == 0) return false;
// Note that only fetchWebsiteActions can start AA, so only it needs // Note that only fetchWebsiteActions can start AA, so only it needs
...@@ -405,8 +405,8 @@ public class AutofillAssistantClient { ...@@ -405,8 +405,8 @@ public class AutofillAssistantClient {
boolean start(long nativeClientAndroid, AutofillAssistantClient caller, String initialUrl, boolean start(long nativeClientAndroid, AutofillAssistantClient caller, String initialUrl,
String experimentIds, String callerAccount, String[] parameterNames, String experimentIds, String callerAccount, String[] parameterNames,
String[] parameterValues, boolean isChromeCustomTab, String[] parameterValues, boolean isChromeCustomTab,
@Nullable AssistantOnboardingCoordinator onboardingCoordinator, @Nullable BaseOnboardingCoordinator onboardingCoordinator, boolean onboardingShown,
boolean onboardingShown, long nativeService); long nativeService);
void startTriggerScript(long nativeClientAndroid, AutofillAssistantClient caller, void startTriggerScript(long nativeClientAndroid, AutofillAssistantClient caller,
AssistantTriggerScriptBridge delegate, String initialUrl, String experimentIds, AssistantTriggerScriptBridge delegate, String initialUrl, String experimentIds,
String[] parameterNames, String[] parameterValues, long nativeServiceRequestSender); String[] parameterNames, String[] parameterValues, long nativeServiceRequestSender);
...@@ -426,7 +426,6 @@ public class AutofillAssistantClient { ...@@ -426,7 +426,6 @@ public class AutofillAssistantClient {
boolean performDirectAction(long nativeClientAndroid, AutofillAssistantClient caller, boolean performDirectAction(long nativeClientAndroid, AutofillAssistantClient caller,
String actionId, String experimentId, String[] argumentNames, String actionId, String experimentId, String[] argumentNames,
String[] argumentValues, String[] argumentValues, @Nullable BaseOnboardingCoordinator onboardingCoordinator);
@Nullable AssistantOnboardingCoordinator onboardingCoordinator);
} }
} }
...@@ -167,9 +167,11 @@ public class AutofillAssistantModuleEntryImpl implements AutofillAssistantModule ...@@ -167,9 +167,11 @@ public class AutofillAssistantModuleEntryImpl implements AutofillAssistantModule
return; return;
} }
AssistantOnboardingCoordinator onboardingCoordinator = new AssistantOnboardingCoordinator( BottomSheetOnboardingCoordinator onboardingCoordinator =
experimentIds, parameters, context, bottomSheetController, browserControls, new BottomSheetOnboardingCoordinator(experimentIds, parameters, context,
compositorViewHolder, bottomSheetController.getScrimCoordinator()); bottomSheetController, browserControls, compositorViewHolder,
bottomSheetController.getScrimCoordinator());
onboardingCoordinator.show(accepted -> { onboardingCoordinator.show(accepted -> {
if (parameters.containsKey(PARAMETER_TRIGGER_SCRIPT_USED) if (parameters.containsKey(PARAMETER_TRIGGER_SCRIPT_USED)
|| parameters.containsKey(PARAMETER_STARTED_WITH_TRIGGER_SCRIPT)) { || parameters.containsKey(PARAMETER_STARTED_WITH_TRIGGER_SCRIPT)) {
......
...@@ -104,7 +104,7 @@ public class AutofillAssistantUiController { ...@@ -104,7 +104,7 @@ public class AutofillAssistantUiController {
@CalledByNative @CalledByNative
private static AutofillAssistantUiController create(ChromeActivity activity, private static AutofillAssistantUiController create(ChromeActivity activity,
boolean allowTabSwitching, long nativeUiController, boolean allowTabSwitching, long nativeUiController,
@Nullable AssistantOnboardingCoordinator onboardingCoordinator) { @Nullable BaseOnboardingCoordinator onboardingCoordinator) {
BottomSheetController sheetController = BottomSheetController sheetController =
BottomSheetControllerProvider.from(activity.getWindowAndroid()); BottomSheetControllerProvider.from(activity.getWindowAndroid());
assert activity != null; assert activity != null;
...@@ -124,8 +124,7 @@ public class AutofillAssistantUiController { ...@@ -124,8 +124,7 @@ public class AutofillAssistantUiController {
private AutofillAssistantUiController(ChromeActivity activity, BottomSheetController controller, private AutofillAssistantUiController(ChromeActivity activity, BottomSheetController controller,
TabObscuringHandler tabObscuringHandler, boolean allowTabSwitching, TabObscuringHandler tabObscuringHandler, boolean allowTabSwitching,
long nativeUiController, long nativeUiController, @Nullable BaseOnboardingCoordinator onboardingCoordinator) {
@Nullable AssistantOnboardingCoordinator onboardingCoordinator) {
mNativeUiController = nativeUiController; mNativeUiController = nativeUiController;
mActivity = activity; mActivity = activity;
mCoordinator = new AssistantCoordinator(activity, controller, tabObscuringHandler, mCoordinator = new AssistantCoordinator(activity, controller, tabObscuringHandler,
......
...@@ -23,17 +23,7 @@ import org.chromium.chrome.autofill_assistant.R; ...@@ -23,17 +23,7 @@ import org.chromium.chrome.autofill_assistant.R;
import org.chromium.chrome.browser.autofill_assistant.metrics.DropOutReason; import org.chromium.chrome.browser.autofill_assistant.metrics.DropOutReason;
import org.chromium.chrome.browser.autofill_assistant.metrics.OnBoarding; 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.AssistantOverlayState;
import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider;
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
import org.chromium.chrome.browser.customtabs.CustomTabActivity; import org.chromium.chrome.browser.customtabs.CustomTabActivity;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController.SheetState;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetObserver;
import org.chromium.components.browser_ui.bottomsheet.EmptyBottomSheetObserver;
import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator;
import org.chromium.components.embedder_support.util.UrlUtilitiesJni; import org.chromium.components.embedder_support.util.UrlUtilitiesJni;
import org.chromium.content_public.browser.NavigationHandle; import org.chromium.content_public.browser.NavigationHandle;
import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContents;
...@@ -46,11 +36,11 @@ import java.util.HashMap; ...@@ -46,11 +36,11 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
/** /**
* Coordinator responsible for showing the onboarding screen when the user is using the Autofill * Base Coordinator class responsible for showing the onboarding screen when the user is using the
* Assistant for the first time. * Autofill Assistant for the first time.
*/ */
@JNINamespace("autofill_assistant") @JNINamespace("autofill_assistant")
class AssistantOnboardingCoordinator { abstract class BaseOnboardingCoordinator {
private static final String INTENT_IDENTFIER = "INTENT"; private static final String INTENT_IDENTFIER = "INTENT";
private static final String FETCH_TIMEOUT_IDENTIFIER = "ONBOARDING_FETCH_TIMEOUT_MS"; private static final String FETCH_TIMEOUT_IDENTIFIER = "ONBOARDING_FETCH_TIMEOUT_MS";
private static final String BUY_MOVIE_TICKETS_INTENT = "BUY_MOVIE_TICKET"; private static final String BUY_MOVIE_TICKETS_INTENT = "BUY_MOVIE_TICKET";
...@@ -67,40 +57,24 @@ class AssistantOnboardingCoordinator { ...@@ -67,40 +57,24 @@ class AssistantOnboardingCoordinator {
private final String mExperimentIds; private final String mExperimentIds;
private final Map<String, String> mParameters; private final Map<String, String> mParameters;
private final Context mContext; private final Map<String, String> mStringMap = new HashMap<>();
private final BottomSheetController mController;
private final BrowserControlsStateProvider mBrowserControls;
private final CompositorViewHolder mCompositorViewHolder;
private final ScrimCoordinator mScrimCoordinator;
@Nullable
private AssistantOverlayCoordinator mOverlayCoordinator;
@Nullable @Nullable
private WebContentsObserver mWebContentsObserver; private WebContentsObserver mWebContentsObserver;
private BottomSheetObserver mBottomSheetObserver; private boolean mOnboardingShown;
@Nullable
private AssistantBottomSheetContent mContent;
private boolean mAnimate = true;
final Context mContext;
boolean mAnimate = true;
@Nullable @Nullable
private ScrollView mView; ScrollView mView;
private final Map<String, String> mStringMap = new HashMap<>();
private boolean mOnboardingShown;
AssistantOnboardingCoordinator(String experimentIds, Map<String, String> parameters, BaseOnboardingCoordinator(
Context context, BottomSheetController controller, String experimentIds, Map<String, String> parameters, Context context) {
BrowserControlsStateProvider browserControls, CompositorViewHolder compositorViewHolder,
ScrimCoordinator scrim) {
mExperimentIds = experimentIds; mExperimentIds = experimentIds;
mParameters = parameters; mParameters = parameters;
mContext = context; mContext = context;
mController = controller; mView = (ScrollView) LayoutUtils.createInflater(mContext).inflate(
mBrowserControls = browserControls; R.layout.autofill_assistant_onboarding, /* root= */ null);
mCompositorViewHolder = compositorViewHolder;
mScrimCoordinator = scrim;
} }
/** /**
...@@ -113,22 +87,7 @@ class AssistantOnboardingCoordinator { ...@@ -113,22 +87,7 @@ class AssistantOnboardingCoordinator {
* navigation to that URL is allowed, other navigations will hide Autofill Assistant. * navigation to that URL is allowed, other navigations will hide Autofill Assistant.
*/ */
void show(Callback<Boolean> callback, WebContents webContents, String targetUrl) { void show(Callback<Boolean> callback, WebContents webContents, String targetUrl) {
mWebContentsObserver = new WebContentsObserver(webContents) { addWebContentObserver(callback, webContents, targetUrl);
@Override
public void didStartNavigation(NavigationHandle navigationHandle) {
if (navigationHandle.getUrl().getSpec().equals(targetUrl)) {
return;
}
if (navigationHandle.isInMainFrame() && !navigationHandle.isRendererInitiated()
&& !navigationHandle.isSameDocument()) {
onUserAction(/* accept= */ false, callback, OnBoarding.OB_NO_ANSWER,
DropOutReason.ONBOARDING_NAVIGATION);
}
}
};
webContents.addObserver(mWebContentsObserver);
show(callback); show(callback);
} }
...@@ -138,7 +97,7 @@ class AssistantOnboardingCoordinator { ...@@ -138,7 +97,7 @@ class AssistantOnboardingCoordinator {
* <p>The {@code callback} will be called with true or false when the user accepts or cancels * <p>The {@code callback} will be called with true or false when the user accepts or cancels
* the onboarding (respectively). * the onboarding (respectively).
* *
* <p>Note that the bottom sheet will be hidden after the callback returns. Call, from the * <p>Note that the onboarding screen will be hidden after the callback returns. Call, from the
* callback, {@link #hide} to hide it earlier or {@link #transferControls} to take ownership of * callback, {@link #hide} to hide it earlier or {@link #transferControls} to take ownership of
* it and possibly keep it past the end of the callback. * it and possibly keep it past the end of the callback.
*/ */
...@@ -146,123 +105,47 @@ class AssistantOnboardingCoordinator { ...@@ -146,123 +105,47 @@ class AssistantOnboardingCoordinator {
AutofillAssistantMetrics.recordOnBoarding(OnBoarding.OB_SHOWN); AutofillAssistantMetrics.recordOnBoarding(OnBoarding.OB_SHOWN);
mOnboardingShown = true; mOnboardingShown = true;
// If there's a tab, cover it with an overlay. initViewImpl(callback);
AssistantOverlayModel overlayModel = new AssistantOverlayModel(); setupSharedView(callback);
mOverlayCoordinator = new AssistantOverlayCoordinator(
mContext, mBrowserControls, mCompositorViewHolder, mScrimCoordinator, overlayModel);
overlayModel.set(AssistantOverlayModel.STATE, AssistantOverlayState.FULL);
mBottomSheetObserver = new EmptyBottomSheetObserver() {
@Override
public void onSheetStateChanged(int newState) {
if (mOverlayCoordinator == null) {
return;
}
if (newState == SheetState.HIDDEN) {
mOverlayCoordinator.suppress();
}
if (newState == SheetState.PEEK || newState == SheetState.HALF
|| newState == SheetState.FULL) {
mOverlayCoordinator.restore();
}
}
};
mController.addObserver(mBottomSheetObserver);
AssistantBottomBarDelegate delegate = new AssistantBottomBarDelegate() { int fetchTimeoutMs = 300;
@Override if (mParameters.containsKey(FETCH_TIMEOUT_IDENTIFIER)) {
public boolean onBackButtonPressed() { fetchTimeoutMs = Integer.parseInt(mParameters.get(FETCH_TIMEOUT_IDENTIFIER));
onUserAction(
/* accept= */ false, callback, OnBoarding.OB_NO_ANSWER,
DropOutReason.ONBOARDING_BACK_BUTTON_CLICKED);
return true;
} }
if (!mParameters.containsKey(INTENT_IDENTFIER) || fetchTimeoutMs == 0) {
@Override updateAndShowView();
public void onBottomSheetClosedWithSwipe() {}
};
BottomSheetContent currentSheetContent = mController.getCurrentSheetContent();
if (currentSheetContent instanceof AssistantBottomSheetContent) {
mContent = (AssistantBottomSheetContent) currentSheetContent;
mContent.setDelegate(() -> delegate);
} else { } else {
mContent = new AssistantBottomSheetContent(mContext, () -> delegate); BaseOnboardingCoordinatorJni.get().fetchOnboardingDefinition(this,
} mParameters.get(INTENT_IDENTFIER), LocaleUtils.getDefaultLocaleString(),
initContent(callback); fetchTimeoutMs);
}
/**
* Transfers ownership of the controls to the caller, returns the overlay coordinator, if one
* was created.
*
* <p>This call is only useful when called from inside a callback provided to {@link #show}, as
* before that there are no controls and after that the coordinator automatically hides them.
* This call allows callbacks to reuse the controls setup for onboarding and provide a smooth
* transition.
*/
@Nullable
AssistantOverlayCoordinator transferControls() {
assert isInProgress();
AssistantOverlayCoordinator coordinator = mOverlayCoordinator;
mOverlayCoordinator = null;
mContent = null;
return coordinator;
}
/** Hides the UI, if one is shown. */
void hide() {
mController.removeObserver(mBottomSheetObserver);
if (mOverlayCoordinator != null) {
mOverlayCoordinator.destroy();
mOverlayCoordinator = null;
} }
if (mContent != null) {
mController.hideContent(mContent, /* animate= */ mAnimate);
mContent = null;
} }
if (mWebContentsObserver != null) { private void addWebContentObserver(
mWebContentsObserver.destroy(); Callback<Boolean> callback, WebContents webContents, String targetUrl) {
mWebContentsObserver = null; mWebContentsObserver = new WebContentsObserver(webContents) {
} @Override
public void didStartNavigation(NavigationHandle navigationHandle) {
if (navigationHandle.getUrl().getSpec().equals(targetUrl)) {
return;
} }
/** if (navigationHandle.isInMainFrame() && !navigationHandle.isRendererInitiated()
* Returns {@code true} between the time {@link #show} is called and the time && !navigationHandle.isSameDocument()) {
* the callback has returned. onUserAction(/* accept= */ false, callback, OnBoarding.OB_NO_ANSWER,
*/ DropOutReason.ONBOARDING_NAVIGATION);
boolean isInProgress() {
return mContent != null;
} }
/** Don't animate the bottom sheet expansion. */
@VisibleForTesting
void disableAnimationForTesting() {
mAnimate = false;
} }
};
/** webContents.addObserver(mWebContentsObserver);
* Returns {@code true} if the onboarding has been shown at the beginning when this
* autofill assistant flow got triggered.
*/
boolean getOnboardingShown() {
return mOnboardingShown;
} }
/** /**
* Set the content of the bottom sheet to be the Autofill Assistant onboarding. * Set the content of the user interface to be the Autofill Assistant onboarding.
*/ */
private void initContent(Callback<Boolean> callback) { private void setupSharedView(Callback<Boolean> callback) {
mView = (ScrollView) LayoutUtils.createInflater(mContext).inflate(
R.layout.autofill_assistant_onboarding, /* root= */ null);
// Set focusable for accessibility. // Set focusable for accessibility.
mView.setFocusable(true); mView.setFocusable(true);
mView.findViewById(R.id.button_init_ok) mView.findViewById(R.id.button_init_ok)
.setOnClickListener(unusedView .setOnClickListener(unusedView
-> onUserAction( -> onUserAction(
...@@ -273,22 +156,10 @@ class AssistantOnboardingCoordinator { ...@@ -273,22 +156,10 @@ class AssistantOnboardingCoordinator {
-> onUserAction( -> onUserAction(
/* accept= */ false, callback, OnBoarding.OB_CANCELLED, /* accept= */ false, callback, OnBoarding.OB_CANCELLED,
DropOutReason.DECLINED)); DropOutReason.DECLINED));
int fetchTimeoutMs = 300;
if (mParameters.containsKey(FETCH_TIMEOUT_IDENTIFIER)) {
fetchTimeoutMs = Integer.parseInt(mParameters.get(FETCH_TIMEOUT_IDENTIFIER));
}
if (!mParameters.containsKey(INTENT_IDENTFIER) || fetchTimeoutMs == 0) {
updateAndShowView();
} else {
AssistantOnboardingCoordinatorJni.get().fetchOnboardingDefinition(this,
mParameters.get(INTENT_IDENTFIER), LocaleUtils.getDefaultLocaleString(),
fetchTimeoutMs);
}
} }
private void onUserAction(boolean accept, Callback<Boolean> callback, void onUserAction(boolean accept, Callback<Boolean> callback, @OnBoarding int onboardingAnswer,
@OnBoarding int onboardingAnswer, @DropOutReason int dropoutReason) { @DropOutReason int dropoutReason) {
AutofillAssistantPreferencesUtil.setInitialPreferences(accept); AutofillAssistantPreferencesUtil.setInitialPreferences(accept);
AutofillAssistantMetrics.recordOnBoarding(onboardingAnswer); AutofillAssistantMetrics.recordOnBoarding(onboardingAnswer);
if (!accept) { if (!accept) {
...@@ -299,6 +170,44 @@ class AssistantOnboardingCoordinator { ...@@ -299,6 +170,44 @@ class AssistantOnboardingCoordinator {
hide(); hide();
} }
@CalledByNative
@VisibleForTesting
public void addEntryToStringMap(String key, String value) {
mStringMap.put(key, value);
}
@CalledByNative
@VisibleForTesting
public void updateAndShowView() {
updateView();
showViewImpl();
}
private void updateView() {
assert mView != null;
String termsAndConditionsKey = "terms_and_conditions";
String termsAndConditionsUrlKey = "terms_and_conditions_url";
updateTermsAndConditions(mView, mStringMap.get(termsAndConditionsKey),
mStringMap.get(termsAndConditionsUrlKey));
if (mStringMap.isEmpty()) {
updateViewBasedOnIntent(mView);
} else {
String onboardingTitleKey = "onboarding_title";
if (mStringMap.containsKey(onboardingTitleKey)) {
((TextView) mView.findViewById(R.id.onboarding_try_assistant))
.setText(mStringMap.get(onboardingTitleKey));
}
String onboardingTextKey = "onboarding_text";
if (mStringMap.containsKey(onboardingTextKey)) {
((TextView) mView.findViewById(R.id.onboarding_subtitle))
.setText(mStringMap.get(onboardingTextKey));
}
}
}
private void updateTermsAndConditions(ScrollView initView, private void updateTermsAndConditions(ScrollView initView,
@Nullable String termsAndConditionsString, @Nullable String termsAndConditionsUrl) { @Nullable String termsAndConditionsString, @Nullable String termsAndConditionsUrl) {
TextView termsTextView = initView.findViewById(R.id.google_terms_message); TextView termsTextView = initView.findViewById(R.id.google_terms_message);
...@@ -374,46 +283,37 @@ class AssistantOnboardingCoordinator { ...@@ -374,46 +283,37 @@ class AssistantOnboardingCoordinator {
} }
} }
@CalledByNative /** Destroy web contents observer. */
@VisibleForTesting void destroy() {
public void addEntryToStringMap(String key, String value) { if (mWebContentsObserver != null) {
mStringMap.put(key, value); mWebContentsObserver.destroy();
mWebContentsObserver = null;
} }
@CalledByNative
@VisibleForTesting
public void updateAndShowView() {
assert mView != null;
String termsAndConditionsKey = "terms_and_conditions";
String termsAndConditionsUrlKey = "terms_and_conditions_url";
updateTermsAndConditions(mView, mStringMap.get(termsAndConditionsKey),
mStringMap.get(termsAndConditionsUrlKey));
if (mStringMap.isEmpty()) {
updateViewBasedOnIntent(mView);
} else {
String onboardingTitleKey = "onboarding_title";
if (mStringMap.containsKey(onboardingTitleKey)) {
((TextView) mView.findViewById(R.id.onboarding_try_assistant))
.setText(mStringMap.get(onboardingTitleKey));
} }
String onboardingTextKey = "onboarding_text"; /**
if (mStringMap.containsKey(onboardingTextKey)) { * Returns {@code true} if the onboarding has been shown at the beginning when this
((TextView) mView.findViewById(R.id.onboarding_subtitle)) * autofill assistant flow got triggered.
.setText(mStringMap.get(onboardingTextKey)); */
} boolean getOnboardingShown() {
return mOnboardingShown;
} }
mContent.setContent(mView, mView); /** Don't animate the user interface. */
BottomSheetUtils.showContentAndMaybeExpand( @VisibleForTesting
mController, mContent, /* shouldExpand = */ true, mAnimate); void disableAnimationForTesting() {
mAnimate = false;
} }
abstract void initViewImpl(Callback<Boolean> callback);
abstract void showViewImpl();
abstract void hide();
// TODO(b/175598484): Move transferControls to bottom sheet subclass
abstract AssistantOverlayCoordinator transferControls();
@NativeMethods @NativeMethods
interface Natives { interface Natives {
void fetchOnboardingDefinition(AssistantOnboardingCoordinator coordinator, String intent, void fetchOnboardingDefinition(
String locale, int timeoutMs); BaseOnboardingCoordinator coordinator, String intent, String locale, int timeoutMs);
} }
} }
\ No newline at end of file
// Copyright 2020 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 android.content.Context;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import org.chromium.base.Callback;
import org.chromium.chrome.browser.autofill_assistant.metrics.DropOutReason;
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.browser_controls.BrowserControlsStateProvider;
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController.SheetState;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetObserver;
import org.chromium.components.browser_ui.bottomsheet.EmptyBottomSheetObserver;
import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator;
import java.util.Map;
/**
* Coordinator responsible for showing the bottom sheet onboarding screen when the user is using the
* Autofill Assistant for the first time.
*/
class BottomSheetOnboardingCoordinator extends BaseOnboardingCoordinator {
@Nullable
private AssistantBottomSheetContent mContent;
private BottomSheetObserver mBottomSheetObserver;
private final BottomSheetController mController;
private final BrowserControlsStateProvider mBrowserControls;
private final CompositorViewHolder mCompositorViewHolder;
private final ScrimCoordinator mScrimCoordinator;
@Nullable
AssistantOverlayCoordinator mOverlayCoordinator;
BottomSheetOnboardingCoordinator(String experimentIds, Map<String, String> parameters,
Context context, BottomSheetController controller,
BrowserControlsStateProvider browserControls, CompositorViewHolder compositorViewHolder,
ScrimCoordinator scrim) {
super(experimentIds, parameters, context);
this.mController = controller;
this.mBrowserControls = browserControls;
this.mCompositorViewHolder = compositorViewHolder;
this.mScrimCoordinator = scrim;
}
@Override
void initViewImpl(Callback<Boolean> callback) {
// If there's a tab, cover it with an overlay.
AssistantOverlayModel overlayModel = new AssistantOverlayModel();
mOverlayCoordinator = new AssistantOverlayCoordinator(
mContext, mBrowserControls, mCompositorViewHolder, mScrimCoordinator, overlayModel);
overlayModel.set(AssistantOverlayModel.STATE, AssistantOverlayState.FULL);
mBottomSheetObserver = new EmptyBottomSheetObserver() {
@Override
public void onSheetStateChanged(int newState) {
if (mOverlayCoordinator == null) {
return;
}
if (newState == SheetState.HIDDEN) {
mOverlayCoordinator.suppress();
}
if (newState == SheetState.PEEK || newState == SheetState.HALF
|| newState == SheetState.FULL) {
mOverlayCoordinator.restore();
}
}
};
mController.addObserver(mBottomSheetObserver);
AssistantBottomBarDelegate delegate = new AssistantBottomBarDelegate() {
@Override
public boolean onBackButtonPressed() {
onUserAction(
/* accept= */ false, callback, OnBoarding.OB_NO_ANSWER,
DropOutReason.ONBOARDING_BACK_BUTTON_CLICKED);
return true;
}
@Override
public void onBottomSheetClosedWithSwipe() {}
};
BottomSheetContent currentSheetContent = mController.getCurrentSheetContent();
if (currentSheetContent instanceof AssistantBottomSheetContent) {
mContent = (AssistantBottomSheetContent) currentSheetContent;
mContent.setDelegate(() -> delegate);
} else {
mContent = new AssistantBottomSheetContent(mContext, () -> delegate);
}
}
@Override
void showViewImpl() {
mContent.setContent(mView, mView);
BottomSheetUtils.showContentAndMaybeExpand(
mController, mContent, /* shouldExpand = */ true, mAnimate);
}
/**
* Transfers ownership of the controls to the caller, returns the overlay coordinator, if one
* was created.
*
* <p>This call is only useful when called from inside a callback provided to {@link #show}, as
* before that there are no controls and after that the coordinator automatically hides them.
* This call allows callbacks to reuse the controls setup for onboarding and provide a smooth
* transition.
*/
@Nullable
@Override
AssistantOverlayCoordinator transferControls() {
assert isInProgress();
mContent = null;
AssistantOverlayCoordinator coordinator = mOverlayCoordinator;
mOverlayCoordinator = null;
return coordinator;
}
/** Hides the UI, if one is shown. */
@Override
void hide() {
mController.removeObserver(mBottomSheetObserver);
if (mContent != null) {
mController.hideContent(mContent, /* animate= */ mAnimate);
mContent = null;
}
if (mOverlayCoordinator != null) {
mOverlayCoordinator.destroy();
mOverlayCoordinator = null;
}
destroy();
}
/**
* Returns {@code true} between the time {@link #show} is called and the time
* the callback has returned.
*/
@VisibleForTesting
boolean isInProgress() {
return mContent != null;
}
}
\ No newline at end of file
...@@ -54,7 +54,6 @@ import org.chromium.chrome.browser.autofill_assistant.overlay.AssistantOverlaySt ...@@ -54,7 +54,6 @@ import org.chromium.chrome.browser.autofill_assistant.overlay.AssistantOverlaySt
import org.chromium.chrome.browser.customtabs.CustomTabActivity; import org.chromium.chrome.browser.customtabs.CustomTabActivity;
import org.chromium.chrome.browser.customtabs.CustomTabActivityTestRule; import org.chromium.chrome.browser.customtabs.CustomTabActivityTestRule;
import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator; import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator;
...@@ -66,11 +65,11 @@ import java.util.HashMap; ...@@ -66,11 +65,11 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
/** /**
* Tests {@link AssistantOnboardingCoordinator} * Tests {@link BottomSheetOnboardingCoordinator}
*/ */
@RunWith(ChromeJUnit4ClassRunner.class) @RunWith(ChromeJUnit4ClassRunner.class)
@CommandLineFlags.Add(ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE) @CommandLineFlags.Add(ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE)
public class AssistantOnboardingCoordinatorTest { public class BottomSheetOnboardingCoordinatorTest {
@Rule @Rule
public CustomTabActivityTestRule mCustomTabActivityTestRule = new CustomTabActivityTestRule(); public CustomTabActivityTestRule mCustomTabActivityTestRule = new CustomTabActivityTestRule();
...@@ -82,7 +81,6 @@ public class AssistantOnboardingCoordinatorTest { ...@@ -82,7 +81,6 @@ public class AssistantOnboardingCoordinatorTest {
private ChromeActivity mActivity; private ChromeActivity mActivity;
private BottomSheetController mBottomSheetController; private BottomSheetController mBottomSheetController;
private Tab mTab;
private ScrimCoordinator mScrimCoordinator; private ScrimCoordinator mScrimCoordinator;
@Before @Before
...@@ -91,15 +89,14 @@ public class AssistantOnboardingCoordinatorTest { ...@@ -91,15 +89,14 @@ public class AssistantOnboardingCoordinatorTest {
mActivity = mCustomTabActivityTestRule.getActivity(); mActivity = mCustomTabActivityTestRule.getActivity();
mBottomSheetController = TestThreadUtils.runOnUiThreadBlocking( mBottomSheetController = TestThreadUtils.runOnUiThreadBlocking(
() -> AutofillAssistantUiTestUtil.getBottomSheetController(mActivity)); () -> AutofillAssistantUiTestUtil.getBottomSheetController(mActivity));
mTab = mActivity.getTabModelSelector().getCurrentTab();
mScrimCoordinator = mCustomTabActivityTestRule.getActivity() mScrimCoordinator = mCustomTabActivityTestRule.getActivity()
.getRootUiCoordinatorForTesting() .getRootUiCoordinatorForTesting()
.getScrimCoordinator(); .getScrimCoordinator();
} }
private AssistantOnboardingCoordinator createCoordinator(Tab tab) { private BottomSheetOnboardingCoordinator createCoordinator() {
AssistantOnboardingCoordinator coordinator = BottomSheetOnboardingCoordinator coordinator =
new AssistantOnboardingCoordinator("", new HashMap<String, String>(), mActivity, new BottomSheetOnboardingCoordinator("", new HashMap<String, String>(), mActivity,
mBottomSheetController, mActivity.getBrowserControlsManager(), mBottomSheetController, mActivity.getBrowserControlsManager(),
mActivity.getCompositorViewHolder(), mScrimCoordinator); mActivity.getCompositorViewHolder(), mScrimCoordinator);
coordinator.disableAnimationForTesting(); coordinator.disableAnimationForTesting();
...@@ -121,7 +118,7 @@ public class AssistantOnboardingCoordinatorTest { ...@@ -121,7 +118,7 @@ public class AssistantOnboardingCoordinatorTest {
private void testOnboarding(@IdRes int buttonToClick, boolean expectAccept) throws Exception { private void testOnboarding(@IdRes int buttonToClick, boolean expectAccept) throws Exception {
AutofillAssistantPreferencesUtil.setInitialPreferences(!expectAccept); AutofillAssistantPreferencesUtil.setInitialPreferences(!expectAccept);
AssistantOnboardingCoordinator coordinator = createCoordinator(mTab); BottomSheetOnboardingCoordinator coordinator = createCoordinator();
showOnboardingAndWait(coordinator, mCallback); showOnboardingAndWait(coordinator, mCallback);
assertTrue(TestThreadUtils.runOnUiThreadBlocking(coordinator::isInProgress)); assertTrue(TestThreadUtils.runOnUiThreadBlocking(coordinator::isInProgress));
...@@ -136,7 +133,7 @@ public class AssistantOnboardingCoordinatorTest { ...@@ -136,7 +133,7 @@ public class AssistantOnboardingCoordinatorTest {
@Test @Test
@MediumTest @MediumTest
public void testOnboardingWithNoTabs() { public void testOnboardingWithNoTabs() {
AssistantOnboardingCoordinator coordinator = createCoordinator(/* tab= */ null); BottomSheetOnboardingCoordinator coordinator = createCoordinator();
showOnboardingAndWait(coordinator, mCallback); showOnboardingAndWait(coordinator, mCallback);
onView(withId(R.id.button_init_ok)).perform(click()); onView(withId(R.id.button_init_ok)).perform(click());
...@@ -147,7 +144,7 @@ public class AssistantOnboardingCoordinatorTest { ...@@ -147,7 +144,7 @@ public class AssistantOnboardingCoordinatorTest {
@Test @Test
@MediumTest @MediumTest
public void testTransferControls() throws Exception { public void testTransferControls() throws Exception {
AssistantOnboardingCoordinator coordinator = createCoordinator(mTab); BottomSheetOnboardingCoordinator coordinator = createCoordinator();
List<AssistantOverlayCoordinator> capturedOverlays = List<AssistantOverlayCoordinator> capturedOverlays =
Collections.synchronizedList(new ArrayList<>()); Collections.synchronizedList(new ArrayList<>());
...@@ -173,7 +170,7 @@ public class AssistantOnboardingCoordinatorTest { ...@@ -173,7 +170,7 @@ public class AssistantOnboardingCoordinatorTest {
@Test @Test
@MediumTest @MediumTest
public void testShownFlag() { public void testShownFlag() {
AssistantOnboardingCoordinator coordinator = createCoordinator(/* tab= */ null); BottomSheetOnboardingCoordinator coordinator = createCoordinator();
assertFalse(coordinator.getOnboardingShown()); assertFalse(coordinator.getOnboardingShown());
showOnboardingAndWait(coordinator, mCallback); showOnboardingAndWait(coordinator, mCallback);
...@@ -187,8 +184,8 @@ public class AssistantOnboardingCoordinatorTest { ...@@ -187,8 +184,8 @@ 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 = BottomSheetOnboardingCoordinator coordinator =
new AssistantOnboardingCoordinator("", parameters, mActivity, new BottomSheetOnboardingCoordinator("", parameters, mActivity,
mBottomSheetController, mActivity.getBrowserControlsManager(), mBottomSheetController, mActivity.getBrowserControlsManager(),
mActivity.getCompositorViewHolder(), mScrimCoordinator); mActivity.getCompositorViewHolder(), mScrimCoordinator);
coordinator.disableAnimationForTesting(); coordinator.disableAnimationForTesting();
...@@ -211,8 +208,8 @@ public class AssistantOnboardingCoordinatorTest { ...@@ -211,8 +208,8 @@ 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 = BottomSheetOnboardingCoordinator coordinator =
new AssistantOnboardingCoordinator("4363482", parameters, mActivity, new BottomSheetOnboardingCoordinator("4363482", parameters, mActivity,
mBottomSheetController, mActivity.getBrowserControlsManager(), mBottomSheetController, mActivity.getBrowserControlsManager(),
mActivity.getCompositorViewHolder(), mScrimCoordinator); mActivity.getCompositorViewHolder(), mScrimCoordinator);
coordinator.disableAnimationForTesting(); coordinator.disableAnimationForTesting();
...@@ -234,8 +231,8 @@ public class AssistantOnboardingCoordinatorTest { ...@@ -234,8 +231,8 @@ public class AssistantOnboardingCoordinatorTest {
AutofillAssistantPreferencesUtil.setInitialPreferences(true); AutofillAssistantPreferencesUtil.setInitialPreferences(true);
HashMap<String, String> parameters = new HashMap(); HashMap<String, String> parameters = new HashMap();
AssistantOnboardingCoordinator coordinator = BottomSheetOnboardingCoordinator coordinator =
new AssistantOnboardingCoordinator("", parameters, mActivity, new BottomSheetOnboardingCoordinator("", parameters, mActivity,
mBottomSheetController, mActivity.getBrowserControlsManager(), mBottomSheetController, mActivity.getBrowserControlsManager(),
mActivity.getCompositorViewHolder(), mScrimCoordinator); mActivity.getCompositorViewHolder(), mScrimCoordinator);
coordinator.disableAnimationForTesting(); coordinator.disableAnimationForTesting();
...@@ -257,8 +254,8 @@ public class AssistantOnboardingCoordinatorTest { ...@@ -257,8 +254,8 @@ public class AssistantOnboardingCoordinatorTest {
HashMap<String, String> parameters = new HashMap<>(); HashMap<String, String> parameters = new HashMap<>();
parameters.put("ONBOARDING_FETCH_TIMEOUT_MS", "0"); parameters.put("ONBOARDING_FETCH_TIMEOUT_MS", "0");
AssistantOnboardingCoordinator coordinator = BottomSheetOnboardingCoordinator coordinator =
new AssistantOnboardingCoordinator("", parameters, mActivity, new BottomSheetOnboardingCoordinator("", parameters, mActivity,
mBottomSheetController, mActivity.getBrowserControlsManager(), mBottomSheetController, mActivity.getBrowserControlsManager(),
mActivity.getCompositorViewHolder(), mScrimCoordinator); mActivity.getCompositorViewHolder(), mScrimCoordinator);
...@@ -309,8 +306,8 @@ public class AssistantOnboardingCoordinatorTest { ...@@ -309,8 +306,8 @@ public class AssistantOnboardingCoordinatorTest {
HashMap<String, String> parameters = new HashMap<>(); HashMap<String, String> parameters = new HashMap<>();
parameters.put("ONBOARDING_FETCH_TIMEOUT_MS", "0"); parameters.put("ONBOARDING_FETCH_TIMEOUT_MS", "0");
AssistantOnboardingCoordinator coordinator = BottomSheetOnboardingCoordinator coordinator =
new AssistantOnboardingCoordinator("", parameters, mActivity, new BottomSheetOnboardingCoordinator("", parameters, mActivity,
mBottomSheetController, mActivity.getBrowserControlsManager(), mBottomSheetController, mActivity.getBrowserControlsManager(),
mActivity.getCompositorViewHolder(), mScrimCoordinator); mActivity.getCompositorViewHolder(), mScrimCoordinator);
...@@ -335,8 +332,8 @@ public class AssistantOnboardingCoordinatorTest { ...@@ -335,8 +332,8 @@ public class AssistantOnboardingCoordinatorTest {
HashMap<String, String> parameters = new HashMap<>(); HashMap<String, String> parameters = new HashMap<>();
parameters.put("ONBOARDING_FETCH_TIMEOUT_MS", "0"); parameters.put("ONBOARDING_FETCH_TIMEOUT_MS", "0");
AssistantOnboardingCoordinator coordinator = BottomSheetOnboardingCoordinator coordinator =
new AssistantOnboardingCoordinator("", parameters, mActivity, new BottomSheetOnboardingCoordinator("", parameters, mActivity,
mBottomSheetController, mActivity.getBrowserControlsManager(), mBottomSheetController, mActivity.getBrowserControlsManager(),
mActivity.getCompositorViewHolder(), mScrimCoordinator); mActivity.getCompositorViewHolder(), mScrimCoordinator);
...@@ -373,7 +370,7 @@ public class AssistantOnboardingCoordinatorTest { ...@@ -373,7 +370,7 @@ public class AssistantOnboardingCoordinatorTest {
/** Trigger onboarding and wait until it is fully displayed. */ /** Trigger onboarding and wait until it is fully displayed. */
private void showOnboardingAndWait( private void showOnboardingAndWait(
AssistantOnboardingCoordinator coordinator, Callback<Boolean> callback) { BottomSheetOnboardingCoordinator coordinator, Callback<Boolean> callback) {
TestThreadUtils.runOnUiThreadBlocking(() -> coordinator.show(callback)); TestThreadUtils.runOnUiThreadBlocking(() -> coordinator.show(callback));
waitUntilViewMatchesCondition(withId(R.id.button_init_ok), isCompletelyDisplayed()); waitUntilViewMatchesCondition(withId(R.id.button_init_ok), isCompletelyDisplayed());
} }
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#include "base/android/jni_string.h" #include "base/android/jni_string.h"
#include "base/containers/flat_map.h" #include "base/containers/flat_map.h"
#include "chrome/android/features/autofill_assistant/jni_headers/AssistantOnboardingCoordinator_jni.h" #include "chrome/android/features/autofill_assistant/jni_headers/BaseOnboardingCoordinator_jni.h"
#include "chrome/browser/android/autofill_assistant/onboarding_fetcher_factory.h" #include "chrome/browser/android/autofill_assistant/onboarding_fetcher_factory.h"
#include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/profiles/profile_manager.h"
#include "components/autofill_assistant/browser/autofill_assistant_onboarding_fetcher.h" #include "components/autofill_assistant/browser/autofill_assistant_onboarding_fetcher.h"
...@@ -21,27 +21,27 @@ void UpdateView( ...@@ -21,27 +21,27 @@ void UpdateView(
for (const auto& it : string_map) { for (const auto& it : string_map) {
DCHECK(!it.first.empty()); DCHECK(!it.first.empty());
DCHECK(!it.second.empty()); DCHECK(!it.second.empty());
Java_AssistantOnboardingCoordinator_addEntryToStringMap( Java_BaseOnboardingCoordinator_addEntryToStringMap(
env, jonboarding_coordinator, env, jonboarding_coordinator,
base::android::ConvertUTF8ToJavaString(env, it.first), base::android::ConvertUTF8ToJavaString(env, it.first),
base::android::ConvertUTF8ToJavaString(env, it.second)); base::android::ConvertUTF8ToJavaString(env, it.second));
} }
Java_AssistantOnboardingCoordinator_updateAndShowView( Java_BaseOnboardingCoordinator_updateAndShowView(env,
env, jonboarding_coordinator); jonboarding_coordinator);
} }
} // namespace } // namespace
// static // static
void JNI_AssistantOnboardingCoordinator_FetchOnboardingDefinition( void JNI_BaseOnboardingCoordinator_FetchOnboardingDefinition(
JNIEnv* env, JNIEnv* env,
const base::android::JavaParamRef<jobject>& jonboarding_coordinator, const base::android::JavaParamRef<jobject>& jonboarding_coordinator,
const base::android::JavaParamRef<jstring>& jintent, const base::android::JavaParamRef<jstring>& jintent,
const base::android::JavaParamRef<jstring>& jlocale, const base::android::JavaParamRef<jstring>& jlocale,
jint timeout_ms) { jint timeout_ms) {
if (!jonboarding_coordinator || !jintent || !jlocale || !timeout_ms) { if (!jonboarding_coordinator || !jintent || !jlocale || !timeout_ms) {
Java_AssistantOnboardingCoordinator_updateAndShowView( Java_BaseOnboardingCoordinator_updateAndShowView(env,
env, jonboarding_coordinator); jonboarding_coordinator);
return; return;
} }
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
namespace autofill_assistant { namespace autofill_assistant {
static void JNI_AssistantOnboardingCoordinator_FetchOnboardingDefinition( static void JNI_BaseOnboardingCoordinator_FetchOnboardingDefinition(
JNIEnv* env, JNIEnv* env,
const base::android::JavaParamRef<jobject>& jonboarding_coordinator, const base::android::JavaParamRef<jobject>& jonboarding_coordinator,
const base::android::JavaParamRef<jstring>& jintent, const base::android::JavaParamRef<jstring>& jintent,
......
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