From 3df7d697ca86ee2081bcfba31bcbd3ae4f4bcdf8 Mon Sep 17 00:00:00 2001 From: Jatin Lodhia Date: Wed, 27 Mar 2013 10:57:23 -0700 Subject: 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 --- api/current.txt | 1 + core/java/android/accounts/AccountManager.java | 5 ++-- .../server/accounts/AccountManagerService.java | 33 ++++++---------------- 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 getAuthToken( - final Account account, final String authTokenType, + final Account account, final String authTokenType, final boolean notifyAuthFailure, AccountManagerCallback 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, -- cgit v1.2.3-59-g8ed1b