Commit 43b6d3ec authored by Alice Wang's avatar Alice Wang Committed by Commit Bot

[Android][Signin] Use a new listener in ConfirmSyncDataStateMachine

This CL introduces a new listener in ConfirmSyncDataStateMachine to
avoid confusion of reusing the dialog listener in the previous code.

Bug: 1038502
Change-Id: Ib90aea6a04c38458d01eaa5d497ef13e0aa0bc58
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1985840
Commit-Queue: Alice Wang <aliceywang@chromium.org>
Reviewed-by: default avatarBoris Sazonov <bsazonov@chromium.org>
Cr-Commit-Position: refs/heads/master@{#728159}
parent 04e97f62
...@@ -56,12 +56,30 @@ public class ConfirmSyncDataStateMachine ...@@ -56,12 +56,30 @@ public class ConfirmSyncDataStateMachine
int DONE = 4; int DONE = 4;
} }
/**
* Callback for completion of the {@link ConfirmSyncDataStateMachine}.
*/
interface Listener {
/**
* The state machine has completed and the state is done, or all necessary
* confirmations were given and the sign-in flow can proceed.
* @param wipeData Whether the user requested that existing data should be wiped.
*/
void onConfirm(boolean wipeData);
/**
* The state machine is cancelled or the user cancels the sign-in process
* of the dialogs.
*/
void onCancel();
}
@State @State
private int mState = State.BEFORE_OLD_ACCOUNT_DIALOG; private int mState = State.BEFORE_OLD_ACCOUNT_DIALOG;
private static final int ACCOUNT_CHECK_TIMEOUT_MS = 30000; private static final int ACCOUNT_CHECK_TIMEOUT_MS = 30000;
private final ConfirmImportSyncDataDialog.Listener mCallback; private final Listener mListener;
private final @Nullable String mOldAccountName; private final @Nullable String mOldAccountName;
private final String mNewAccountName; private final String mNewAccountName;
private final ConfirmSyncDataStateMachineDelegate mDelegate; private final ConfirmSyncDataStateMachineDelegate mDelegate;
...@@ -75,21 +93,18 @@ public class ConfirmSyncDataStateMachine ...@@ -75,21 +93,18 @@ public class ConfirmSyncDataStateMachine
* Create and run state machine, displaying the appropriate dialogs. * Create and run state machine, displaying the appropriate dialogs.
* @param oldAccountName the name of the last signed in account or null * @param oldAccountName the name of the last signed in account or null
* @param newAccountName the name of the account user is signing in with * @param newAccountName the name of the account user is signing in with
* @param callback the listener to receive the result of this state machine * @param listener the listener to receive the result of this state machine
* @param delegate the delegate responsible of showing dialogs * @param delegate the delegate responsible of showing dialogs
* TODO(https://crbug.com/1038502):
* Use a separate interface for the callback to avoid confusion.
*/ */
public ConfirmSyncDataStateMachine(ConfirmSyncDataStateMachineDelegate delegate, public ConfirmSyncDataStateMachine(ConfirmSyncDataStateMachineDelegate delegate,
@Nullable String oldAccountName, String newAccountName, @Nullable String oldAccountName, String newAccountName, Listener listener) {
ConfirmImportSyncDataDialog.Listener callback) {
ThreadUtils.assertOnUiThread(); ThreadUtils.assertOnUiThread();
assert !TextUtils.isEmpty(newAccountName) : "New account name must be provided."; assert !TextUtils.isEmpty(newAccountName) : "New account name must be provided.";
mDelegate = delegate; mDelegate = delegate;
mOldAccountName = oldAccountName; mOldAccountName = oldAccountName;
mNewAccountName = newAccountName; mNewAccountName = newAccountName;
mCallback = callback; mListener = listener;
// New account management status isn't needed right now, but fetching it // New account management status isn't needed right now, but fetching it
// can take a few seconds, so we kick it off early. // can take a few seconds, so we kick it off early.
...@@ -111,7 +126,7 @@ public class ConfirmSyncDataStateMachine ...@@ -111,7 +126,7 @@ public class ConfirmSyncDataStateMachine
mState = State.DONE; mState = State.DONE;
if (isBeingDestroyed) return; if (isBeingDestroyed) return;
mCallback.onCancel(); mListener.onCancel();
mDelegate.dismissAllDialogs(); mDelegate.dismissAllDialogs();
} }
...@@ -149,7 +164,7 @@ public class ConfirmSyncDataStateMachine ...@@ -149,7 +164,7 @@ public class ConfirmSyncDataStateMachine
break; break;
case State.AFTER_NEW_ACCOUNT_DIALOG: case State.AFTER_NEW_ACCOUNT_DIALOG:
mState = State.DONE; mState = State.DONE;
mCallback.onConfirm(mWipeData); mListener.onConfirm(mWipeData);
break; break;
case State.DONE: case State.DONE:
throw new IllegalStateException("Can't progress from DONE state!"); throw new IllegalStateException("Can't progress from DONE state!");
......
...@@ -439,7 +439,7 @@ public abstract class SigninFragmentBase ...@@ -439,7 +439,7 @@ public abstract class SigninFragmentBase
mConfirmSyncDataStateMachine = new ConfirmSyncDataStateMachine( mConfirmSyncDataStateMachine = new ConfirmSyncDataStateMachine(
new ConfirmSyncDataStateMachineDelegate(getChildFragmentManager()), new ConfirmSyncDataStateMachineDelegate(getChildFragmentManager()),
PrefServiceBridge.getInstance().getString(Pref.SYNC_LAST_ACCOUNT_NAME), PrefServiceBridge.getInstance().getString(Pref.SYNC_LAST_ACCOUNT_NAME),
mSelectedAccountName, new ConfirmImportSyncDataDialog.Listener() { mSelectedAccountName, new ConfirmSyncDataStateMachine.Listener() {
@Override @Override
public void onConfirm(boolean wipeData) { public void onConfirm(boolean wipeData) {
mConfirmSyncDataStateMachine = null; mConfirmSyncDataStateMachine = null;
......
...@@ -40,7 +40,7 @@ public class ConfirmSyncDataStateMachineTest { ...@@ -40,7 +40,7 @@ public class ConfirmSyncDataStateMachineTest {
private ConfirmSyncDataStateMachineDelegate mDelegateMock; private ConfirmSyncDataStateMachineDelegate mDelegateMock;
@Mock @Mock
private ConfirmImportSyncDataDialog.Listener mImportSyncDataListenerMock; private ConfirmSyncDataStateMachine.Listener mStateMachineListenerMock;
@Mock @Mock
private SigninManager mSigninManagerMock; private SigninManager mSigninManagerMock;
...@@ -63,13 +63,13 @@ public class ConfirmSyncDataStateMachineTest { ...@@ -63,13 +63,13 @@ public class ConfirmSyncDataStateMachineTest {
@Test(expected = AssertionError.class) @Test(expected = AssertionError.class)
public void testNewAccountNameCannotBeEmpty() { public void testNewAccountNameCannotBeEmpty() {
ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine( ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine(
mDelegateMock, mOldAccountName, null, mImportSyncDataListenerMock); mDelegateMock, mOldAccountName, null, mStateMachineListenerMock);
} }
@Test @Test
public void testImportSyncDataDialogShownWhenOldAndNewAccountNamesAreDifferent() { public void testImportSyncDataDialogShownWhenOldAndNewAccountNamesAreDifferent() {
ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine( ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine(
mDelegateMock, mOldAccountName, mNewAccountName, mImportSyncDataListenerMock); mDelegateMock, mOldAccountName, mNewAccountName, mStateMachineListenerMock);
verify(mDelegateMock) verify(mDelegateMock)
.showConfirmImportSyncDataDialog(any(ConfirmImportSyncDataDialog.Listener.class), .showConfirmImportSyncDataDialog(any(ConfirmImportSyncDataDialog.Listener.class),
eq(mOldAccountName), eq(mNewAccountName)); eq(mOldAccountName), eq(mNewAccountName));
...@@ -79,7 +79,7 @@ public class ConfirmSyncDataStateMachineTest { ...@@ -79,7 +79,7 @@ public class ConfirmSyncDataStateMachineTest {
public void testProgressDialogShownWhenOldAndNewAccountNamesAreEqual() { public void testProgressDialogShownWhenOldAndNewAccountNamesAreEqual() {
String oldAndNewAccountName = "test.old.new@testdomain.com"; String oldAndNewAccountName = "test.old.new@testdomain.com";
ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine(mDelegateMock, ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine(mDelegateMock,
oldAndNewAccountName, oldAndNewAccountName, mImportSyncDataListenerMock); oldAndNewAccountName, oldAndNewAccountName, mStateMachineListenerMock);
verify(mDelegateMock, never()) verify(mDelegateMock, never())
.showConfirmImportSyncDataDialog( .showConfirmImportSyncDataDialog(
any(ConfirmImportSyncDataDialog.Listener.class), anyString(), anyString()); any(ConfirmImportSyncDataDialog.Listener.class), anyString(), anyString());
...@@ -91,7 +91,7 @@ public class ConfirmSyncDataStateMachineTest { ...@@ -91,7 +91,7 @@ public class ConfirmSyncDataStateMachineTest {
@Test @Test
public void testProgressDialogShownWhenOldAccountNameIsEmpty() { public void testProgressDialogShownWhenOldAccountNameIsEmpty() {
ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine( ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine(
mDelegateMock, null, mNewAccountName, mImportSyncDataListenerMock); mDelegateMock, null, mNewAccountName, mStateMachineListenerMock);
verify(mDelegateMock, never()) verify(mDelegateMock, never())
.showConfirmImportSyncDataDialog( .showConfirmImportSyncDataDialog(
any(ConfirmImportSyncDataDialog.Listener.class), anyString(), anyString()); any(ConfirmImportSyncDataDialog.Listener.class), anyString(), anyString());
...@@ -104,9 +104,9 @@ public class ConfirmSyncDataStateMachineTest { ...@@ -104,9 +104,9 @@ public class ConfirmSyncDataStateMachineTest {
public void testListenerConfirmedWhenNewAccountIsNotManaged() { public void testListenerConfirmedWhenNewAccountIsNotManaged() {
mockSigninManagerIsAccountManaged(false); mockSigninManagerIsAccountManaged(false);
ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine( ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine(
mDelegateMock, null, mNewAccountName, mImportSyncDataListenerMock); mDelegateMock, null, mNewAccountName, mStateMachineListenerMock);
verify(mDelegateMock).dismissAllDialogs(); verify(mDelegateMock).dismissAllDialogs();
verify(mImportSyncDataListenerMock).onConfirm(false); verify(mStateMachineListenerMock).onConfirm(false);
} }
@Test @Test
...@@ -114,7 +114,7 @@ public class ConfirmSyncDataStateMachineTest { ...@@ -114,7 +114,7 @@ public class ConfirmSyncDataStateMachineTest {
mockSigninManagerIsAccountManaged(true); mockSigninManagerIsAccountManaged(true);
when(mSigninManagerNativeMock.extractDomainName(anyString())).thenReturn(mNewAccountName); when(mSigninManagerNativeMock.extractDomainName(anyString())).thenReturn(mNewAccountName);
ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine( ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine(
mDelegateMock, null, mNewAccountName, mImportSyncDataListenerMock); mDelegateMock, null, mNewAccountName, mStateMachineListenerMock);
verify(mDelegateMock) verify(mDelegateMock)
.showSignInToManagedAccountDialog( .showSignInToManagedAccountDialog(
any(ConfirmManagedSyncDataDialog.Listener.class), eq(mNewAccountName)); any(ConfirmManagedSyncDataDialog.Listener.class), eq(mNewAccountName));
...@@ -126,7 +126,7 @@ public class ConfirmSyncDataStateMachineTest { ...@@ -126,7 +126,7 @@ public class ConfirmSyncDataStateMachineTest {
String domain = "manageddomain.com"; String domain = "manageddomain.com";
when(mSigninManagerNativeMock.extractDomainName(newAccountName)).thenReturn(domain); when(mSigninManagerNativeMock.extractDomainName(newAccountName)).thenReturn(domain);
ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine( ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine(
mDelegateMock, null, newAccountName, mImportSyncDataListenerMock); mDelegateMock, null, newAccountName, mStateMachineListenerMock);
verify(mDelegateMock, never()) verify(mDelegateMock, never())
.showSignInToManagedAccountDialog( .showSignInToManagedAccountDialog(
any(ConfirmManagedSyncDataDialog.Listener.class), anyString()); any(ConfirmManagedSyncDataDialog.Listener.class), anyString());
...@@ -142,25 +142,25 @@ public class ConfirmSyncDataStateMachineTest { ...@@ -142,25 +142,25 @@ public class ConfirmSyncDataStateMachineTest {
@Test @Test
public void testCancelWhenIsNotBeingDestroyed() { public void testCancelWhenIsNotBeingDestroyed() {
ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine( ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine(
mDelegateMock, mOldAccountName, mNewAccountName, mImportSyncDataListenerMock); mDelegateMock, mOldAccountName, mNewAccountName, mStateMachineListenerMock);
stateMachine.onCancel(); stateMachine.onCancel();
verify(mImportSyncDataListenerMock).onCancel(); verify(mStateMachineListenerMock).onCancel();
verify(mDelegateMock).dismissAllDialogs(); verify(mDelegateMock).dismissAllDialogs();
} }
@Test @Test
public void testCancelWhenIsBeingDestroyed() { public void testCancelWhenIsBeingDestroyed() {
ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine( ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine(
mDelegateMock, mOldAccountName, mNewAccountName, mImportSyncDataListenerMock); mDelegateMock, mOldAccountName, mNewAccountName, mStateMachineListenerMock);
stateMachine.cancel(true); stateMachine.cancel(true);
verify(mImportSyncDataListenerMock, never()).onCancel(); verify(mStateMachineListenerMock, never()).onCancel();
verify(mDelegateMock, never()).dismissAllDialogs(); verify(mDelegateMock, never()).dismissAllDialogs();
} }
@Test(expected = IllegalStateException.class) @Test(expected = IllegalStateException.class)
public void testStateCannotChangeOnceDone() { public void testStateCannotChangeOnceDone() {
ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine( ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine(
mDelegateMock, mOldAccountName, mNewAccountName, mImportSyncDataListenerMock); mDelegateMock, mOldAccountName, mNewAccountName, mStateMachineListenerMock);
stateMachine.cancel(true); stateMachine.cancel(true);
stateMachine.onConfirm(); stateMachine.onConfirm();
} }
......
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