ChooseAccountTypeActivitypublic class ChooseAccountTypeActivity extends android.app.Activity
Fields Summary |
---|
private static final String | TAG | private HashMap | mTypeToAuthenticatorInfo | private ArrayList | mAuthenticatorInfosToDisplay |
Methods Summary |
---|
private void | buildTypeToAuthDescriptionMap()
for(AuthenticatorDescription desc : AccountManager.get(this).getAuthenticatorTypes()) {
String name = null;
Drawable icon = null;
try {
Context authContext = createPackageContext(desc.packageName, 0);
icon = authContext.getDrawable(desc.iconId);
final CharSequence sequence = authContext.getResources().getText(desc.labelId);
if (sequence != null) {
name = sequence.toString();
}
name = sequence.toString();
} catch (PackageManager.NameNotFoundException e) {
// Nothing we can do much here, just log
if (Log.isLoggable(TAG, Log.WARN)) {
Log.w(TAG, "No icon name for account type " + desc.type);
}
} catch (Resources.NotFoundException e) {
// Nothing we can do much here, just log
if (Log.isLoggable(TAG, Log.WARN)) {
Log.w(TAG, "No icon resource for account type " + desc.type);
}
}
AuthInfo authInfo = new AuthInfo(desc, name, icon);
mTypeToAuthenticatorInfo.put(desc.type, authInfo);
}
| public void | onCreate(android.os.Bundle savedInstanceState)
super.onCreate(savedInstanceState);
if (Log.isLoggable(TAG, Log.VERBOSE)) {
Log.v(TAG, "ChooseAccountTypeActivity.onCreate(savedInstanceState="
+ savedInstanceState + ")");
}
// Read the validAccountTypes, if present, and add them to the setOfAllowableAccountTypes
Set<String> setOfAllowableAccountTypes = null;
String[] validAccountTypes = getIntent().getStringArrayExtra(
ChooseTypeAndAccountActivity.EXTRA_ALLOWABLE_ACCOUNT_TYPES_STRING_ARRAY);
if (validAccountTypes != null) {
setOfAllowableAccountTypes = new HashSet<String>(validAccountTypes.length);
for (String type : validAccountTypes) {
setOfAllowableAccountTypes.add(type);
}
}
// create a map of account authenticators
buildTypeToAuthDescriptionMap();
// Create a list of authenticators that are allowable. Filter out those that
// don't match the allowable account types, if provided.
mAuthenticatorInfosToDisplay = new ArrayList<AuthInfo>(mTypeToAuthenticatorInfo.size());
for (Map.Entry<String, AuthInfo> entry: mTypeToAuthenticatorInfo.entrySet()) {
final String type = entry.getKey();
final AuthInfo info = entry.getValue();
if (setOfAllowableAccountTypes != null
&& !setOfAllowableAccountTypes.contains(type)) {
continue;
}
mAuthenticatorInfosToDisplay.add(info);
}
if (mAuthenticatorInfosToDisplay.isEmpty()) {
Bundle bundle = new Bundle();
bundle.putString(AccountManager.KEY_ERROR_MESSAGE, "no allowable account types");
setResult(Activity.RESULT_OK, new Intent().putExtras(bundle));
finish();
return;
}
if (mAuthenticatorInfosToDisplay.size() == 1) {
setResultAndFinish(mAuthenticatorInfosToDisplay.get(0).desc.type);
return;
}
setContentView(R.layout.choose_account_type);
// Setup the list
ListView list = (ListView) findViewById(android.R.id.list);
// Use an existing ListAdapter that will map an array of strings to TextViews
list.setAdapter(new AccountArrayAdapter(this,
android.R.layout.simple_list_item_1, mAuthenticatorInfosToDisplay));
list.setChoiceMode(ListView.CHOICE_MODE_NONE);
list.setTextFilterEnabled(false);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
setResultAndFinish(mAuthenticatorInfosToDisplay.get(position).desc.type);
}
});
| private void | setResultAndFinish(java.lang.String type)
Bundle bundle = new Bundle();
bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, type);
setResult(Activity.RESULT_OK, new Intent().putExtras(bundle));
if (Log.isLoggable(TAG, Log.VERBOSE)) {
Log.v(TAG, "ChooseAccountTypeActivity.setResultAndFinish: "
+ "selected account type " + type);
}
finish();
|
|