diff options
| author | Costin Manolache <costin@google.com> | 2011-09-08 11:26:09 -0700 |
|---|---|---|
| committer | Costin Manolache <costin@google.com> | 2011-09-12 12:11:24 -0700 |
| commit | b61e8fbabea2cc40ad65bf4f372a32d526cfc7ac (patch) | |
| tree | c20c26679062bfea7e48fe068eaab4bab91c5944 /core/java/android | |
| parent | 6515f50d0c759cfff163aaf7f42a970019d93923 (diff) | |
| download | frameworks_base-b61e8fbabea2cc40ad65bf4f372a32d526cfc7ac.zip frameworks_base-b61e8fbabea2cc40ad65bf4f372a32d526cfc7ac.tar.gz frameworks_base-b61e8fbabea2cc40ad65bf4f372a32d526cfc7ac.tar.bz2 | |
For consistency with getAuthToken, pass UID/PID for add account. Needed for customizing the add account flow
b/5278759 API changes to pass package, options
b/5249018 consistent/customized add account UI
b/5270079 tag who adds the account
Change-Id: I1ee211d751b565c725c89aa1a429ef2f5bebe34a
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/accounts/AccountManager.java | 33 | ||||
| -rw-r--r-- | core/java/android/accounts/AccountManagerService.java | 35 |
2 files changed, 36 insertions, 32 deletions
diff --git a/core/java/android/accounts/AccountManager.java b/core/java/android/accounts/AccountManager.java index 029d107..be9070d 100644 --- a/core/java/android/accounts/AccountManager.java +++ b/core/java/android/accounts/AccountManager.java @@ -189,6 +189,7 @@ public class AccountManager { public static final String KEY_ERROR_CODE = "errorCode"; public static final String KEY_ERROR_MESSAGE = "errorMessage"; public static final String KEY_USERDATA = "userdata"; + /** * Authenticators using 'customTokens' option will also get the UID of the * caller @@ -814,11 +815,13 @@ public class AccountManager { final Activity activity, AccountManagerCallback<Bundle> callback, Handler handler) { if (account == null) throw new IllegalArgumentException("account is null"); if (authTokenType == null) throw new IllegalArgumentException("authTokenType is null"); + final Bundle optionsIn = options == null ? new Bundle() : options; + optionsIn.putString(KEY_ANDROID_PACKAGE_NAME, mContext.getPackageName()); return new AmsTask(activity, handler, callback) { public void doWork() throws RemoteException { mService.getAuthToken(mResponse, account, authTokenType, false /* notifyOnAuthFailure */, true /* expectActivityLaunch */, - options); + optionsIn); } }.start(); } @@ -895,16 +898,11 @@ public class AccountManager { */ @Deprecated public AccountManagerFuture<Bundle> getAuthToken( - final Account account, final String authTokenType, final boolean notifyAuthFailure, + final Account account, final String authTokenType, + final boolean notifyAuthFailure, AccountManagerCallback<Bundle> callback, Handler handler) { - if (account == null) throw new IllegalArgumentException("account is null"); - if (authTokenType == null) throw new IllegalArgumentException("authTokenType is null"); - return new AmsTask(null, handler, callback) { - public void doWork() throws RemoteException { - mService.getAuthToken(mResponse, account, authTokenType, - notifyAuthFailure, false /* expectActivityLaunch */, null /* options */); - } - }.start(); + return getAuthToken(account, authTokenType, null, notifyAuthFailure, callback, + handler); } /** @@ -978,15 +976,18 @@ public class AccountManager { * account before requesting an auth token. */ public AccountManagerFuture<Bundle> getAuthToken( - final Account account, final String authTokenType, - final Bundle options, final boolean notifyAuthFailure, + final Account account, final String authTokenType, final Bundle options, + final boolean notifyAuthFailure, AccountManagerCallback<Bundle> callback, Handler handler) { + if (account == null) throw new IllegalArgumentException("account is null"); if (authTokenType == null) throw new IllegalArgumentException("authTokenType is null"); + final Bundle optionsIn = options == null ? new Bundle() : options; + optionsIn.putString(KEY_ANDROID_PACKAGE_NAME, mContext.getPackageName()); return new AmsTask(null, handler, callback) { public void doWork() throws RemoteException { mService.getAuthToken(mResponse, account, authTokenType, - notifyAuthFailure, false /* expectActivityLaunch */, options); + notifyAuthFailure, false /* expectActivityLaunch */, optionsIn); } }.start(); } @@ -1044,10 +1045,14 @@ public class AccountManager { final Bundle addAccountOptions, final Activity activity, AccountManagerCallback<Bundle> callback, Handler handler) { if (accountType == null) throw new IllegalArgumentException("accountType is null"); + final Bundle options = (addAccountOptions == null) ? new Bundle() : + addAccountOptions; + options.putString(KEY_ANDROID_PACKAGE_NAME, mContext.getPackageName()); + return new AmsTask(activity, handler, callback) { public void doWork() throws RemoteException { mService.addAcount(mResponse, accountType, authTokenType, - requiredFeatures, activity != null, addAccountOptions); + requiredFeatures, activity != null, options); } }.start(); } diff --git a/core/java/android/accounts/AccountManagerService.java b/core/java/android/accounts/AccountManagerService.java index 20d5b96..173da8d 100644 --- a/core/java/android/accounts/AccountManagerService.java +++ b/core/java/android/accounts/AccountManagerService.java @@ -16,10 +16,6 @@ package android.accounts; -import com.android.internal.R; -import com.android.internal.telephony.ITelephony; -import com.android.internal.telephony.TelephonyIntents; - import android.Manifest; import android.app.ActivityManager; import android.app.Notification; @@ -51,13 +47,13 @@ import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.RemoteException; -import android.os.ServiceManager; import android.os.SystemClock; -import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Log; import android.util.Pair; +import com.android.internal.R; + import java.io.File; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -924,9 +920,6 @@ public class AccountManagerService if (account == null) throw new IllegalArgumentException("account is null"); if (authTokenType == null) throw new IllegalArgumentException("authTokenType is null"); checkBinderPermission(Manifest.permission.USE_CREDENTIALS); - final int callerUid = Binder.getCallingUid(); - final int callerPid = Binder.getCallingPid(); - AccountAuthenticatorCache.ServiceInfo<AuthenticatorDescription> authenticatorInfo = mAuthenticatorCache.getServiceInfo( AuthenticatorDescription.newKey(account.type)); @@ -934,20 +927,19 @@ public class AccountManagerService authenticatorInfo != null && authenticatorInfo.type.customTokens; // skip the check if customTokens + final int callerUid = Binder.getCallingUid(); final boolean permissionGranted = customTokens || permissionIsGranted(account, authTokenType, callerUid); final Bundle loginOptions = (loginOptionsIn == null) ? new Bundle() : loginOptionsIn; - if (customTokens) { - // let authenticator know the identity of the caller - loginOptions.putInt(AccountManager.KEY_CALLER_UID, callerUid); - loginOptions.putInt(AccountManager.KEY_CALLER_PID, callerPid); - if (notifyOnAuthFailure) { - loginOptions.putBoolean(AccountManager.KEY_NOTIFY_ON_FAILURE, true); - } + // let authenticator know the identity of the caller + loginOptions.putInt(AccountManager.KEY_CALLER_UID, callerUid); + loginOptions.putInt(AccountManager.KEY_CALLER_PID, Binder.getCallingPid()); + if (notifyOnAuthFailure) { + loginOptions.putBoolean(AccountManager.KEY_NOTIFY_ON_FAILURE, true); } - + long identityToken = clearCallingIdentity(); try { // if the caller has permission, do the peek. otherwise go the more expensive @@ -1120,7 +1112,7 @@ public class AccountManagerService public void addAcount(final IAccountManagerResponse response, final String accountType, final String authTokenType, final String[] requiredFeatures, - final boolean expectActivityLaunch, final Bundle options) { + final boolean expectActivityLaunch, final Bundle optionsIn) { if (Log.isLoggable(TAG, Log.VERBOSE)) { Log.v(TAG, "addAccount: accountType " + accountType + ", response " + response @@ -1133,6 +1125,13 @@ public class AccountManagerService if (response == null) throw new IllegalArgumentException("response is null"); if (accountType == null) throw new IllegalArgumentException("accountType is null"); checkManageAccountsPermission(); + + final int pid = Binder.getCallingPid(); + final int uid = Binder.getCallingUid(); + final Bundle options = (optionsIn == null) ? new Bundle() : optionsIn; + options.putInt(AccountManager.KEY_CALLER_UID, uid); + options.putInt(AccountManager.KEY_CALLER_PID, pid); + long identityToken = clearCallingIdentity(); try { new Session(response, accountType, expectActivityLaunch, |
