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
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
private int mState = State.BEFORE_OLD_ACCOUNT_DIALOG;
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 String mNewAccountName;
private final ConfirmSyncDataStateMachineDelegate mDelegate;
......@@ -75,21 +93,18 @@ public class ConfirmSyncDataStateMachine
* Create and run state machine, displaying the appropriate dialogs.
* @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 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
* TODO(https://crbug.com/1038502):
* Use a separate interface for the callback to avoid confusion.
*/
public ConfirmSyncDataStateMachine(ConfirmSyncDataStateMachineDelegate delegate,
@Nullable String oldAccountName, String newAccountName,
ConfirmImportSyncDataDialog.Listener callback) {
@Nullable String oldAccountName, String newAccountName, Listener listener) {
ThreadUtils.assertOnUiThread();
assert !TextUtils.isEmpty(newAccountName) : "New account name must be provided.";
mDelegate = delegate;
mOldAccountName = oldAccountName;
mNewAccountName = newAccountName;
mCallback = callback;
mListener = listener;
// New account management status isn't needed right now, but fetching it
// can take a few seconds, so we kick it off early.
......@@ -111,7 +126,7 @@ public class ConfirmSyncDataStateMachine
mState = State.DONE;
if (isBeingDestroyed) return;
mCallback.onCancel();
mListener.onCancel();
mDelegate.dismissAllDialogs();
}
......@@ -149,7 +164,7 @@ public class ConfirmSyncDataStateMachine
break;
case State.AFTER_NEW_ACCOUNT_DIALOG:
mState = State.DONE;
mCallback.onConfirm(mWipeData);
mListener.onConfirm(mWipeData);
break;
case State.DONE:
throw new IllegalStateException("Can't progress from DONE state!");
......
......@@ -439,7 +439,7 @@ public abstract class SigninFragmentBase
mConfirmSyncDataStateMachine = new ConfirmSyncDataStateMachine(
new ConfirmSyncDataStateMachineDelegate(getChildFragmentManager()),
PrefServiceBridge.getInstance().getString(Pref.SYNC_LAST_ACCOUNT_NAME),
mSelectedAccountName, new ConfirmImportSyncDataDialog.Listener() {
mSelectedAccountName, new ConfirmSyncDataStateMachine.Listener() {
@Override
public void onConfirm(boolean wipeData) {
mConfirmSyncDataStateMachine = null;
......
......@@ -40,7 +40,7 @@ public class ConfirmSyncDataStateMachineTest {
private ConfirmSyncDataStateMachineDelegate mDelegateMock;
@Mock
private ConfirmImportSyncDataDialog.Listener mImportSyncDataListenerMock;
private ConfirmSyncDataStateMachine.Listener mStateMachineListenerMock;
@Mock
private SigninManager mSigninManagerMock;
......@@ -63,13 +63,13 @@ public class ConfirmSyncDataStateMachineTest {
@Test(expected = AssertionError.class)
public void testNewAccountNameCannotBeEmpty() {
ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine(
mDelegateMock, mOldAccountName, null, mImportSyncDataListenerMock);
mDelegateMock, mOldAccountName, null, mStateMachineListenerMock);
}
@Test
public void testImportSyncDataDialogShownWhenOldAndNewAccountNamesAreDifferent() {
ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine(
mDelegateMock, mOldAccountName, mNewAccountName, mImportSyncDataListenerMock);
mDelegateMock, mOldAccountName, mNewAccountName, mStateMachineListenerMock);
verify(mDelegateMock)
.showConfirmImportSyncDataDialog(any(ConfirmImportSyncDataDialog.Listener.class),
eq(mOldAccountName), eq(mNewAccountName));
......@@ -79,7 +79,7 @@ public class ConfirmSyncDataStateMachineTest {
public void testProgressDialogShownWhenOldAndNewAccountNamesAreEqual() {
String oldAndNewAccountName = "test.old.new@testdomain.com";
ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine(mDelegateMock,
oldAndNewAccountName, oldAndNewAccountName, mImportSyncDataListenerMock);
oldAndNewAccountName, oldAndNewAccountName, mStateMachineListenerMock);
verify(mDelegateMock, never())
.showConfirmImportSyncDataDialog(
any(ConfirmImportSyncDataDialog.Listener.class), anyString(), anyString());
......@@ -91,7 +91,7 @@ public class ConfirmSyncDataStateMachineTest {
@Test
public void testProgressDialogShownWhenOldAccountNameIsEmpty() {
ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine(
mDelegateMock, null, mNewAccountName, mImportSyncDataListenerMock);
mDelegateMock, null, mNewAccountName, mStateMachineListenerMock);
verify(mDelegateMock, never())
.showConfirmImportSyncDataDialog(
any(ConfirmImportSyncDataDialog.Listener.class), anyString(), anyString());
......@@ -104,9 +104,9 @@ public class ConfirmSyncDataStateMachineTest {
public void testListenerConfirmedWhenNewAccountIsNotManaged() {
mockSigninManagerIsAccountManaged(false);
ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine(
mDelegateMock, null, mNewAccountName, mImportSyncDataListenerMock);
mDelegateMock, null, mNewAccountName, mStateMachineListenerMock);
verify(mDelegateMock).dismissAllDialogs();
verify(mImportSyncDataListenerMock).onConfirm(false);
verify(mStateMachineListenerMock).onConfirm(false);
}
@Test
......@@ -114,7 +114,7 @@ public class ConfirmSyncDataStateMachineTest {
mockSigninManagerIsAccountManaged(true);
when(mSigninManagerNativeMock.extractDomainName(anyString())).thenReturn(mNewAccountName);
ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine(
mDelegateMock, null, mNewAccountName, mImportSyncDataListenerMock);
mDelegateMock, null, mNewAccountName, mStateMachineListenerMock);
verify(mDelegateMock)
.showSignInToManagedAccountDialog(
any(ConfirmManagedSyncDataDialog.Listener.class), eq(mNewAccountName));
......@@ -126,7 +126,7 @@ public class ConfirmSyncDataStateMachineTest {
String domain = "manageddomain.com";
when(mSigninManagerNativeMock.extractDomainName(newAccountName)).thenReturn(domain);
ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine(
mDelegateMock, null, newAccountName, mImportSyncDataListenerMock);
mDelegateMock, null, newAccountName, mStateMachineListenerMock);
verify(mDelegateMock, never())
.showSignInToManagedAccountDialog(
any(ConfirmManagedSyncDataDialog.Listener.class), anyString());
......@@ -142,25 +142,25 @@ public class ConfirmSyncDataStateMachineTest {
@Test
public void testCancelWhenIsNotBeingDestroyed() {
ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine(
mDelegateMock, mOldAccountName, mNewAccountName, mImportSyncDataListenerMock);
mDelegateMock, mOldAccountName, mNewAccountName, mStateMachineListenerMock);
stateMachine.onCancel();
verify(mImportSyncDataListenerMock).onCancel();
verify(mStateMachineListenerMock).onCancel();
verify(mDelegateMock).dismissAllDialogs();
}
@Test
public void testCancelWhenIsBeingDestroyed() {
ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine(
mDelegateMock, mOldAccountName, mNewAccountName, mImportSyncDataListenerMock);
mDelegateMock, mOldAccountName, mNewAccountName, mStateMachineListenerMock);
stateMachine.cancel(true);
verify(mImportSyncDataListenerMock, never()).onCancel();
verify(mStateMachineListenerMock, never()).onCancel();
verify(mDelegateMock, never()).dismissAllDialogs();
}
@Test(expected = IllegalStateException.class)
public void testStateCannotChangeOnceDone() {
ConfirmSyncDataStateMachine stateMachine = new ConfirmSyncDataStateMachine(
mDelegateMock, mOldAccountName, mNewAccountName, mImportSyncDataListenerMock);
mDelegateMock, mOldAccountName, mNewAccountName, mStateMachineListenerMock);
stateMachine.cancel(true);
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