summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jatin Lodhia <jlodhia@google.com> 2013-03-27 10:57:23 -0700
committer Jatin Lodhia <jlodhia@google.com> 2013-03-28 13:46:58 -0700
commit3df7d697ca86ee2081bcfba31bcbd3ae4f4bcdf8 (patch)
tree3c1d369dc128d0699f094c344869858a951e2ed3
parentf2b0fdb2f7d701355d3fdb7b9a7780387cbf0e46 (diff)
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
-rw-r--r--api/current.txt1
-rw-r--r--core/java/android/accounts/AccountManager.java5
-rw-r--r--services/java/com/android/server/accounts/AccountManagerService.java33
3 files changed, 13 insertions, 26 deletions
diff --git a/api/current.txt b/api/current.txt
index 5ab97ea8e44c..030ed3d8532a 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -2209,6 +2209,7 @@ package android.accounts {
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 313260f65f9f..81aa504e941a 100644
--- a/core/java/android/accounts/AccountManager.java
+++ b/core/java/android/accounts/AccountManager.java
@@ -151,6 +151,7 @@ public class AccountManager {
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 @@ public class AccountManager {
*/
@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 c4b98ad1eca5..1e6ae1370901 100644
--- a/services/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/java/com/android/server/accounts/AccountManagerService.java
@@ -541,6 +541,7 @@ public class AccountManagerService
}
}
+ @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 @@ public class AccountManagerService
}
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 @@ public class AccountManagerService
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 @@ public class AccountManagerService
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 @@ public class AccountManagerService
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,