diff options
-rw-r--r-- | sync/android/java/src/org/chromium/sync/notifier/InvalidationService.java | 20 | ||||
-rw-r--r-- | sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java | 19 |
2 files changed, 32 insertions, 7 deletions
diff --git a/sync/android/java/src/org/chromium/sync/notifier/InvalidationService.java b/sync/android/java/src/org/chromium/sync/notifier/InvalidationService.java index e7f1d82..b867e80 100644 --- a/sync/android/java/src/org/chromium/sync/notifier/InvalidationService.java +++ b/sync/android/java/src/org/chromium/sync/notifier/InvalidationService.java @@ -187,7 +187,8 @@ public class InvalidationService extends AndroidListener { } @Override - public void requestAuthToken(PendingIntent pendingIntent, @Nullable String invalidAuthToken) { + public void requestAuthToken(final PendingIntent pendingIntent, + @Nullable String invalidAuthToken) { @Nullable Account account = SyncStatusHelper.get(this).getSignedInUser(); if (account == null) { // This should never happen, because this code should only be run if a user is @@ -198,11 +199,18 @@ public class InvalidationService extends AndroidListener { // Attempt to retrieve a token for the user. This method will also invalidate // invalidAuthToken if it is non-null. - String authToken = AccountManagerHelper.get(this).getNewAuthToken(account, invalidAuthToken, - SyncStatusHelper.AUTH_TOKEN_TYPE_SYNC); - if (authToken != null) { - setAuthToken(this, pendingIntent, authToken, SyncStatusHelper.AUTH_TOKEN_TYPE_SYNC); - } + AccountManagerHelper.get(this).getNewAuthTokenFromForeground( + account, invalidAuthToken, SyncStatusHelper.AUTH_TOKEN_TYPE_SYNC, + new AccountManagerHelper.GetAuthTokenCallback() { + @Override + public void tokenAvailable(String token) { + if (token != null) { + InvalidationService.setAuthToken( + InvalidationService.this.getApplicationContext(), pendingIntent, + token, SyncStatusHelper.AUTH_TOKEN_TYPE_SYNC); + } + } + }); } @Override diff --git a/sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java b/sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java index 9e39d8e..5c1ec826 100644 --- a/sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java +++ b/sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java @@ -36,7 +36,7 @@ public class AccountManagerHelper { private static final String TAG = "AccountManagerHelper"; - private static final String GOOGLE_ACCOUNT_TYPE = "com.google"; + public static final String GOOGLE_ACCOUNT_TYPE = "com.google"; private static final Object lock = new Object(); @@ -267,6 +267,7 @@ public class AccountManagerHelper { * - Assumes that the account is a valid account. * - Should not be called on the main thread. */ + @Deprecated public String getNewAuthToken(Account account, String authToken, String authTokenType) { // TODO(dsmyers): consider reimplementing using an AccountManager function with an // explicit timeout. @@ -286,4 +287,20 @@ public class AccountManagerHelper { } return null; } + + /** + * Invalidates the old token (if non-null/non-empty) and asynchronously generates a new one. + * + * - Assumes that the account is a valid account. + */ + public void getNewAuthTokenFromForeground(Account account, String authToken, + String authTokenType, GetAuthTokenCallback callback) { + if (authToken != null && !authToken.isEmpty()) { + mAccountManager.invalidateAuthToken(GOOGLE_ACCOUNT_TYPE, authToken); + } + AtomicInteger numTries = new AtomicInteger(0); + AtomicBoolean errorEncountered = new AtomicBoolean(false); + getAuthTokenAsynchronously( + account, authTokenType, callback, numTries, errorEncountered, null); + } } |