Use AccountAuthenticatorResponse properly.

Current implementation ignores callbacks coming from
AccountManager, which should be called everytime
when this Activity finishes its job.

Bug: 3069222
Change-Id: Iea03cf94bdfe8da184e415bf7e759ddeb46ecdd9
This commit is contained in:
Daisuke Miyakawa 2010-10-07 14:17:11 -07:00
parent 02a750dd64
commit 9dac94975f

View File

@ -23,6 +23,8 @@ import com.android.email.activity.Welcome;
import com.android.email.provider.EmailContent.Account;
import com.android.email.provider.EmailContent.HostAuth;
import android.accounts.AccountAuthenticatorResponse;
import android.accounts.AccountManager;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.content.Context;
@ -48,6 +50,12 @@ public class AccountSetupBasics extends AccountSetupActivity
private boolean mManualButtonDisplayed;
private boolean mNextButtonEnabled;
// Used when this Activity is called as part of account authentification flow,
// which requires to do extra work before and after the account creation.
// See also AccountAuthenticatorActivity.
private AccountAuthenticatorResponse mAccountAuthenticatorResponse = null;
private Bundle mResultBundle = null;
public static void actionNewAccount(Activity fromActivity) {
SetupData.init(SetupData.FLOW_MODE_NORMAL);
fromActivity.startActivity(new Intent(fromActivity, AccountSetupBasics.class));
@ -132,6 +140,13 @@ public class AccountSetupBasics extends AccountSetupActivity
// Configure fragment
mFragment.setCallback(this, alternateStrings);
mAccountAuthenticatorResponse =
getIntent().getParcelableExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE);
if (mAccountAuthenticatorResponse != null) {
mAccountAuthenticatorResponse.onRequestContinued();
}
}
/**
@ -248,4 +263,19 @@ public class AccountSetupBasics extends AccountSetupActivity
SetupData.setAllowAutodiscover(allowAutoDiscover);
AccountSetupAccountType.actionSelectAccountType(this);
}
@Override
public void finish() {
if (mAccountAuthenticatorResponse != null) {
// send the result bundle back if set, otherwise send an error.
if (mResultBundle != null) {
mAccountAuthenticatorResponse.onResult(mResultBundle);
} else {
mAccountAuthenticatorResponse.onError(AccountManager.ERROR_CODE_CANCELED,
"canceled");
}
mAccountAuthenticatorResponse = null;
}
super.finish();
}
}