AccountManager changes for profile seeding.
Add a new error code to AccountManager and remove the check for
limited user during add account to allow Authenticators to seed
account during limited profile startup.
Change-Id: I5a73def9fc3baeb8e6de1b42e923829c335e1668
diff --git a/api/current.txt b/api/current.txt
index 5ab97ea..030ed3d 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -2209,6 +2209,7 @@
field public static final java.lang.String AUTHENTICATOR_ATTRIBUTES_NAME = "account-authenticator";
field public static final java.lang.String AUTHENTICATOR_META_DATA_NAME = "android.accounts.AccountAuthenticator";
field public static final int ERROR_CODE_BAD_ARGUMENTS = 7; // 0x7
+ field public static final int ERROR_CODE_BAD_AUTHENTICATION = 9; // 0x9
field public static final int ERROR_CODE_BAD_REQUEST = 8; // 0x8
field public static final int ERROR_CODE_CANCELED = 4; // 0x4
field public static final int ERROR_CODE_INVALID_RESPONSE = 5; // 0x5
diff --git a/core/java/android/accounts/AccountManager.java b/core/java/android/accounts/AccountManager.java
index 313260f..81aa504 100644
--- a/core/java/android/accounts/AccountManager.java
+++ b/core/java/android/accounts/AccountManager.java
@@ -151,6 +151,7 @@
public static final int ERROR_CODE_UNSUPPORTED_OPERATION = 6;
public static final int ERROR_CODE_BAD_ARGUMENTS = 7;
public static final int ERROR_CODE_BAD_REQUEST = 8;
+ public static final int ERROR_CODE_BAD_AUTHENTICATION = 9;
/** @hide */
public static final int ERROR_CODE_USER_RESTRICTED = 100;
@@ -964,10 +965,10 @@
*/
@Deprecated
public AccountManagerFuture<Bundle> getAuthToken(
- final Account account, final String authTokenType,
+ final Account account, final String authTokenType,
final boolean notifyAuthFailure,
AccountManagerCallback<Bundle> callback, Handler handler) {
- return getAuthToken(account, authTokenType, null, notifyAuthFailure, callback,
+ return getAuthToken(account, authTokenType, null, notifyAuthFailure, callback,
handler);
}
diff --git a/services/java/com/android/server/accounts/AccountManagerService.java b/services/java/com/android/server/accounts/AccountManagerService.java
index c4b98ad..1e6ae13 100644
--- a/services/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/java/com/android/server/accounts/AccountManagerService.java
@@ -541,6 +541,7 @@
}
}
+ @Override
public boolean addAccount(Account account, String password, Bundle extras) {
if (Log.isLoggable(TAG, Log.VERBOSE)) {
Log.v(TAG, "addAccount: " + account
@@ -549,9 +550,13 @@
}
if (account == null) throw new IllegalArgumentException("account is null");
checkAuthenticateAccountsPermission(account);
- if (!canUserModifyAccounts(Binder.getCallingUid())) {
- return false;
- }
+ /*
+ * Child users are not allowed to add accounts. Only the accounts that are
+ * shared by the parent profile can be added to child profile.
+ *
+ * TODO: Only allow accounts that were shared to be added by
+ * a limited user.
+ */
UserAccounts accounts = getUserAccountsForCaller();
// fails if the account already exists
@@ -588,12 +593,9 @@
if (result.getBoolean(AccountManager.KEY_BOOLEAN_RESULT, false)) {
// Create a Session for the target user and pass in the bundle
completeCloningAccount(result, account, toAccounts);
- } else {
- clonePassword(fromAccounts, toAccounts, account);
}
return;
} else {
- clonePassword(fromAccounts, toAccounts, account);
super.onResult(result);
}
}
@@ -604,23 +606,6 @@
return true;
}
- // TODO: Remove fallback - move to authenticator
- private void clonePassword(UserAccounts fromAccounts, UserAccounts toAccounts,
- Account account) {
- long id = clearCallingIdentity();
- try {
- String password = readPasswordInternal(fromAccounts, account);
- String extraFlags = readUserDataInternal(fromAccounts, account, "flags");
- String extraServices = readUserDataInternal(fromAccounts, account, "services");
- Bundle extras = new Bundle();
- extras.putString("flags", extraFlags);
- extras.putString("services", extraServices);
- addAccountInternal(toAccounts, account, password, extras, true);
- } finally {
- restoreCallingIdentity(id);
- }
- }
-
void completeCloningAccount(final Bundle result, final Account account,
final UserAccounts targetUser) {
long id = clearCallingIdentity();
@@ -1351,7 +1336,7 @@
String subtitle = "";
if (index > 0) {
title = titleAndSubtitle.substring(0, index);
- subtitle = titleAndSubtitle.substring(index + 1);
+ subtitle = titleAndSubtitle.substring(index + 1);
}
UserHandle user = new UserHandle(userId);
n.setLatestEventInfo(mContext, title, subtitle,