Commit cfe293ee authored by Alice Wang's avatar Alice Wang Committed by Commit Bot

[Android][Signin] Move startSigninActivityIfAllowed to SigninUtils

This CL moves the static method startSigninActivityIfAllowed from
SigninPromoUtil to SigninUtils.

Bug: 1033425
Change-Id: Ia88eae874cc198fe3291f05e3259b4f125e67b66
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1968983Reviewed-by: default avatarBoris Sazonov <bsazonov@chromium.org>
Commit-Queue: Alice Wang <aliceywang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#727460}
parent b5b283a2
...@@ -194,6 +194,7 @@ chrome_junit_test_java_sources = [ ...@@ -194,6 +194,7 @@ chrome_junit_test_java_sources = [
"junit/src/org/chromium/chrome/browser/signin/ConfirmSyncDataStateMachineDelegateTest.java", "junit/src/org/chromium/chrome/browser/signin/ConfirmSyncDataStateMachineDelegateTest.java",
"junit/src/org/chromium/chrome/browser/signin/SigninManagerTest.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/SigninPromoUtilTest.java",
"junit/src/org/chromium/chrome/browser/signin/SigninUtilsStartActivityTest.java",
"junit/src/org/chromium/chrome/browser/snackbar/SnackbarCollectionUnitTest.java", "junit/src/org/chromium/chrome/browser/snackbar/SnackbarCollectionUnitTest.java",
"junit/src/org/chromium/chrome/browser/suggestions/SuggestionsImageFetcherTest.java", "junit/src/org/chromium/chrome/browser/suggestions/SuggestionsImageFetcherTest.java",
"junit/src/org/chromium/chrome/browser/suggestions/tile/TileGroupUnitTest.java", "junit/src/org/chromium/chrome/browser/suggestions/tile/TileGroupUnitTest.java",
......
...@@ -26,6 +26,7 @@ import org.chromium.chrome.browser.signin.ProfileDataCache; ...@@ -26,6 +26,7 @@ import org.chromium.chrome.browser.signin.ProfileDataCache;
import org.chromium.chrome.browser.signin.SigninManager.SignInAllowedObserver; import org.chromium.chrome.browser.signin.SigninManager.SignInAllowedObserver;
import org.chromium.chrome.browser.signin.SigninPromoController; import org.chromium.chrome.browser.signin.SigninPromoController;
import org.chromium.chrome.browser.signin.SigninPromoUtil; import org.chromium.chrome.browser.signin.SigninPromoUtil;
import org.chromium.chrome.browser.signin.SigninUtils;
import org.chromium.chrome.browser.sync.ProfileSyncService; import org.chromium.chrome.browser.sync.ProfileSyncService;
import org.chromium.chrome.browser.sync.ProfileSyncService.SyncStateChangedListener; import org.chromium.chrome.browser.sync.ProfileSyncService.SyncStateChangedListener;
import org.chromium.chrome.browser.util.ViewUtils; import org.chromium.chrome.browser.util.ViewUtils;
...@@ -76,7 +77,7 @@ public class SignInPreference ...@@ -76,7 +77,7 @@ public class SignInPreference
mProfileDataCache = new ProfileDataCache(context, imageSize); mProfileDataCache = new ProfileDataCache(context, imageSize);
setOnPreferenceClickListener(preference setOnPreferenceClickListener(preference
-> SigninPromoUtil.startSigninActivityIfAllowed( -> SigninUtils.startSigninActivityIfAllowed(
getContext(), SigninAccessPoint.SETTINGS)); getContext(), SigninAccessPoint.SETTINGS));
// State will be updated in registerForUpdates. // State will be updated in registerForUpdates.
......
...@@ -6,7 +6,6 @@ package org.chromium.chrome.browser.signin; ...@@ -6,7 +6,6 @@ package org.chromium.chrome.browser.signin;
import android.accounts.Account; import android.accounts.Account;
import android.app.Activity; import android.app.Activity;
import android.content.Context;
import android.support.v4.util.ArraySet; import android.support.v4.util.ArraySet;
import android.text.TextUtils; import android.text.TextUtils;
...@@ -18,7 +17,6 @@ import org.chromium.chrome.browser.ChromeVersionInfo; ...@@ -18,7 +17,6 @@ import org.chromium.chrome.browser.ChromeVersionInfo;
import org.chromium.chrome.browser.preferences.ChromePreferenceManager; import org.chromium.chrome.browser.preferences.ChromePreferenceManager;
import org.chromium.chrome.browser.preferences.Pref; import org.chromium.chrome.browser.preferences.Pref;
import org.chromium.chrome.browser.preferences.PrefServiceBridge; import org.chromium.chrome.browser.preferences.PrefServiceBridge;
import org.chromium.chrome.browser.settings.ManagedPreferencesUtils;
import org.chromium.components.signin.AccountManagerFacade; import org.chromium.components.signin.AccountManagerFacade;
import org.chromium.components.signin.ChromeSigninController; import org.chromium.components.signin.ChromeSigninController;
import org.chromium.components.signin.metrics.SigninAccessPoint; import org.chromium.components.signin.metrics.SigninAccessPoint;
...@@ -52,7 +50,7 @@ public class SigninPromoUtil { ...@@ -52,7 +50,7 @@ public class SigninPromoUtil {
return false; return false;
} }
startSigninActivityIfAllowed(activity, SigninAccessPoint.SIGNIN_PROMO); SigninUtils.startSigninActivityIfAllowed(activity, SigninAccessPoint.SIGNIN_PROMO);
preferenceManager.setSigninPromoLastShownVersion(currentMajorVersion); preferenceManager.setSigninPromoLastShownVersion(currentMajorVersion);
preferenceManager.setSigninPromoLastAccountNames( preferenceManager.setSigninPromoLastAccountNames(
new ArraySet<>(AccountManagerFacade.get().tryGetGoogleAccountNames())); new ArraySet<>(AccountManagerFacade.get().tryGetGoogleAccountNames()));
...@@ -119,24 +117,6 @@ public class SigninPromoUtil { ...@@ -119,24 +117,6 @@ public class SigninPromoUtil {
signinPromoController.setupPromoView(view.getContext(), view, profileData, listener); signinPromoController.setupPromoView(view.getContext(), view, profileData, listener);
} }
/**
* Launches the {@link SigninActivity} if signin is allowed.
* @param accessPoint {@link SigninAccessPoint} for starting sign-in flow.
* @return a boolean indicating if the SigninActivity is launched.
*/
public static boolean startSigninActivityIfAllowed(
Context context, @SigninAccessPoint int accessPoint) {
SigninManager signinManager = IdentityServicesProvider.get().getSigninManager();
if (signinManager.isSignInAllowed()) {
SigninActivityLauncher.get().launchActivity(context, accessPoint);
return true;
}
if (signinManager.isSigninDisabledByPolicy()) {
ManagedPreferencesUtils.showManagedByAdministratorToast(context);
}
return false;
}
/** /**
* A convenience method to create an SigninActivity, passing the access point as an * A convenience method to create an SigninActivity, passing the access point as an
* intent extra. * intent extra.
...@@ -147,7 +127,7 @@ public class SigninPromoUtil { ...@@ -147,7 +127,7 @@ public class SigninPromoUtil {
private static void openSigninActivityForPromo(WindowAndroid window, int accessPoint) { private static void openSigninActivityForPromo(WindowAndroid window, int accessPoint) {
Activity activity = window.getActivity().get(); Activity activity = window.getActivity().get();
if (activity != null) { if (activity != null) {
startSigninActivityIfAllowed(activity, accessPoint); SigninUtils.startSigninActivityIfAllowed(activity, accessPoint);
} }
} }
} }
...@@ -18,11 +18,13 @@ import org.chromium.base.annotations.CalledByNative; ...@@ -18,11 +18,13 @@ import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.NativeMethods; import org.chromium.base.annotations.NativeMethods;
import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.profiles.ProfileAccountManagementMetrics; import org.chromium.chrome.browser.profiles.ProfileAccountManagementMetrics;
import org.chromium.chrome.browser.settings.ManagedPreferencesUtils;
import org.chromium.chrome.browser.settings.sync.AccountManagementFragment; import org.chromium.chrome.browser.settings.sync.AccountManagementFragment;
import org.chromium.chrome.browser.util.IntentUtils; import org.chromium.chrome.browser.util.IntentUtils;
import org.chromium.components.signin.AccountManagerFacade; import org.chromium.components.signin.AccountManagerFacade;
import org.chromium.components.signin.GAIAServiceType; import org.chromium.components.signin.GAIAServiceType;
import org.chromium.components.signin.SigninActivityMonitor; import org.chromium.components.signin.SigninActivityMonitor;
import org.chromium.components.signin.metrics.SigninAccessPoint;
import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.base.WindowAndroid;
/** /**
...@@ -148,6 +150,24 @@ public class SigninUtils { ...@@ -148,6 +150,24 @@ public class SigninUtils {
return false; return false;
} }
/**
* Launches the {@link SigninActivity} if signin is allowed.
* @param accessPoint {@link SigninAccessPoint} for starting sign-in flow.
* @return a boolean indicating if the SigninActivity is launched.
*/
public static boolean startSigninActivityIfAllowed(
Context context, @SigninAccessPoint int accessPoint) {
SigninManager signinManager = IdentityServicesProvider.get().getSigninManager();
if (signinManager.isSignInAllowed()) {
SigninActivityLauncher.get().launchActivity(context, accessPoint);
return true;
}
if (signinManager.isSigninDisabledByPolicy()) {
ManagedPreferencesUtils.showManagedByAdministratorToast(context);
}
return false;
}
/** /**
* Log a UMA event for a given metric and a signin type. * Log a UMA event for a given metric and a signin type.
* @param metric One of ProfileAccountManagementMetrics constants. * @param metric One of ProfileAccountManagementMetrics constants.
......
// 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.signin;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;
import android.content.Context;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadows.ShadowToast;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.chrome.R;
import org.chromium.components.signin.metrics.SigninAccessPoint;
/** Tests for the method startSigninActivityIfAllowed {@link SigninUtils}. */
@RunWith(BaseRobolectricTestRunner.class)
public class SigninUtilsStartActivityTest {
@Mock
private SigninManager mSigninManagerMock;
@Mock
private SigninActivityLauncher mLauncherMock;
private final Context mContext = RuntimeEnvironment.application.getApplicationContext();
@Before
public void setUp() {
initMocks(this);
IdentityServicesProvider.setInstanceForTests(mock(IdentityServicesProvider.class));
when(IdentityServicesProvider.get().getSigninManager()).thenReturn(mSigninManagerMock);
SigninActivityLauncher.setLauncherForTest(mLauncherMock);
}
@Test
public void testSigninActivityLaunchedWhenSigninIsAllowed() {
when(mSigninManagerMock.isSignInAllowed()).thenReturn(true);
Assert.assertTrue(
SigninUtils.startSigninActivityIfAllowed(mContext, SigninAccessPoint.SETTINGS));
verify(SigninActivityLauncher.get()).launchActivity(mContext, SigninAccessPoint.SETTINGS);
}
@Test
public void testSigninActivityNotLaunchedWhenSigninIsNotAllowed() {
when(mSigninManagerMock.isSignInAllowed()).thenReturn(false);
when(mSigninManagerMock.isSigninDisabledByPolicy()).thenReturn(false);
Object toastBeforeCall = ShadowToast.getLatestToast();
Assert.assertFalse(
SigninUtils.startSigninActivityIfAllowed(mContext, SigninAccessPoint.SETTINGS));
Object toastAfterCall = ShadowToast.getLatestToast();
verify(SigninActivityLauncher.get(), never()).launchActivity(any(Context.class), anyInt());
Assert.assertEquals(
"No new toast should be made during the call!", toastBeforeCall, toastAfterCall);
}
@Test
public void testToastShownWhenSigninIsDisabledByPolicy() {
when(mSigninManagerMock.isSignInAllowed()).thenReturn(false);
when(mSigninManagerMock.isSigninDisabledByPolicy()).thenReturn(true);
Assert.assertFalse(
SigninUtils.startSigninActivityIfAllowed(mContext, SigninAccessPoint.SETTINGS));
verify(SigninActivityLauncher.get(), never()).launchActivity(any(Context.class), anyInt());
Assert.assertEquals(
mContext.getResources().getString(R.string.managed_by_your_organization),
ShadowToast.getTextOfLatestToast());
}
}
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