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
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 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 @@
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 @@
*/
@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 @@
* 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 @@
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.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 @@
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 @@
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 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 @@
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,