From f6a945a6cf53327db81be84ef4d16708a864fc18 Mon Sep 17 00:00:00 2001 From: Tony Mantler Date: Thu, 13 Mar 2014 11:30:25 -0700 Subject: [PATCH] Clean up cert handling in AccountSetupCredentialsFragment b/13453003 Change-Id: I87567c7e5cb39c7366c8ed346b0e300c3fc6da16 --- .../activity/setup/AccountCredentials.java | 3 +- .../AccountSetupCredentialsFragment.java | 50 ++++++++++--------- .../activity/setup/AccountSetupFinal.java | 2 +- .../activity/setup/SetupDataFragment.java | 5 ++ 4 files changed, 35 insertions(+), 25 deletions(-) diff --git a/src/com/android/email/activity/setup/AccountCredentials.java b/src/com/android/email/activity/setup/AccountCredentials.java index 41e4d5374..ea27b2333 100644 --- a/src/com/android/email/activity/setup/AccountCredentials.java +++ b/src/com/android/email/activity/setup/AccountCredentials.java @@ -36,7 +36,8 @@ public class AccountCredentials extends Activity final String protocol = getIntent().getStringExtra(EXTRA_PROTOCOL); final AccountSetupCredentialsFragment f = - AccountSetupCredentialsFragment.newInstance(emailAddress, protocol, false); + AccountSetupCredentialsFragment.newInstance(emailAddress, protocol, + null /* clientCert */, false /* passwordFailed */); getFragmentManager().beginTransaction() .add(R.id.account_credentials_fragment_container, f, CREDENTIALS_FRAGMENT_TAG) .commit(); diff --git a/src/com/android/email/activity/setup/AccountSetupCredentialsFragment.java b/src/com/android/email/activity/setup/AccountSetupCredentialsFragment.java index 3a54b45b1..e35d50f8c 100644 --- a/src/com/android/email/activity/setup/AccountSetupCredentialsFragment.java +++ b/src/com/android/email/activity/setup/AccountSetupCredentialsFragment.java @@ -59,6 +59,7 @@ public class AccountSetupCredentialsFragment extends AccountSetupFragment private static final String EXTRA_PASSWORD_FAILED = "password_failed"; public static final String EXTRA_PASSWORD = "password"; + public static final String EXTRA_CLIENT_CERT = "certificate"; public static final String EXTRA_OAUTH_PROVIDER = "provider"; public static final String EXTRA_OAUTH_ACCESS_TOKEN = "accessToken"; public static final String EXTRA_OAUTH_REFRESH_TOKEN = "refreshToken"; @@ -72,7 +73,6 @@ public class AccountSetupCredentialsFragment extends AccountSetupFragment private TextView mPasswordWarningLabel; private TextView mEmailConfirmationLabel; private TextView mEmailConfirmation; - private TextView.OnEditorActionListener mEditorActionListener; private String mEmailAddress; private boolean mOfferOAuth; private boolean mOfferCerts; @@ -94,11 +94,12 @@ public class AccountSetupCredentialsFragment extends AccountSetupFragment * @return new fragment instance */ public static AccountSetupCredentialsFragment newInstance(final String email, - final String protocol, final boolean passwordFailed) { + final String protocol, final String clientCert, final boolean passwordFailed) { final AccountSetupCredentialsFragment f = new AccountSetupCredentialsFragment(); - final Bundle b = new Bundle(2); + final Bundle b = new Bundle(4); b.putString(EXTRA_EMAIL, email); b.putString(EXTRA_PROTOCOL, protocol); + b.putString(EXTRA_CLIENT_CERT, clientCert); b.putBoolean(EXTRA_PASSWORD_FAILED, passwordFailed); f.setArguments(b); return f; @@ -118,30 +119,31 @@ public class AccountSetupCredentialsFragment extends AccountSetupFragment mClientCertificateSelector = UiUtilities.getView(view, R.id.client_certificate_selector); mDeviceIdSection = UiUtilities.getView(view, R.id.device_id_section); mDeviceId = UiUtilities.getView(view, R.id.device_id); - mClientCertificateSelector.setHostCallback(this); mPasswordWarningLabel = UiUtilities.getView(view, R.id.wrong_password_warning_label); mEmailConfirmationLabel = UiUtilities.getView(view, R.id.email_confirmation_label); mEmailConfirmation = UiUtilities.getView(view, R.id.email_confirmation); - mEditorActionListener = new TextView.OnEditorActionListener() { - @Override - public boolean onEditorAction(TextView view, int actionId, KeyEvent event) { - if (actionId == EditorInfo.IME_ACTION_DONE) { - final Callback callback = (Callback) getActivity(); - if (callback != null) { - final Bundle results = new Bundle(1); - results.putString(EXTRA_PASSWORD, getPassword()); - mResults = results; - callback.onCredentialsComplete(results); + mClientCertificateSelector.setHostCallback(this); + mClientCertificateSelector.setCertificate(getArguments().getString(EXTRA_CLIENT_CERT)); + + TextView.OnEditorActionListener editorActionListener = + new TextView.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView view, int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_ACTION_DONE) { + final Callback callback = (Callback) getActivity(); + if (callback != null) { + final Bundle results = getCredentialResults(); + callback.onCredentialsComplete(results); + } + return true; + } else { + return false; + } } - return true; - } else { - return false; - } - } - }; - mImapPasswordText.setOnEditorActionListener(mEditorActionListener); - mRegularPasswordText.setOnEditorActionListener(mEditorActionListener); + }; + mImapPasswordText.setOnEditorActionListener(editorActionListener); + mRegularPasswordText.setOnEditorActionListener(editorActionListener); // After any text edits, call validateFields() which enables or disables the Next button mValidationTextWatcher = new TextWatcher() { @@ -311,8 +313,9 @@ public class AccountSetupCredentialsFragment extends AccountSetupFragment return mResults; } - final Bundle results = new Bundle(1); + final Bundle results = new Bundle(2); results.putString(EXTRA_PASSWORD, getPassword()); + results.putString(EXTRA_CLIENT_CERT, getClientCertificate()); return results; } @@ -339,6 +342,7 @@ public class AccountSetupCredentialsFragment extends AccountSetupFragment * DateUtils.SECOND_IN_MILLIS; hostAuth.mPassword = null; } + hostAuth.mClientCertAlias = results.getString(EXTRA_CLIENT_CERT); } public String getClientCertificate() { diff --git a/src/com/android/email/activity/setup/AccountSetupFinal.java b/src/com/android/email/activity/setup/AccountSetupFinal.java index ce128ba29..3bd1f23f6 100644 --- a/src/com/android/email/activity/setup/AccountSetupFinal.java +++ b/src/com/android/email/activity/setup/AccountSetupFinal.java @@ -454,7 +454,7 @@ public class AccountSetupFinal extends AccountSetupActivity break; case STATE_CREDENTIALS: f = AccountSetupCredentialsFragment.newInstance(mSetupData.getEmail(), - mSetupData.getAccount().getOrCreateHostAuthRecv(this).mProtocol, + mSetupData.getIncomingProtocol(this), mSetupData.getClientCert(this), mPasswordFailed); backstackTag = CREDENTIALS_BACKSTACK_TAG; break; diff --git a/src/com/android/email/activity/setup/SetupDataFragment.java b/src/com/android/email/activity/setup/SetupDataFragment.java index ab5e435f0..1b6687f52 100644 --- a/src/com/android/email/activity/setup/SetupDataFragment.java +++ b/src/com/android/email/activity/setup/SetupDataFragment.java @@ -219,6 +219,11 @@ public class SetupDataFragment extends Fragment implements Parcelable { mIncomingServiceInfo = null; } + public String getClientCert(Context context) { + final HostAuth recvAuth = mAccount.getOrCreateHostAuthRecv(context); + return recvAuth.mClientCertAlias; + } + // Parcelable methods @Override public int describeContents() {