Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtils.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtils.java |
| index 8d0367a2a13ba9fd88d1ed0bc1d560eb30fb8f9a..fbd05efd33e71ad69644fc4b4cf7e980d6af0ea3 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtils.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/externalauth/ExternalAuthUtils.java |
| @@ -11,8 +11,12 @@ import android.content.pm.PackageManager.NameNotFoundException; |
| import android.os.Binder; |
| import android.text.TextUtils; |
| +import com.google.android.gms.common.ConnectionResult; |
| +import com.google.android.gms.common.GooglePlayServicesUtil; |
| + |
| import org.chromium.base.ApplicationStatus; |
| import org.chromium.base.Log; |
| +import org.chromium.base.ThreadUtils; |
| import org.chromium.base.VisibleForTesting; |
| import org.chromium.chrome.browser.ChromiumApplication; |
| @@ -26,7 +30,7 @@ import java.util.concurrent.atomic.AtomicReference; |
| public class ExternalAuthUtils { |
| public static final int FLAG_SHOULD_BE_GOOGLE_SIGNED = 1 << 0; |
| public static final int FLAG_SHOULD_BE_SYSTEM = 1 << 1; |
| - private static final String TAG = "ExternalAuthUtils"; |
| + private static final String TAG = Log.makeTag("ExternalAuthUtils"); |
| // Use an AtomicReference since getInstance() can be called from multiple threads. |
| private static AtomicReference<ExternalAuthUtils> sInstance = |
| @@ -149,4 +153,30 @@ public class ExternalAuthUtils { |
| public boolean isCallerValid(Context context, int authRequirements) { |
| return isCallerValid(context, authRequirements, ""); |
| } |
| -} |
| + |
| + /** |
| + * Checks whether Google Play Services can be used, applying the specified error-handling |
| + * policy if a user-recoverable error occurs. To avoid undue burden on the user, the error |
| + * handling policy will be applied at most one time per browser startup (i.e., a dialog or |
|
dgn
2015/05/20 16:33:07
dialog can now be shown more than once
|
| + * a system notification). |
| + * This method is threadsafe. If the specified error-handling policy requires UI interaction, |
| + * an asynchronous task will be posted to the main thread to perform such interaction. |
| + * @param context The current context. |
| + * @param errorHandler How to handle user-recoverable errors; must be non-null. |
| + * @return true if and only if Google Play Services can be used |
| + */ |
| + public boolean canUseGooglePlayServices( |
| + final Context context, final UserRecoverableErrorHandler errorHandler) { |
| + final int errorCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(context); |
| + if (errorCode == ConnectionResult.SUCCESS) { |
| + return true; // Hooray! |
| + } |
| + // The rest of the method is error-handling bits. |
|
dgn
2015/05/20 16:33:07
The comment is not very useful anymore
|
| + Log.v(TAG, "Unable to use Google Play Services: %s", |
| + GooglePlayServicesUtil.getErrorString(errorCode)); |
| + if (GooglePlayServicesUtil.isUserRecoverableError(errorCode)) { |
| + ThreadUtils.runOnUiThread(errorHandler); |
| + } |
| + return false; |
| + } |
| +} |