Merge "Revert "Revert "Security: AccountChooser shouldn't auto reveal accounts.""" into mnc-dev

This commit is contained in:
Carlos Valdivia
2015-07-11 00:40:07 +00:00
committed by Android (Google) Code Review
4 changed files with 66 additions and 22 deletions

View File

@ -2716,7 +2716,8 @@ package android.accounts {
method public java.lang.String getUserData(android.accounts.Account, java.lang.String); method public java.lang.String getUserData(android.accounts.Account, java.lang.String);
method public android.accounts.AccountManagerFuture<java.lang.Boolean> hasFeatures(android.accounts.Account, java.lang.String[], android.accounts.AccountManagerCallback<java.lang.Boolean>, android.os.Handler); method public android.accounts.AccountManagerFuture<java.lang.Boolean> hasFeatures(android.accounts.Account, java.lang.String[], android.accounts.AccountManagerCallback<java.lang.Boolean>, android.os.Handler);
method public void invalidateAuthToken(java.lang.String, java.lang.String); method public void invalidateAuthToken(java.lang.String, java.lang.String);
method public static android.content.Intent newChooseAccountIntent(android.accounts.Account, java.util.ArrayList<android.accounts.Account>, java.lang.String[], boolean, java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle); method public static deprecated android.content.Intent newChooseAccountIntent(android.accounts.Account, java.util.ArrayList<android.accounts.Account>, java.lang.String[], boolean, java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle);
method public static android.content.Intent newChooseAccountIntent(android.accounts.Account, java.util.List<android.accounts.Account>, java.lang.String[], java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle);
method public boolean notifyAccountAuthenticated(android.accounts.Account); method public boolean notifyAccountAuthenticated(android.accounts.Account);
method public java.lang.String peekAuthToken(android.accounts.Account, java.lang.String); method public java.lang.String peekAuthToken(android.accounts.Account, java.lang.String);
method public deprecated android.accounts.AccountManagerFuture<java.lang.Boolean> removeAccount(android.accounts.Account, android.accounts.AccountManagerCallback<java.lang.Boolean>, android.os.Handler); method public deprecated android.accounts.AccountManagerFuture<java.lang.Boolean> removeAccount(android.accounts.Account, android.accounts.AccountManagerCallback<java.lang.Boolean>, android.os.Handler);

View File

@ -2813,7 +2813,8 @@ package android.accounts {
method public java.lang.String getUserData(android.accounts.Account, java.lang.String); method public java.lang.String getUserData(android.accounts.Account, java.lang.String);
method public android.accounts.AccountManagerFuture<java.lang.Boolean> hasFeatures(android.accounts.Account, java.lang.String[], android.accounts.AccountManagerCallback<java.lang.Boolean>, android.os.Handler); method public android.accounts.AccountManagerFuture<java.lang.Boolean> hasFeatures(android.accounts.Account, java.lang.String[], android.accounts.AccountManagerCallback<java.lang.Boolean>, android.os.Handler);
method public void invalidateAuthToken(java.lang.String, java.lang.String); method public void invalidateAuthToken(java.lang.String, java.lang.String);
method public static android.content.Intent newChooseAccountIntent(android.accounts.Account, java.util.ArrayList<android.accounts.Account>, java.lang.String[], boolean, java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle); method public static deprecated android.content.Intent newChooseAccountIntent(android.accounts.Account, java.util.ArrayList<android.accounts.Account>, java.lang.String[], boolean, java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle);
method public static android.content.Intent newChooseAccountIntent(android.accounts.Account, java.util.List<android.accounts.Account>, java.lang.String[], java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle);
method public boolean notifyAccountAuthenticated(android.accounts.Account); method public boolean notifyAccountAuthenticated(android.accounts.Account);
method public java.lang.String peekAuthToken(android.accounts.Account, java.lang.String); method public java.lang.String peekAuthToken(android.accounts.Account, java.lang.String);
method public deprecated android.accounts.AccountManagerFuture<java.lang.Boolean> removeAccount(android.accounts.Account, android.accounts.AccountManagerCallback<java.lang.Boolean>, android.os.Handler); method public deprecated android.accounts.AccountManagerFuture<java.lang.Boolean> removeAccount(android.accounts.Account, android.accounts.AccountManagerCallback<java.lang.Boolean>, android.os.Handler);

View File

@ -43,6 +43,7 @@ import com.google.android.collect.Maps;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import java.util.concurrent.CancellationException; import java.util.concurrent.CancellationException;
@ -2259,6 +2260,9 @@ public class AccountManager {
} }
/** /**
* Deprecated in favor of {@link #newChooseAccountIntent(Account, List, String[], String,
* String, String[], Bundle)}.
*
* Returns an intent to an {@link Activity} that prompts the user to choose from a list of * Returns an intent to an {@link Activity} that prompts the user to choose from a list of
* accounts. * accounts.
* The caller will then typically start the activity by calling * The caller will then typically start the activity by calling
@ -2273,14 +2277,13 @@ public class AccountManager {
* null, null, null);</pre> * null, null, null);</pre>
* @param selectedAccount if specified, indicates that the {@link Account} is the currently * @param selectedAccount if specified, indicates that the {@link Account} is the currently
* selected one, according to the caller's definition of selected. * selected one, according to the caller's definition of selected.
* @param allowableAccounts an optional {@link ArrayList} of accounts that are allowed to be * @param allowableAccounts an optional {@link List} of accounts that are allowed to be
* shown. If not specified then this field will not limit the displayed accounts. * shown. If not specified then this field will not limit the displayed accounts.
* @param allowableAccountTypes an optional string array of account types. These are used * @param allowableAccountTypes an optional string array of account types. These are used
* both to filter the shown accounts and to filter the list of account types that are shown * both to filter the shown accounts and to filter the list of account types that are shown
* when adding an account. If not specified then this field will not limit the displayed * when adding an account. If not specified then this field will not limit the displayed
* account types when adding an account. * account types when adding an account.
* @param alwaysPromptForAccount if set the account chooser screen is always shown, otherwise * @param alwaysPromptForAccount boolean that is ignored.
* it is only shown when there is more than one account from which to choose
* @param descriptionOverrideText if non-null this string is used as the description in the * @param descriptionOverrideText if non-null this string is used as the description in the
* accounts chooser screen rather than the default * accounts chooser screen rather than the default
* @param addAccountAuthTokenType this string is passed as the {@link #addAccount} * @param addAccountAuthTokenType this string is passed as the {@link #addAccount}
@ -2291,7 +2294,9 @@ public class AccountManager {
* parameter * parameter
* @return an {@link Intent} that can be used to launch the ChooseAccount activity flow. * @return an {@link Intent} that can be used to launch the ChooseAccount activity flow.
*/ */
static public Intent newChooseAccountIntent(Account selectedAccount, @Deprecated
static public Intent newChooseAccountIntent(
Account selectedAccount,
ArrayList<Account> allowableAccounts, ArrayList<Account> allowableAccounts,
String[] allowableAccountTypes, String[] allowableAccountTypes,
boolean alwaysPromptForAccount, boolean alwaysPromptForAccount,
@ -2299,20 +2304,67 @@ public class AccountManager {
String addAccountAuthTokenType, String addAccountAuthTokenType,
String[] addAccountRequiredFeatures, String[] addAccountRequiredFeatures,
Bundle addAccountOptions) { Bundle addAccountOptions) {
return newChooseAccountIntent(
selectedAccount,
allowableAccounts,
allowableAccountTypes,
descriptionOverrideText,
addAccountAuthTokenType,
addAccountRequiredFeatures,
addAccountOptions);
}
/**
* Returns an intent to an {@link Activity} that prompts the user to choose from a list of
* accounts.
* The caller will then typically start the activity by calling
* <code>startActivityForResult(intent, ...);</code>.
* <p>
* On success the activity returns a Bundle with the account name and type specified using
* keys {@link #KEY_ACCOUNT_NAME} and {@link #KEY_ACCOUNT_TYPE}.
* <p>
* The most common case is to call this with one account type, e.g.:
* <p>
* <pre> newChooseAccountIntent(null, null, new String[]{"com.google"}, null, null, null,
* null);</pre>
* @param selectedAccount if specified, indicates that the {@link Account} is the currently
* selected one, according to the caller's definition of selected.
* @param allowableAccounts an optional {@link List} of accounts that are allowed to be
* shown. If not specified then this field will not limit the displayed accounts.
* @param allowableAccountTypes an optional string array of account types. These are used
* both to filter the shown accounts and to filter the list of account types that are shown
* when adding an account. If not specified then this field will not limit the displayed
* account types when adding an account.
* @param descriptionOverrideText if non-null this string is used as the description in the
* accounts chooser screen rather than the default
* @param addAccountAuthTokenType this string is passed as the {@link #addAccount}
* authTokenType parameter
* @param addAccountRequiredFeatures this string array is passed as the {@link #addAccount}
* requiredFeatures parameter
* @param addAccountOptions This {@link Bundle} is passed as the {@link #addAccount} options
* parameter
* @return an {@link Intent} that can be used to launch the ChooseAccount activity flow.
*/
static public Intent newChooseAccountIntent(
Account selectedAccount,
List<Account> allowableAccounts,
String[] allowableAccountTypes,
String descriptionOverrideText,
String addAccountAuthTokenType,
String[] addAccountRequiredFeatures,
Bundle addAccountOptions) {
Intent intent = new Intent(); Intent intent = new Intent();
ComponentName componentName = ComponentName.unflattenFromString( ComponentName componentName = ComponentName.unflattenFromString(
Resources.getSystem().getString(R.string.config_chooseTypeAndAccountActivity)); Resources.getSystem().getString(R.string.config_chooseTypeAndAccountActivity));
intent.setClassName(componentName.getPackageName(), intent.setClassName(componentName.getPackageName(),
componentName.getClassName()); componentName.getClassName());
intent.putExtra(ChooseTypeAndAccountActivity.EXTRA_ALLOWABLE_ACCOUNTS_ARRAYLIST, intent.putExtra(ChooseTypeAndAccountActivity.EXTRA_ALLOWABLE_ACCOUNTS_ARRAYLIST,
allowableAccounts); new ArrayList<Account>(allowableAccounts));
intent.putExtra(ChooseTypeAndAccountActivity.EXTRA_ALLOWABLE_ACCOUNT_TYPES_STRING_ARRAY, intent.putExtra(ChooseTypeAndAccountActivity.EXTRA_ALLOWABLE_ACCOUNT_TYPES_STRING_ARRAY,
allowableAccountTypes); allowableAccountTypes);
intent.putExtra(ChooseTypeAndAccountActivity.EXTRA_ADD_ACCOUNT_OPTIONS_BUNDLE, intent.putExtra(ChooseTypeAndAccountActivity.EXTRA_ADD_ACCOUNT_OPTIONS_BUNDLE,
addAccountOptions); addAccountOptions);
intent.putExtra(ChooseTypeAndAccountActivity.EXTRA_SELECTED_ACCOUNT, selectedAccount); intent.putExtra(ChooseTypeAndAccountActivity.EXTRA_SELECTED_ACCOUNT, selectedAccount);
intent.putExtra(ChooseTypeAndAccountActivity.EXTRA_ALWAYS_PROMPT_FOR_ACCOUNT,
alwaysPromptForAccount);
intent.putExtra(ChooseTypeAndAccountActivity.EXTRA_DESCRIPTION_TEXT_OVERRIDE, intent.putExtra(ChooseTypeAndAccountActivity.EXTRA_DESCRIPTION_TEXT_OVERRIDE,
descriptionOverrideText); descriptionOverrideText);
intent.putExtra(ChooseTypeAndAccountActivity.EXTRA_ADD_ACCOUNT_AUTH_TOKEN_TYPE_STRING, intent.putExtra(ChooseTypeAndAccountActivity.EXTRA_ADD_ACCOUNT_AUTH_TOKEN_TYPE_STRING,

View File

@ -88,9 +88,10 @@ public class ChooseTypeAndAccountActivity extends Activity
public static final String EXTRA_SELECTED_ACCOUNT = "selectedAccount"; public static final String EXTRA_SELECTED_ACCOUNT = "selectedAccount";
/** /**
* If true then display the account selection list even if there is just * Deprecated. Providing this extra to {@link ChooseTypeAndAccountActivity}
* one account to choose from. boolean. * will have no effect.
*/ */
@Deprecated
public static final String EXTRA_ALWAYS_PROMPT_FOR_ACCOUNT = public static final String EXTRA_ALWAYS_PROMPT_FOR_ACCOUNT =
"alwaysPromptForAccount"; "alwaysPromptForAccount";
@ -117,7 +118,6 @@ public class ChooseTypeAndAccountActivity extends Activity
private Set<String> mSetOfRelevantAccountTypes; private Set<String> mSetOfRelevantAccountTypes;
private String mSelectedAccountName = null; private String mSelectedAccountName = null;
private boolean mSelectedAddNewAccount = false; private boolean mSelectedAddNewAccount = false;
private boolean mAlwaysPromptForAccount = false;
private String mDescriptionOverride; private String mDescriptionOverride;
private ArrayList<Account> mAccounts; private ArrayList<Account> mAccounts;
@ -188,7 +188,6 @@ public class ChooseTypeAndAccountActivity extends Activity
mSetOfAllowableAccounts = getAllowableAccountSet(intent); mSetOfAllowableAccounts = getAllowableAccountSet(intent);
mSetOfRelevantAccountTypes = getReleventAccountTypes(intent); mSetOfRelevantAccountTypes = getReleventAccountTypes(intent);
mAlwaysPromptForAccount = intent.getBooleanExtra(EXTRA_ALWAYS_PROMPT_FOR_ACCOUNT, false);
mDescriptionOverride = intent.getStringExtra(EXTRA_DESCRIPTION_TEXT_OVERRIDE); mDescriptionOverride = intent.getStringExtra(EXTRA_DESCRIPTION_TEXT_OVERRIDE);
mAccounts = getAcceptableAccountChoices(AccountManager.get(this)); mAccounts = getAcceptableAccountChoices(AccountManager.get(this));
@ -218,15 +217,6 @@ public class ChooseTypeAndAccountActivity extends Activity
} else { } else {
startChooseAccountTypeActivity(); startChooseAccountTypeActivity();
} }
return;
}
// if there is only one allowable account return it
if (!mAlwaysPromptForAccount && mAccounts.size() == 1) {
Account account = mAccounts.get(0);
super.onCreate(savedInstanceState);
setResultAndFinish(account.name, account.type);
return;
} }
} }