diff options
author | Alexandra Gherghina <alexgherghina@google.com> | 2014-07-03 11:40:08 +0100 |
---|---|---|
committer | Alexandra Gherghina <alexgherghina@google.com> | 2014-07-17 17:08:49 +0000 |
commit | 999d394adee533c55fce38bd632ffd4f1af91362 (patch) | |
tree | d53e3c50e09778874f11407d92be5d376b1c9fe7 /core/java/android/accounts/AccountManager.java | |
parent | 3f4f2fbcd0557e32464e393cb9acc28c2328614e (diff) | |
download | frameworks_base-999d394adee533c55fce38bd632ffd4f1af91362.zip frameworks_base-999d394adee533c55fce38bd632ffd4f1af91362.tar.gz frameworks_base-999d394adee533c55fce38bd632ffd4f1af91362.tar.bz2 |
Ads per-user APIs to manage accounts through the AccountManager
Bug: 16056552
Bug: 14642886
Change-Id: I17ff6c2515285e63c84cecf2f861d10666c393c5
Diffstat (limited to 'core/java/android/accounts/AccountManager.java')
-rw-r--r-- | core/java/android/accounts/AccountManager.java | 65 |
1 files changed, 59 insertions, 6 deletions
diff --git a/core/java/android/accounts/AccountManager.java b/core/java/android/accounts/AccountManager.java index 806a55b..aab6e80 100644 --- a/core/java/android/accounts/AccountManager.java +++ b/core/java/android/accounts/AccountManager.java @@ -155,6 +155,8 @@ public class AccountManager { /** @hide */ public static final int ERROR_CODE_USER_RESTRICTED = 100; + /** @hide */ + public static final int ERROR_CODE_MANAGEMENT_DISABLED_FOR_ACCOUNT_TYPE = 101; /** * Bundle key used for the {@link String} account name in results @@ -678,8 +680,7 @@ public class AccountManager { * @param handler {@link Handler} identifying the callback thread, * null for the main thread * @return An {@link AccountManagerFuture} which resolves to a Boolean, - * true if the account has been successfully removed, - * false if the authenticator forbids deleting this account. + * true if the account has been successfully removed */ public AccountManagerFuture<Boolean> removeAccount(final Account account, AccountManagerCallback<Boolean> callback, Handler handler) { @@ -698,6 +699,28 @@ public class AccountManager { } /** + * @see #removeAccount(Account, AccountManagerCallback, Handler) + * @hide + */ + public AccountManagerFuture<Boolean> removeAccountAsUser(final Account account, + AccountManagerCallback<Boolean> callback, Handler handler, + final UserHandle userHandle) { + if (account == null) throw new IllegalArgumentException("account is null"); + if (userHandle == null) throw new IllegalArgumentException("userHandle is null"); + return new Future2Task<Boolean>(handler, callback) { + public void doWork() throws RemoteException { + mService.removeAccountAsUser(mResponse, account, userHandle.getIdentifier()); + } + public Boolean bundleToResult(Bundle bundle) throws AuthenticatorException { + if (!bundle.containsKey(KEY_BOOLEAN_RESULT)) { + throw new AuthenticatorException("no result in response"); + } + return bundle.getBoolean(KEY_BOOLEAN_RESULT); + } + }.start(); + } + + /** * Removes an auth token from the AccountManager's cache. Does nothing if * the auth token is not currently in the cache. Applications must call this * method when the auth token is found to have expired or otherwise become @@ -1183,7 +1206,8 @@ public class AccountManager { * <li> {@link AuthenticatorException} if no authenticator was registered for * this account type or the authenticator failed to respond * <li> {@link OperationCanceledException} if the operation was canceled for - * any reason, including the user canceling the creation process + * any reason, including the user canceling the creation process or adding accounts + * (of this type) has been disabled by policy * <li> {@link IOException} if the authenticator experienced an I/O problem * creating a new account, usually because of network trouble * </ul> @@ -1208,6 +1232,30 @@ public class AccountManager { } /** + * @see #addAccount(String, String, String[], Bundle, Activity, AccountManagerCallback, Handler) + * @hide + */ + public AccountManagerFuture<Bundle> addAccountAsUser(final String accountType, + final String authTokenType, final String[] requiredFeatures, + final Bundle addAccountOptions, final Activity activity, + AccountManagerCallback<Bundle> callback, Handler handler, final UserHandle userHandle) { + if (accountType == null) throw new IllegalArgumentException("accountType is null"); + if (userHandle == null) throw new IllegalArgumentException("userHandle is null"); + final Bundle optionsIn = new Bundle(); + if (addAccountOptions != null) { + optionsIn.putAll(addAccountOptions); + } + optionsIn.putString(KEY_ANDROID_PACKAGE_NAME, mContext.getPackageName()); + + return new AmsTask(activity, handler, callback) { + public void doWork() throws RemoteException { + mService.addAccountAsUser(mResponse, accountType, authTokenType, + requiredFeatures, activity != null, optionsIn, userHandle.getIdentifier()); + } + }.start(); + } + + /** * Adds a shared account from the primary user to a secondary user. Adding the shared account * doesn't take effect immediately. When the target user starts up, any pending shared accounts * are attempted to be copied to the target user from the primary via calls to the @@ -1608,8 +1656,10 @@ public class AccountManager { } public void onError(int code, String message) { - if (code == ERROR_CODE_CANCELED || code == ERROR_CODE_USER_RESTRICTED) { - // the authenticator indicated that this request was canceled, do so now + if (code == ERROR_CODE_CANCELED || code == ERROR_CODE_USER_RESTRICTED + || code == ERROR_CODE_MANAGEMENT_DISABLED_FOR_ACCOUNT_TYPE) { + // the authenticator indicated that this request was canceled or we were + // forbidden to fulfill; cancel now cancel(true /* mayInterruptIfRunning */); return; } @@ -1668,7 +1718,10 @@ public class AccountManager { } public void onError(int code, String message) { - if (code == ERROR_CODE_CANCELED) { + if (code == ERROR_CODE_CANCELED || code == ERROR_CODE_USER_RESTRICTED + || code == ERROR_CODE_MANAGEMENT_DISABLED_FOR_ACCOUNT_TYPE) { + // the authenticator indicated that this request was canceled or we were + // forbidden to fulfill; cancel now cancel(true /* mayInterruptIfRunning */); return; } |