Index: sync/android/java/src/org/chromium/sync/signin/SystemAccountManagerDelegate.java |
diff --git a/sync/android/java/src/org/chromium/sync/signin/SystemAccountManagerDelegate.java b/sync/android/java/src/org/chromium/sync/signin/SystemAccountManagerDelegate.java |
index 75777dd85acde0e749bc10292bebb132bcc49aca..d90280ab3fd3831e84f42aa09d68cc9bdf7a815e 100644 |
--- a/sync/android/java/src/org/chromium/sync/signin/SystemAccountManagerDelegate.java |
+++ b/sync/android/java/src/org/chromium/sync/signin/SystemAccountManagerDelegate.java |
@@ -13,14 +13,17 @@ import android.accounts.AuthenticatorException; |
import android.accounts.OperationCanceledException; |
import android.content.Context; |
import android.os.AsyncTask; |
-import android.os.Bundle; |
-import android.os.Handler; |
import android.os.StrictMode; |
import android.os.SystemClock; |
+import com.google.android.gms.auth.GoogleAuthException; |
+import com.google.android.gms.auth.GoogleAuthUtil; |
+import com.google.android.gms.auth.UserRecoverableAuthException; |
+ |
import org.chromium.base.Callback; |
import org.chromium.base.Log; |
import org.chromium.base.ThreadUtils; |
+import org.chromium.base.annotations.MainDex; |
import org.chromium.base.library_loader.LibraryLoader; |
import org.chromium.base.metrics.RecordHistogram; |
@@ -31,6 +34,7 @@ import java.util.concurrent.TimeUnit; |
* Default implementation of {@link AccountManagerDelegate} which delegates all calls to the |
* Android account manager. |
*/ |
+@MainDex |
public class SystemAccountManagerDelegate implements AccountManagerDelegate { |
private final AccountManager mAccountManager; |
@@ -70,10 +74,18 @@ public class SystemAccountManagerDelegate implements AccountManagerDelegate { |
} |
@Override |
- public AccountManagerFuture<Bundle> getAuthToken(Account account, String authTokenType, |
- boolean notifyAuthFailure, AccountManagerCallback<Bundle> callback, Handler handler) { |
- return mAccountManager.getAuthToken(account, authTokenType, null, notifyAuthFailure, |
- callback, handler); |
+ public String getAuthToken(Account account, String authTokenScope) throws AuthException { |
+ assert !ThreadUtils.runningOnUiThread(); |
+ assert AccountManagerHelper.GOOGLE_ACCOUNT_TYPE.equals(account.type); |
+ try { |
+ return GoogleAuthUtil.getToken(mApplicationContext, account, authTokenScope); |
+ } catch (UserRecoverableAuthException ex) { |
+ throw new AuthException(false /* isTransientError */, ex.getIntent(), ex); |
+ } catch (GoogleAuthException ex) { |
+ throw new AuthException(false /* isTransientError */, null, ex); |
+ } catch (IOException ex) { |
+ throw new AuthException(true /* isTransientError */, null, ex); |
+ } |
} |
@Override |