summaryrefslogtreecommitdiffstats
path: root/sync/android
diff options
context:
space:
mode:
authorbauerb <bauerb@chromium.org>2015-06-16 05:38:45 -0700
committerCommit bot <commit-bot@chromium.org>2015-06-16 12:40:02 +0000
commitec276d658f681221b4de3d32971fd77960522e50 (patch)
treea2e5cb7a9f6bef6fa33c7a6c7dec6515acc70687 /sync/android
parent2785597a86381c176f16bfdb7270bc37caa4f2a7 (diff)
downloadchromium_src-ec276d658f681221b4de3d32971fd77960522e50.zip
chromium_src-ec276d658f681221b4de3d32971fd77960522e50.tar.gz
chromium_src-ec276d658f681221b4de3d32971fd77960522e50.tar.bz2
Listen for account changes and update child account status correspondingly.
BUG=482889 Review URL: https://codereview.chromium.org/1160813005 Cr-Commit-Position: refs/heads/master@{#334588}
Diffstat (limited to 'sync/android')
-rw-r--r--sync/android/java/src/org/chromium/sync/signin/AccountManagerDelegate.java3
-rw-r--r--sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java25
-rw-r--r--sync/android/java/src/org/chromium/sync/signin/SystemAccountManagerDelegate.java6
3 files changed, 34 insertions, 0 deletions
diff --git a/sync/android/java/src/org/chromium/sync/signin/AccountManagerDelegate.java b/sync/android/java/src/org/chromium/sync/signin/AccountManagerDelegate.java
index 0fd5a39..ba7bc46 100644
--- a/sync/android/java/src/org/chromium/sync/signin/AccountManagerDelegate.java
+++ b/sync/android/java/src/org/chromium/sync/signin/AccountManagerDelegate.java
@@ -49,4 +49,7 @@ public interface AccountManagerDelegate {
String peekAuthToken(Account account, String authTokenType);
AuthenticatorDescription[] getAuthenticatorTypes();
+
+ AccountManagerFuture<Boolean> hasFeatures(Account account, String[] features,
+ AccountManagerCallback<Boolean> callback, Handler handler);
}
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 856a5a0..4d2b292 100644
--- a/sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java
+++ b/sync/android/java/src/org/chromium/sync/signin/AccountManagerHelper.java
@@ -8,6 +8,7 @@ package org.chromium.sync.signin;
import android.Manifest;
import android.accounts.Account;
import android.accounts.AccountManager;
+import android.accounts.AccountManagerCallback;
import android.accounts.AccountManagerFuture;
import android.accounts.AuthenticatorDescription;
import android.accounts.AuthenticatorException;
@@ -51,6 +52,12 @@ public class AccountManagerHelper {
public static final String GOOGLE_ACCOUNT_TYPE = "com.google";
+ /**
+ * An account feature (corresponding to a Gaia service flag) that specifies whether the account
+ * is a child account.
+ */
+ @VisibleForTesting public static final String FEATURE_IS_CHILD_ACCOUNT_KEY = "service_uca";
+
private static final Object sLock = new Object();
private static final int MAX_TRIES = 3;
@@ -130,6 +137,18 @@ public class AccountManagerHelper {
return mAccountManager.getAccountsByType(GOOGLE_ACCOUNT_TYPE);
}
+ /**
+ * Convenience method to get the single Google account on the device. Should only be
+ * called if it has been determined that there is exactly one account.
+ *
+ * @return The single account to sign into.
+ */
+ public Account getSingleGoogleAccount() {
+ Account[] googleAccounts = getGoogleAccounts();
+ assert googleAccounts.length == 1;
+ return googleAccounts[0];
+ }
+
public boolean hasGoogleAccounts() {
return getGoogleAccounts().length > 0;
}
@@ -370,4 +389,10 @@ public class AccountManagerHelper {
mAccountManager.invalidateAuthToken(GOOGLE_ACCOUNT_TYPE, authToken);
}
}
+
+ public AccountManagerFuture<Boolean> checkChildAccount(
+ Account account, AccountManagerCallback<Boolean> callback) {
+ String[] features = {FEATURE_IS_CHILD_ACCOUNT_KEY};
+ return mAccountManager.hasFeatures(account, features, callback, null /* handler */);
+ }
}
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 5defa3a..e8f8abb 100644
--- a/sync/android/java/src/org/chromium/sync/signin/SystemAccountManagerDelegate.java
+++ b/sync/android/java/src/org/chromium/sync/signin/SystemAccountManagerDelegate.java
@@ -102,4 +102,10 @@ public class SystemAccountManagerDelegate implements AccountManagerDelegate {
public AuthenticatorDescription[] getAuthenticatorTypes() {
return mAccountManager.getAuthenticatorTypes();
}
+
+ @Override
+ public AccountManagerFuture<Boolean> hasFeatures(Account account, String[] features,
+ AccountManagerCallback<Boolean> callback, Handler handler) {
+ return mAccountManager.hasFeatures(account, features, callback, handler);
+ }
}