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
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user