Commit d04fb018 authored by Alice Wang's avatar Alice Wang Committed by Chromium LUCI CQ

[Signin] Move openAccountPickerBottomSheet() to SigninBridge

This CL moves the method openAccountPickerBottomSheet() from
SigninUtils to SigninBridge to facilitate modularization.

Bug: 1165772
Change-Id: Ifc47512cdb0c8b680e16a4fedd49c010a25a7359
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2631491
Commit-Queue: Alice Wang <aliceywang@chromium.org>
Reviewed-by: default avatarMarc Treib <treib@chromium.org>
Reviewed-by: default avatarTanmoy Mollik <triploblastic@chromium.org>
Cr-Commit-Position: refs/heads/master@{#845149}
parent 21724485
......@@ -3450,7 +3450,6 @@ generate_jni("chrome_jni_headers") {
"java/src/org/chromium/chrome/browser/sharing/shared_clipboard/SharedClipboardMessageHandler.java",
"java/src/org/chromium/chrome/browser/signin/SigninBridge.java",
"java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java",
"java/src/org/chromium/chrome/browser/signin/SigninUtils.java",
"java/src/org/chromium/chrome/browser/site_settings/CookieControlsServiceBridge.java",
"java/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorSceneLayer.java",
"java/src/org/chromium/chrome/browser/suggestions/mostvisited/MostVisitedSites.java",
......
......@@ -210,9 +210,9 @@ chrome_junit_test_java_sources = [
"junit/src/org/chromium/chrome/browser/send_tab_to_self/SendTabToSelfShareActivityTest.java",
"junit/src/org/chromium/chrome/browser/sharing/click_to_call/ClickToCallMessageHandlerTest.java",
"junit/src/org/chromium/chrome/browser/signin/SigninActivityLauncherImplTest.java",
"junit/src/org/chromium/chrome/browser/signin/SigninBridgeTest.java",
"junit/src/org/chromium/chrome/browser/signin/SigninManagerTest.java",
"junit/src/org/chromium/chrome/browser/signin/SigninPromoUtilTest.java",
"junit/src/org/chromium/chrome/browser/signin/SigninUtilsAccountPickerTest.java",
"junit/src/org/chromium/chrome/browser/signin/account_picker/AccountPickerDelegateTest.java",
"junit/src/org/chromium/chrome/browser/status_indicator/StatusIndicatorMediatorTest.java",
"junit/src/org/chromium/chrome/browser/suggestions/SuggestionsImageFetcherTest.java",
......
......@@ -283,7 +283,7 @@ specific_include_rules = {
"SendTabToSelfShareActivity\.java": [
"+chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java",
],
"SigninUtils\.java": [
"SigninBridge\.java": [
"+chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java",
],
"AccountPickerDelegate\.java": [
......
......@@ -6,9 +6,25 @@ package org.chromium.chrome.browser.signin;
import android.content.Context;
import androidx.annotation.VisibleForTesting;
import org.chromium.base.ThreadUtils;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.chrome.browser.app.ChromeActivity;
import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncherImpl;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.signin.account_picker.AccountPickerDelegateImpl;
import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
import org.chromium.chrome.browser.signin.services.SigninManager;
import org.chromium.chrome.browser.signin.services.SigninMetricsUtils;
import org.chromium.chrome.browser.signin.services.WebSigninBridge;
import org.chromium.chrome.browser.signin.ui.account_picker.AccountPickerBottomSheetCoordinator;
import org.chromium.chrome.browser.sync.settings.AccountManagementFragment;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetControllerProvider;
import org.chromium.components.signin.AccountManagerFacadeProvider;
import org.chromium.components.signin.GAIAServiceType;
import org.chromium.components.signin.metrics.SigninAccessPoint;
import org.chromium.ui.base.WindowAndroid;
......@@ -44,5 +60,51 @@ final class SigninBridge {
}
}
/**
* Opens account picker bottom sheet.
*/
@VisibleForTesting
@CalledByNative
static void openAccountPickerBottomSheet(WindowAndroid windowAndroid, String continueUrl) {
ThreadUtils.assertOnUiThread();
SigninManager signinManager = IdentityServicesProvider.get().getSigninManager(
Profile.getLastUsedRegularProfile());
if (!signinManager.isSignInAllowed()) {
SigninMetricsUtils.logAccountConsistencyPromoAction(
org.chromium.components.signin.metrics.AccountConsistencyPromoAction
.SUPPRESSED_SIGNIN_NOT_ALLOWED);
return;
}
if (AccountManagerFacadeProvider.getInstance().tryGetGoogleAccounts().isEmpty()) {
// TODO(https://crbug.com/1119720): Show the bottom sheet when no accounts on device
// in the future. This disabling is only temporary.
SigninMetricsUtils.logAccountConsistencyPromoAction(
org.chromium.components.signin.metrics.AccountConsistencyPromoAction
.SUPPRESSED_NO_ACCOUNTS);
return;
}
BottomSheetController bottomSheetController =
BottomSheetControllerProvider.from(windowAndroid);
if (bottomSheetController == null) {
// The bottomSheetController can be null when google.com is just opened inside a
// bottom sheet for example. In this case, it's better to disable the account picker
// bottom sheet.
return;
}
ChromeActivity activity = (ChromeActivity) windowAndroid.getActivity().get();
// To close the current regular tab after the user clicks on "Continue" in the incognito
// interstitial.
TabModel regularTabModel = activity.getTabModelSelector().getModel(/*incognito=*/false);
// To create a new incognito tab after after the user clicks on "Continue" in the incognito
// interstitial.
TabCreator incognitoTabCreator = activity.getTabCreator(/*incognito=*/true);
AccountPickerBottomSheetCoordinator coordinator = new AccountPickerBottomSheetCoordinator(
activity, bottomSheetController,
new AccountPickerDelegateImpl(windowAndroid, activity.getActivityTab(),
new WebSigninBridge.Factory(), continueUrl),
regularTabModel, incognitoTabCreator, HelpAndFeedbackLauncherImpl.getInstance());
}
private SigninBridge() {}
}
......@@ -10,27 +10,7 @@ import android.content.Intent;
import android.os.Build;
import android.provider.Settings;
import androidx.annotation.VisibleForTesting;
import org.chromium.base.IntentUtils;
import org.chromium.base.ThreadUtils;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.chrome.browser.app.ChromeActivity;
import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncherImpl;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.signin.account_picker.AccountPickerDelegateImpl;
import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
import org.chromium.chrome.browser.signin.services.SigninManager;
import org.chromium.chrome.browser.signin.services.SigninMetricsUtils;
import org.chromium.chrome.browser.signin.services.WebSigninBridge;
import org.chromium.chrome.browser.signin.ui.account_picker.AccountPickerBottomSheetCoordinator;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetControllerProvider;
import org.chromium.components.signin.AccountManagerFacadeProvider;
import org.chromium.components.signin.metrics.AccountConsistencyPromoAction;
import org.chromium.ui.base.WindowAndroid;
/**
* Helper functions for sign-in and accounts.
......@@ -66,47 +46,4 @@ public class SigninUtils {
return IntentUtils.safeStartActivity(activity, new Intent(Settings.ACTION_SYNC_SETTINGS));
}
/**
* TODO(crbug/1165772): Move this method to SigninBridge.
*/
@CalledByNative
@VisibleForTesting
static void openAccountPickerBottomSheet(WindowAndroid windowAndroid, String continueUrl) {
ThreadUtils.assertOnUiThread();
SigninManager signinManager = IdentityServicesProvider.get().getSigninManager(
Profile.getLastUsedRegularProfile());
if (!signinManager.isSignInAllowed()) {
SigninMetricsUtils.logAccountConsistencyPromoAction(
AccountConsistencyPromoAction.SUPPRESSED_SIGNIN_NOT_ALLOWED);
return;
}
if (AccountManagerFacadeProvider.getInstance().tryGetGoogleAccounts().isEmpty()) {
// TODO(https://crbug.com/1119720): Show the bottom sheet when no accounts on device
// in the future. This disabling is only temporary.
SigninMetricsUtils.logAccountConsistencyPromoAction(
AccountConsistencyPromoAction.SUPPRESSED_NO_ACCOUNTS);
return;
}
BottomSheetController bottomSheetController =
BottomSheetControllerProvider.from(windowAndroid);
if (bottomSheetController == null) {
// The bottomSheetController can be null when google.com is just opened inside a
// bottom sheet for example. In this case, it's better to disable the account picker
// bottom sheet.
return;
}
ChromeActivity activity = (ChromeActivity) windowAndroid.getActivity().get();
// To close the current regular tab after the user clicks on "Continue" in the incognito
// interstitial.
TabModel regularTabModel = activity.getTabModelSelector().getModel(/*incognito=*/false);
// To create a new incognito tab after after the user clicks on "Continue" in the incognito
// interstitial.
TabCreator incognitoTabCreator = activity.getTabCreator(/*incognito=*/true);
AccountPickerBottomSheetCoordinator coordinator = new AccountPickerBottomSheetCoordinator(
activity, bottomSheetController,
new AccountPickerDelegateImpl(windowAndroid, activity.getActivityTab(),
new WebSigninBridge.Factory(), continueUrl),
regularTabModel, incognitoTabCreator, HelpAndFeedbackLauncherImpl.getInstance());
}
}
......@@ -27,10 +27,10 @@ import org.chromium.components.signin.metrics.AccountConsistencyPromoAction;
import org.chromium.ui.base.WindowAndroid;
/**
* This class tests the method {@link SigninUtils#openAccountPickerBottomSheet}
* JUnit tests for the class {@link SigninBridge}.
*/
@RunWith(BaseRobolectricTestRunner.class)
public class SigninUtilsAccountPickerTest {
public class SigninBridgeTest {
private static final String CONTINUE_URL = "https://test-continue-url.com";
@Rule
......@@ -65,7 +65,7 @@ public class SigninUtilsAccountPickerTest {
@SmallTest
public void testAccountPickerSuppressedWhenSigninNotAllowed() {
when(mSigninManagerMock.isSignInAllowed()).thenReturn(false);
SigninUtils.openAccountPickerBottomSheet(mWindowAndroidMock, CONTINUE_URL);
SigninBridge.openAccountPickerBottomSheet(mWindowAndroidMock, CONTINUE_URL);
checkHistogramRecording(AccountConsistencyPromoAction.SUPPRESSED_SIGNIN_NOT_ALLOWED);
}
......@@ -73,7 +73,7 @@ public class SigninUtilsAccountPickerTest {
@SmallTest
public void testAccountPickerSuppressedWhenNoAccountsOnDevice() {
when(mSigninManagerMock.isSignInAllowed()).thenReturn(true);
SigninUtils.openAccountPickerBottomSheet(mWindowAndroidMock, CONTINUE_URL);
SigninBridge.openAccountPickerBottomSheet(mWindowAndroidMock, CONTINUE_URL);
checkHistogramRecording(AccountConsistencyPromoAction.SUPPRESSED_NO_ACCOUNTS);
}
......
......@@ -8,7 +8,6 @@
#include "base/android/jni_string.h"
#include "base/android/scoped_java_ref.h"
#include "chrome/android/chrome_jni_headers/SigninBridge_jni.h"
#include "chrome/android/chrome_jni_headers/SigninUtils_jni.h"
#include "ui/android/window_android.h"
using base::android::JavaParamRef;
......@@ -38,7 +37,7 @@ void SigninBridge::OpenAccountPickerBottomSheet(
const std::string& continue_url) {
DCHECK(window);
JNIEnv* env = base::android::AttachCurrentThread();
Java_SigninUtils_openAccountPickerBottomSheet(
Java_SigninBridge_openAccountPickerBottomSheet(
env, window->GetJavaObject(),
base::android::ConvertUTF8ToJavaString(env, continue_url));
}
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