summaryrefslogtreecommitdiffstats
path: root/core/java/android/accounts
diff options
context:
space:
mode:
authorFred Quintana <fredq@google.com>2011-09-27 17:24:32 -0700
committerFred Quintana <fredq@google.com>2011-09-27 17:24:32 -0700
commit9bbdd0bf5006512a000b0d3e6bd6ee2998a2e48b (patch)
treef283bef13310621e4f220ca8caa738776a6919d7 /core/java/android/accounts
parent2783e1ce7a9b2c82983223754228c06be6713a0f (diff)
downloadframeworks_base-9bbdd0bf5006512a000b0d3e6bd6ee2998a2e48b.zip
frameworks_base-9bbdd0bf5006512a000b0d3e6bd6ee2998a2e48b.tar.gz
frameworks_base-9bbdd0bf5006512a000b0d3e6bd6ee2998a2e48b.tar.bz2
Fix a bug in the account chooser where relaunching an in-progress flow
results in a blank screen. The fix involves making the first activity just call the account type chooser to get the account type to add, rather than having the account type chooser also kick off the AccountManager.addAccount() request itself. Instead the first activity will get the type back and then call AccountManager.addAccount() Bug: 5346810 Change-Id: I4a0cf2370971b98f8ee0910f5401d97e999e546b
Diffstat (limited to 'core/java/android/accounts')
-rw-r--r--core/java/android/accounts/ChooseAccountTypeActivity.java54
-rw-r--r--core/java/android/accounts/ChooseTypeAndAccountActivity.java47
2 files changed, 56 insertions, 45 deletions
diff --git a/core/java/android/accounts/ChooseAccountTypeActivity.java b/core/java/android/accounts/ChooseAccountTypeActivity.java
index 5239e8c..448b2c0 100644
--- a/core/java/android/accounts/ChooseAccountTypeActivity.java
+++ b/core/java/android/accounts/ChooseAccountTypeActivity.java
@@ -33,7 +33,6 @@ import android.widget.ListView;
import android.widget.TextView;
import com.android.internal.R;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -43,7 +42,7 @@ import java.util.Set;
/**
* @hide
*/
-public class ChooseAccountTypeActivity extends Activity implements AccountManagerCallback<Bundle> {
+public class ChooseAccountTypeActivity extends Activity {
private static final String TAG = "AccountManager";
private HashMap<String, AuthInfo> mTypeToAuthenticatorInfo = new HashMap<String, AuthInfo>();
@@ -52,7 +51,6 @@ public class ChooseAccountTypeActivity extends Activity implements AccountManage
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.choose_account_type);
// Read the validAccountTypes, if present, and add them to the setOfAllowableAccountTypes
Set<String> setOfAllowableAccountTypes = null;
@@ -90,10 +88,11 @@ public class ChooseAccountTypeActivity extends Activity implements AccountManage
}
if (mAuthenticatorInfosToDisplay.size() == 1) {
- runAddAccountForAuthenticator(mAuthenticatorInfosToDisplay.get(0));
+ 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
@@ -103,11 +102,20 @@ public class ChooseAccountTypeActivity extends Activity implements AccountManage
list.setTextFilterEnabled(false);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
- runAddAccountForAuthenticator(mAuthenticatorInfosToDisplay.get(position));
+ setResultAndFinish(mAuthenticatorInfosToDisplay.get(position).desc.type);
}
});
}
+ private void setResultAndFinish(final String type) {
+ Bundle bundle = new Bundle();
+ bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, type);
+ setResult(Activity.RESULT_OK, new Intent().putExtras(bundle));
+ Log.d(TAG, "ChooseAccountTypeActivity.setResultAndFinish: "
+ + "selected account type " + type);
+ finish();
+ }
+
private void buildTypeToAuthDescriptionMap() {
for(AuthenticatorDescription desc : AccountManager.get(this).getAuthenticatorTypes()) {
String name = null;
@@ -136,42 +144,6 @@ public class ChooseAccountTypeActivity extends Activity implements AccountManage
}
}
- protected void runAddAccountForAuthenticator(AuthInfo authInfo) {
- Log.d(TAG, "selected account type " + authInfo.name);
- final Bundle options = getIntent().getBundleExtra(
- ChooseTypeAndAccountActivity.EXTRA_ADD_ACCOUNT_OPTIONS_BUNDLE);
- final String[] requiredFeatures = getIntent().getStringArrayExtra(
- ChooseTypeAndAccountActivity.EXTRA_ADD_ACCOUNT_REQUIRED_FEATURES_STRING_ARRAY);
- final String authTokenType = getIntent().getStringExtra(
- ChooseTypeAndAccountActivity.EXTRA_ADD_ACCOUNT_AUTH_TOKEN_TYPE_STRING);
- AccountManager.get(this).addAccount(authInfo.desc.type, authTokenType, requiredFeatures,
- options, this, this, null /* Handler */);
- }
-
- public void run(final AccountManagerFuture<Bundle> accountManagerFuture) {
- try {
- Bundle accountManagerResult = accountManagerFuture.getResult();
- Bundle bundle = new Bundle();
- bundle.putString(AccountManager.KEY_ACCOUNT_NAME,
- accountManagerResult.getString(AccountManager.KEY_ACCOUNT_NAME));
- bundle.putString(AccountManager.KEY_ACCOUNT_TYPE,
- accountManagerResult.getString(AccountManager.KEY_ACCOUNT_TYPE));
- setResult(Activity.RESULT_OK, new Intent().putExtras(bundle));
- finish();
- return;
- } catch (OperationCanceledException e) {
- setResult(Activity.RESULT_CANCELED);
- finish();
- return;
- } catch (IOException e) {
- } catch (AuthenticatorException e) {
- }
- Bundle bundle = new Bundle();
- bundle.putString(AccountManager.KEY_ERROR_MESSAGE, "error communicating with server");
- setResult(Activity.RESULT_OK, new Intent().putExtras(bundle));
- finish();
- }
-
private static class AuthInfo {
final AuthenticatorDescription desc;
final String name;
diff --git a/core/java/android/accounts/ChooseTypeAndAccountActivity.java b/core/java/android/accounts/ChooseTypeAndAccountActivity.java
index 852c4dd..8cc2002 100644
--- a/core/java/android/accounts/ChooseTypeAndAccountActivity.java
+++ b/core/java/android/accounts/ChooseTypeAndAccountActivity.java
@@ -36,6 +36,7 @@ import android.widget.ListView;
import android.widget.TextView;
import com.android.internal.R;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -44,7 +45,8 @@ import java.util.Set;
/**
* @hide
*/
-public class ChooseTypeAndAccountActivity extends Activity {
+public class ChooseTypeAndAccountActivity extends Activity
+ implements AccountManagerCallback<Bundle> {
private static final String TAG = "AccountManager";
/**
@@ -211,10 +213,9 @@ public class ChooseTypeAndAccountActivity extends Activity {
protected void onActivityResult(final int requestCode, final int resultCode,
final Intent data) {
if (resultCode == RESULT_OK && data != null) {
- String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
String accountType = data.getStringExtra(AccountManager.KEY_ACCOUNT_TYPE);
- if (accountName != null && accountType != null) {
- setResultAndFinish(accountName, accountType);
+ if (accountType != null) {
+ runAddAccountForAuthenticator(accountType);
return;
}
}
@@ -223,6 +224,43 @@ public class ChooseTypeAndAccountActivity extends Activity {
finish();
}
+ protected void runAddAccountForAuthenticator(String type) {
+ Log.d(TAG, "selected account type " + type);
+ final Bundle options = getIntent().getBundleExtra(
+ ChooseTypeAndAccountActivity.EXTRA_ADD_ACCOUNT_OPTIONS_BUNDLE);
+ final String[] requiredFeatures = getIntent().getStringArrayExtra(
+ ChooseTypeAndAccountActivity.EXTRA_ADD_ACCOUNT_REQUIRED_FEATURES_STRING_ARRAY);
+ final String authTokenType = getIntent().getStringExtra(
+ ChooseTypeAndAccountActivity.EXTRA_ADD_ACCOUNT_AUTH_TOKEN_TYPE_STRING);
+ AccountManager.get(this).addAccount(type, authTokenType, requiredFeatures,
+ options, this, this, null /* Handler */);
+ }
+
+ public void run(final AccountManagerFuture<Bundle> accountManagerFuture) {
+ try {
+ final Bundle accountManagerResult = accountManagerFuture.getResult();
+ final String name = accountManagerResult.getString(AccountManager.KEY_ACCOUNT_NAME);
+ final String type = accountManagerResult.getString(AccountManager.KEY_ACCOUNT_TYPE);
+ if (name != null && type != null) {
+ final Bundle bundle = new Bundle();
+ bundle.putString(AccountManager.KEY_ACCOUNT_NAME, name);
+ bundle.putString(AccountManager.KEY_ACCOUNT_TYPE, type);
+ setResult(Activity.RESULT_OK, new Intent().putExtras(bundle));
+ finish();
+ return;
+ }
+ } catch (OperationCanceledException e) {
+ setResult(Activity.RESULT_CANCELED);
+ finish();
+ return;
+ } catch (IOException e) {
+ } catch (AuthenticatorException e) {
+ }
+ Bundle bundle = new Bundle();
+ bundle.putString(AccountManager.KEY_ERROR_MESSAGE, "error communicating with server");
+ setResult(Activity.RESULT_OK, new Intent().putExtras(bundle));
+ finish();
+ }
private Drawable getDrawableForType(
final HashMap<String, AuthenticatorDescription> typeToAuthDescription,
@@ -266,6 +304,7 @@ public class ChooseTypeAndAccountActivity extends Activity {
private void startChooseAccountTypeActivity() {
final Intent intent = new Intent(this, ChooseAccountTypeActivity.class);
+ intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
intent.putExtra(EXTRA_ALLOWABLE_ACCOUNT_TYPES_STRING_ARRAY,
getIntent().getStringArrayExtra(EXTRA_ALLOWABLE_ACCOUNT_TYPES_STRING_ARRAY));
intent.putExtra(EXTRA_ADD_ACCOUNT_OPTIONS_BUNDLE,