Skip to content

Commit 7c8c4ce

Browse files
Nick BirnieChromium LUCI CQ
Nick Birnie
authored and
Chromium LUCI CQ
committed
[BoC Signin] Add toast for when signin is attempted while prohibited.
Approved Merge Issue: https://bugs.chromium.org/p/chromium/issues/detail?id=1427314 (cherry picked from commit dd8fea9) Bug: 1427314, b/273822882 Change-Id: I663e3eed40008ab2e94048f0484d842297952c1b Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4354853 Reviewed-by: Justin DeWitt <dewittj@chromium.org> Commit-Queue: Nick Birnie <birnie@google.com> Cr-Original-Commit-Position: refs/heads/main@{#1121503} Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4376155 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Cr-Commit-Position: refs/branch-heads/5672@{#74} Cr-Branched-From: 5f2a724-refs/heads/main@{#1121455}
1 parent 408b50a commit 7c8c4ce

File tree

4 files changed

+61
-20
lines changed

4 files changed

+61
-20
lines changed

chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/signinbottomsheet/SigninBottomSheetCoordinator.java

+42-20
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@
2424
import org.chromium.components.signin.base.GoogleServiceAuthError;
2525
import org.chromium.components.signin.identitymanager.AccountInfoServiceProvider;
2626
import org.chromium.ui.base.WindowAndroid;
27+
import org.chromium.ui.widget.Toast;
2728

2829
/** Coordinator for displaying the signin flow in the bottom sheet. */
2930
public class SigninBottomSheetCoordinator implements AccountPickerDelegate {
3031
private final Profile mProfile;
3132
private final WindowAndroid mWindowAndroid;
3233
private final BottomSheetController mController;
3334
private final SigninManager mSigninManager;
35+
private boolean mSetTestToast;
3436
private AccountPickerBottomSheetCoordinator mAccountPickerBottomSheetCoordinator;
3537

3638
public SigninBottomSheetCoordinator(
@@ -39,6 +41,7 @@ public SigninBottomSheetCoordinator(
3941
mController = controller;
4042
mProfile = profile;
4143
mSigninManager = IdentityServicesProvider.get().getSigninManager(mProfile);
44+
mSetTestToast = false;
4245
}
4346

4447
@Override
@@ -49,26 +52,33 @@ public void signIn(
4952
String accountEmail, Callback<GoogleServiceAuthError> onSignInErrorCallback) {
5053
Account account = AccountUtils.createAccountFromName(accountEmail);
5154
AccountInfoServiceProvider.get().getAccountInfoByEmail(accountEmail).then(accountInfo -> {
52-
mSigninManager.signin(account, new SigninManager.SignInCallback() {
53-
@Override
54-
public void onSignInComplete() {
55-
RecordHistogram.recordBooleanHistogram(
56-
"ContentSuggestions.Feed.SignInFromFeedAction.SignInSuccessful", true);
57-
mController.hideContent(mController.getCurrentSheetContent(), true);
58-
}
59-
60-
@Override
61-
public void onSignInAborted() {
62-
RecordHistogram.recordBooleanHistogram(
63-
"ContentSuggestions.Feed.SignInFromFeedAction.SignInSuccessful", false);
64-
// onSignInErrorCallback is called by the WebSigninBridge which is not
65-
// implemented in this signin flow as we do not need to wait for cookies to
66-
// propagate before proceeding with the Feed refresh. Instead of calling
67-
// AccountPickerBottomSheetMediator.onSigninFailed() from the signin bridge we
68-
// directly perform the creation of the "try again" bottom sheet view:
69-
mAccountPickerBottomSheetCoordinator.setTryAgainBottomSheetView();
70-
}
71-
});
55+
if (mSigninManager.isSigninAllowed()) {
56+
mSigninManager.signin(account, new SigninManager.SignInCallback() {
57+
@Override
58+
public void onSignInComplete() {
59+
RecordHistogram.recordBooleanHistogram(
60+
"ContentSuggestions.Feed.SignInFromFeedAction.SignInSuccessful",
61+
true);
62+
mController.hideContent(mController.getCurrentSheetContent(), true);
63+
}
64+
65+
@Override
66+
public void onSignInAborted() {
67+
RecordHistogram.recordBooleanHistogram(
68+
"ContentSuggestions.Feed.SignInFromFeedAction.SignInSuccessful",
69+
false);
70+
// onSignInErrorCallback is called by the WebSigninBridge which is not
71+
// implemented in this signin flow as we do not need to wait for cookies to
72+
// propagate before proceeding with the Feed refresh. Instead of calling
73+
// AccountPickerBottomSheetMediator.onSigninFailed() from the signin bridge
74+
// we directly perform the creation of the "try again" bottom sheet view:
75+
mAccountPickerBottomSheetCoordinator.setTryAgainBottomSheetView();
76+
}
77+
});
78+
} else {
79+
makeSigninNotAllowedToast();
80+
mController.hideContent(mController.getCurrentSheetContent(), true);
81+
}
7282
});
7383
}
7484

@@ -82,6 +92,13 @@ public void show() {
8292
mWindowAndroid, mController, this, new BottomSheetStrings());
8393
}
8494

95+
private void makeSigninNotAllowedToast() {
96+
if (mSetTestToast) return;
97+
Toast.makeText(mWindowAndroid.getActivity().get(),
98+
R.string.sign_in_to_chrome_disabled_by_user_summary, Toast.LENGTH_SHORT)
99+
.show();
100+
}
101+
85102
@VisibleForTesting
86103
public View getBottomSheetViewForTesting() {
87104
return mAccountPickerBottomSheetCoordinator.getBottomSheetViewForTesting();
@@ -93,6 +110,11 @@ public void setAccountPickerBottomSheetCoordinator(
93110
this.mAccountPickerBottomSheetCoordinator = accountPickerBottomSheetCoordinator;
94111
}
95112

113+
@VisibleForTesting
114+
public void setToastOverrideForTesting() {
115+
this.mSetTestToast = true;
116+
}
117+
96118
/** Stores bottom sheet strings for signin from back of card entry point */
97119
public static class BottomSheetStrings implements AccountPickerBottomSheetStrings {
98120
/** Returns the title string for the bottom sheet dialog. */

chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/signinbottomsheet/SigninBottomSheetCoordinatorTest.java

+15
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import static org.mockito.Mockito.any;
99
import static org.mockito.Mockito.doAnswer;
1010
import static org.mockito.Mockito.mock;
11+
import static org.mockito.Mockito.never;
1112
import static org.mockito.Mockito.verify;
1213
import static org.mockito.Mockito.when;
1314

@@ -28,6 +29,7 @@
2829
import org.chromium.chrome.browser.signin.services.SigninManager;
2930
import org.chromium.chrome.browser.ui.signin.account_picker.AccountPickerBottomSheetCoordinator;
3031
import org.chromium.chrome.test.util.browser.signin.AccountManagerTestRule;
32+
import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent;
3133
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
3234
import org.chromium.components.signin.AccountUtils;
3335
import org.chromium.components.signin.base.CoreAccountInfo;
@@ -48,6 +50,9 @@ public class SigninBottomSheetCoordinatorTest {
4850
@Mock
4951
private BottomSheetController mBottomSheetControllerMock;
5052

53+
@Mock
54+
private BottomSheetContent mBottomSheetContentMock;
55+
5156
@Mock
5257
private WindowAndroid mWindowAndroidMock;
5358

@@ -71,6 +76,7 @@ public void setUp() {
7176
IdentityServicesProvider.setInstanceForTests(mock(IdentityServicesProvider.class));
7277
when(IdentityServicesProvider.get().getSigninManager(mProfileMock))
7378
.thenReturn(mSigninManagerMock);
79+
when(mSigninManagerMock.isSigninAllowed()).thenReturn(true);
7480
mCoreAccountInfo = mAccountManagerTestRule.addAccount(TEST_EMAIL);
7581
mSigninCoordinator = new SigninBottomSheetCoordinator(
7682
mWindowAndroidMock, mBottomSheetControllerMock, mProfileMock);
@@ -109,4 +115,13 @@ public void testSignInAborted() {
109115
mSigninCoordinator.signIn(TEST_EMAIL, error -> {});
110116
histogramWatcher.assertExpected();
111117
}
118+
119+
@Test
120+
public void testSignInNotAllowed() {
121+
when(mSigninManagerMock.isSigninAllowed()).thenReturn(false);
122+
mSigninCoordinator.setToastOverrideForTesting();
123+
mSigninCoordinator.signIn(TEST_EMAIL, error -> {});
124+
verify(mSigninManagerMock, never())
125+
.signin(eq(AccountUtils.createAccountFromName(TEST_EMAIL)), any());
126+
}
112127
}

chrome/browser/ui/android/strings/android_chrome_strings.grd

+3
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,9 @@ CHAR_LIMIT guidelines:
290290
<message name="IDS_SIGN_IN_TO_CHROME_DISABLED_SUMMARY" desc="A descriptive line of text that appears under the 'Sign in to Chrome' option, in Chrome Settings on Android. The text explains why 'Sign in to Chrome' is disabled. 'Administrator' refers to the IT administrator of the company/organization that owns the user’s device.">
291291
Disabled by the administrator of this device
292292
</message>
293+
<message name="IDS_SIGN_IN_TO_CHROME_DISABLED_BY_USER_SUMMARY" desc="A descriptive line of text that appears when a user tries to signin when signin is disabled by the Google Services option in settings. The text explains why 'Sign in to Chrome' is not available.">
294+
Not available on your device
295+
</message>
293296
<message name="IDS_SIGN_IN_GOOGLE_ACTIVITY_CONTROLS_TITLE" desc="Title of Google activity controls preference in signed in accounts settings screen">
294297
Google activity controls
295298
</message>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ff000a9dc3e0cecfb71597667d90ac50a2b1b3e5

0 commit comments

Comments
 (0)