diff options
author | bauerb <bauerb@chromium.org> | 2016-03-23 03:35:07 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-23 10:36:41 +0000 |
commit | c500ab5bb9c8b61fd0201309225456458d224f10 (patch) | |
tree | 4a2cdee4c49a218ffd287e5563bace1aa338f073 /sync | |
parent | 677cb2dc620458439bf754ead201b4756c53590d (diff) | |
download | chromium_src-c500ab5bb9c8b61fd0201309225456458d224f10.zip chromium_src-c500ab5bb9c8b61fd0201309225456458d224f10.tar.gz chromium_src-c500ab5bb9c8b61fd0201309225456458d224f10.tar.bz2 |
Use GoogleAuthUtil.getTokenWithNotification() for getting Google auth tokens.
Showing a notification should be more user-friendly than immediately firing
the recovery intent.
BUG=547048
Review URL: https://codereview.chromium.org/1826523002
Cr-Commit-Position: refs/heads/master@{#382821}
Diffstat (limited to 'sync')
3 files changed, 20 insertions, 44 deletions
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 aaea7aa..5543120 100644 --- a/sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java +++ b/sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java @@ -9,7 +9,6 @@ import android.Manifest; import android.accounts.Account; import android.accounts.AuthenticatorDescription; import android.content.Context; -import android.content.Intent; import android.content.pm.PackageManager; import android.os.AsyncTask; import android.os.Process; @@ -299,7 +298,7 @@ public class AccountManagerHelper { */ public void getAuthToken(final Account account, final String authTokenType, final GetAuthTokenCallback callback) { - ConnectionRetry.runAuthTask(mApplicationContext, new AuthTask<String>() { + ConnectionRetry.runAuthTask(new AuthTask<String>() { @Override public String run() throws AuthException { return mAccountManager.getAuthToken(account, authTokenType); @@ -338,7 +337,7 @@ public class AccountManagerHelper { if (authToken == null || authToken.isEmpty()) { return; } - ConnectionRetry.runAuthTask(mApplicationContext, new AuthTask<Boolean>() { + ConnectionRetry.runAuthTask(new AuthTask<Boolean>() { @Override public Boolean run() throws AuthException { mAccountManager.invalidateAuthToken(authToken); @@ -374,17 +373,15 @@ public class AccountManagerHelper { implements NetworkChangeNotifier.ConnectionTypeObserver { private static final int MAX_TRIES = 3; - private final Context mContext; private final AuthTask<T> mAuthTask; private final AtomicInteger mNumTries; private final AtomicBoolean mIsTransientError; - public static <T> void runAuthTask(Context context, AuthTask<T> authTask) { - new ConnectionRetry<T>(context, authTask).attempt(); + public static <T> void runAuthTask(AuthTask<T> authTask) { + new ConnectionRetry<T>(authTask).attempt(); } - private ConnectionRetry(Context context, AuthTask<T> authTask) { - mContext = context; + private ConnectionRetry(AuthTask<T> authTask) { mAuthTask = authTask; mNumTries = new AtomicInteger(0); mIsTransientError = new AtomicBoolean(false); @@ -405,15 +402,6 @@ public class AccountManagerHelper { } catch (AuthException ex) { Log.w(TAG, "Failed to perform auth task", ex); mIsTransientError.set(ex.isTransientError()); - - // TODO(547048): This will fire the intent indiscriminately. We should fix - // this in the future to fire only once per user actionable intent to avoid - // spamming the user. - if (ex.getRecoveryIntent() != null) { - Intent i = ex.getRecoveryIntent(); - i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - mContext.startActivity(i); - } } return null; } diff --git a/sync/android/java/src/org/chromium/sync/signin/AuthException.java b/sync/android/java/src/org/chromium/sync/signin/AuthException.java index 56e2ed1..a678b0c 100644 --- a/sync/android/java/src/org/chromium/sync/signin/AuthException.java +++ b/sync/android/java/src/org/chromium/sync/signin/AuthException.java @@ -4,43 +4,30 @@ package org.chromium.sync.signin; -import android.content.Intent; - -/* +/** * AuthException abstracts away authenticator specific exceptions behind a single interface. * It is used for passing information that is useful for better handling of errors. */ public class AuthException extends Exception { private final boolean mIsTransientError; - private final Intent mRecoveryIntent; - /* + /** * A simple constructor that stores all the error handling information and makes it available to * the handler. * @param isTransientError Whether the error is transient and we can retry. - * @param recoveryIntent An intent that can be used to recover from this error. * Thus, a user recoverable error is not transient, since it requires explicit user handling * before retry. */ - public AuthException(boolean isTransientError, Intent recoveryIntent, Exception exception) { + public AuthException(boolean isTransientError, Exception exception) { super(exception); - assert !isTransientError || recoveryIntent == null; + assert !isTransientError; mIsTransientError = isTransientError; - mRecoveryIntent = recoveryIntent; } - /* + /** * @return Whether the error is transient and we can retry. */ public boolean isTransientError() { return mIsTransientError; } - - /* - * @return An intent that can be used to recover from this error if it is recoverabale by user - * intervention, else {@code null}. - */ - public Intent getRecoveryIntent() { - return mRecoveryIntent; - } } 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 f291ef58..bc9630c 100644 --- a/sync/android/java/src/org/chromium/sync/signin/SystemAccountManagerDelegate.java +++ b/sync/android/java/src/org/chromium/sync/signin/SystemAccountManagerDelegate.java @@ -18,7 +18,6 @@ import android.os.SystemClock; import com.google.android.gms.auth.GoogleAuthException; import com.google.android.gms.auth.GoogleAuthUtil; import com.google.android.gms.auth.GooglePlayServicesAvailabilityException; -import com.google.android.gms.auth.UserRecoverableAuthException; import org.chromium.base.Callback; import org.chromium.base.Log; @@ -78,13 +77,15 @@ public class SystemAccountManagerDelegate implements AccountManagerDelegate { 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); + return GoogleAuthUtil.getTokenWithNotification(mApplicationContext, account, + authTokenScope, null); } catch (GoogleAuthException ex) { - throw new AuthException(false /* isTransientError */, null, ex); + // This case includes a UserRecoverableNotifiedException, but most clients will have + // their own retry mechanism anyway. + // TODO(bauerb): Investigate integrating the callback with ConnectionRetry. + throw new AuthException(false /* isTransientError */, ex); } catch (IOException ex) { - throw new AuthException(true /* isTransientError */, null, ex); + throw new AuthException(true /* isTransientError */, ex); } } @@ -93,11 +94,11 @@ public class SystemAccountManagerDelegate implements AccountManagerDelegate { try { GoogleAuthUtil.clearToken(mApplicationContext, authToken); } catch (GooglePlayServicesAvailabilityException ex) { - throw new AuthException(false /* isTransientError */, null, ex); + throw new AuthException(false /* isTransientError */, ex); } catch (GoogleAuthException ex) { - throw new AuthException(false /* isTransientError */, null, ex); + throw new AuthException(false /* isTransientError */, ex); } catch (IOException ex) { - throw new AuthException(true /* isTransientError */, null, ex); + throw new AuthException(true /* isTransientError */, ex); } } |