Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/sync/SyncAccountSwitcher.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncAccountSwitcher.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncAccountSwitcher.java |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..c81d8ce8b015fb281709690a89b0c6ab73b02661 |
| --- /dev/null |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/SyncAccountSwitcher.java |
| @@ -0,0 +1,78 @@ |
| +// Copyright 2016 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.sync; |
| + |
| +import android.app.FragmentManager; |
| +import android.content.Context; |
| +import android.preference.Preference; |
| +import android.preference.Preference.OnPreferenceChangeListener; |
| +import android.text.TextUtils; |
| + |
| +import org.chromium.chrome.browser.preferences.SyncedAccountPreference; |
| +import org.chromium.chrome.browser.signin.SigninManager; |
| +import org.chromium.chrome.browser.signin.SigninManager.SignInCallback; |
| +import org.chromium.chrome.browser.sync.ui.ConfirmImportSyncDataFragment; |
| +import org.chromium.chrome.browser.sync.ui.ConfirmImportSyncDataFragment.ImportSyncType; |
| + |
| +/** |
| + * A class that encapsulates the control flow of listeners and callbacks when switching sync |
| + * accounts. |
| + * |
| + * Control flows through the method in this order: |
| + * {@link OnPreferenceChangeListener#onPreferenceChange} |
| + * {@link ConfirmImportSyncDataFragment.Listener#onConfirm} |
| + * {@link SignInCallback#onSignInComplete} |
| + */ |
| +public class SyncAccountSwitcher |
| + implements OnPreferenceChangeListener, ConfirmImportSyncDataFragment.Listener, |
| + SignInCallback { |
| + private static final String TAG = "SyncAccountSwitcher"; |
| + |
| + private final SyncedAccountPreference mSyncedAccountPreference; |
| + private final Context mContext; |
| + private final FragmentManager mFragmentManager; |
| + |
| + private String mNewAccountName; |
| + |
| + public SyncAccountSwitcher(Context c, FragmentManager fm, SyncedAccountPreference pref) { |
|
newt (away)
2016/02/25 06:25:53
javadoc
PEConn
2016/02/25 14:19:52
Done.
|
| + mSyncedAccountPreference = pref; |
| + mContext = c; |
|
newt (away)
2016/02/25 06:25:53
avoid abbreviations, like "c" and "fm"
PEConn
2016/02/25 14:19:52
Done.
|
| + mFragmentManager = fm; |
| + } |
| + |
| + @Override |
| + public boolean onPreferenceChange(Preference p, Object newValue) { |
| + if (newValue == null) return false; |
| + |
| + mNewAccountName = (String) newValue; |
| + String currentAccount = mSyncedAccountPreference.getValue(); |
| + |
| + if (TextUtils.equals(mNewAccountName, currentAccount)) return false; |
| + |
| + ConfirmImportSyncDataFragment.showNewInstance(currentAccount, mNewAccountName, |
| + ImportSyncType.SWITCHING_SYNC_ACCOUNTS, mFragmentManager, this); |
| + |
| + // Don't update the selected account in the preference. It will be updated by |
| + // the call to mSyncAccountListPreference.update() if everything succeeds. |
| + return false; |
| + } |
| + |
| + @Override |
| + public void onConfirm() { |
| + assert mNewAccountName != null; |
| + SigninManager.get(mContext).signIn(mNewAccountName, null, this); |
| + } |
| + |
| + @Override |
| + public void onSignInComplete() { |
| + // Update the Preference so it displays the correct account name. |
| + mSyncedAccountPreference.update(); |
| + } |
| + |
| + @Override |
| + public void onSignInAborted() { |
| + assert false : "Should not be able to abort sign in when switching sync accounts."; |
| + } |
| +} |