Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/signin/OAuth2TokenService.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/OAuth2TokenService.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/OAuth2TokenService.java |
| index 2e5daa80fbd2633bdb4f86a550669fd4ac23207a..932f9e27144c6bb3e81d6efdaed23dc58c258624 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/OAuth2TokenService.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/OAuth2TokenService.java |
| @@ -7,6 +7,7 @@ package org.chromium.chrome.browser.signin; |
| import android.accounts.Account; |
| import android.app.Activity; |
| import android.content.Context; |
| +import android.preference.PreferenceManager; |
| import android.util.Log; |
| import org.chromium.base.CalledByNative; |
| @@ -16,9 +17,12 @@ import org.chromium.chrome.browser.profiles.Profile; |
| import org.chromium.sync.signin.AccountManagerHelper; |
| import org.chromium.sync.signin.ChromeSigninController; |
| +import java.util.Arrays; |
| import java.util.concurrent.Semaphore; |
| import java.util.concurrent.TimeUnit; |
| import java.util.concurrent.atomic.AtomicReference; |
| +import java.util.HashSet; |
| +import java.util.Set; |
| import javax.annotation.Nullable; |
| @@ -32,6 +36,7 @@ import javax.annotation.Nullable; |
| public final class OAuth2TokenService { |
| private static final String TAG = "OAuth2TokenService"; |
| + private static final String STORED_ACCOUNTS_KEY = "google.services.stored_accounts"; |
| public interface OAuth2TokenServiceObserver { |
| void onRefreshTokenAvailable(Account account); |
| @@ -85,14 +90,18 @@ public final class OAuth2TokenService { |
| return account; |
| } |
| + public static String[] getSystemAccounts(Context context) { |
| + AccountManagerHelper accountManagerHelper = AccountManagerHelper.get(context); |
| + java.util.List<String> accountNames = accountManagerHelper.getGoogleAccountNames(); |
| + return accountNames.toArray(new String[accountNames.size()]); |
| + } |
| + |
| /** |
| * Called by native to list the accounts with OAuth2 refresh tokens. |
| */ |
| @CalledByNative |
| public static String[] getAccounts(Context context) { |
| - AccountManagerHelper accountManagerHelper = AccountManagerHelper.get(context); |
| - java.util.List<String> accountNames = accountManagerHelper.getGoogleAccountNames(); |
| - return accountNames.toArray(new String[accountNames.size()]); |
| + return getStoredAccounts(context); |
| } |
| /** |
| @@ -202,9 +211,10 @@ public final class OAuth2TokenService { |
| ThreadUtils.assertOnUiThread(); |
| String currentlySignedInAccount = |
| ChromeSigninController.get(context).getSignedInAccountName(); |
| - String[] accounts = getAccounts(context); |
| + String[] prevAccounts = getStoredAccounts(context); |
| + saveStoredAccounts(context, getSystemAccounts(context)); |
| nativeValidateAccounts( |
| - mNativeProfileOAuth2TokenService, accounts, currentlySignedInAccount); |
| + mNativeProfileOAuth2TokenService, prevAccounts, currentlySignedInAccount); |
|
Roger Tawa OOO till Jul 10th
2014/04/08 20:40:53
In the case where |currentlySignedInAccount| is no
acleung1
2014/04/09 00:55:00
Done.
|
| } |
| /** |
| @@ -262,6 +272,25 @@ public final class OAuth2TokenService { |
| } |
| } |
| + private static String[] getStoredAccounts(Context context) { |
| + Set<String> accounts = |
| + PreferenceManager.getDefaultSharedPreferences(context) |
| + .getStringSet(STORED_ACCOUNTS_KEY, null); |
| + if (accounts == null) { |
| + String[] sysAccounts = getSystemAccounts(context); |
| + saveStoredAccounts(context, sysAccounts); |
| + return sysAccounts; |
| + } else { |
| + return accounts.toArray(new String[accounts.size()]); |
| + } |
| + } |
| + |
| + private static void saveStoredAccounts(Context context, String[] accounts) { |
| + Set<String> set = new HashSet<String>(Arrays.asList(accounts)); |
| + PreferenceManager.getDefaultSharedPreferences(context).edit(). |
| + putStringSet(STORED_ACCOUNTS_KEY, set).apply(); |
| + } |
| + |
| private static native Object nativeGetForProfile(Profile profile); |
| private static native void nativeOAuth2TokenFetched( |
| String authToken, boolean result, long nativeCallback); |