diff --git a/emailcommon/src/com/android/emailcommon/utility/CertificateRequestor.java b/emailcommon/src/com/android/emailcommon/utility/CertificateRequestor.java
index b78895b3a..3217d0f0b 100644
--- a/emailcommon/src/com/android/emailcommon/utility/CertificateRequestor.java
+++ b/emailcommon/src/com/android/emailcommon/utility/CertificateRequestor.java
@@ -19,6 +19,7 @@ package com.android.emailcommon.utility;
import android.app.Activity;
import android.content.Intent;
+import android.net.Uri;
import android.os.Bundle;
import android.security.KeyChain;
import android.security.KeyChainAliasCallback;
@@ -28,14 +29,14 @@ import android.security.KeyChainAliasCallback;
* a certificate to use for establishing secure connections in the Email app.
*/
public class CertificateRequestor extends Activity implements KeyChainAliasCallback {
-
- public static final String ACTION_REQUEST_CERT = "com.android.emailcommon.REQUEST_CERT";
-
public static final String EXTRA_HOST = "CertificateRequestor.host";
public static final String EXTRA_PORT = "CertificateRequestor.port";
public static final String RESULT_ALIAS = "CertificateRequestor.alias";
+ public static final Uri CERTIFICATE_REQUEST_URI =
+ Uri.parse("eas://com.android.emailcommon/certrequest");
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -44,11 +45,13 @@ public class CertificateRequestor extends Activity implements KeyChainAliasCallb
String host = i.getStringExtra(EXTRA_HOST);
int port = i.getIntExtra(EXTRA_PORT, -1);
- KeyChain.choosePrivateKeyAlias(
- this, this,
- null /* keytypes */, null /* issuers */,
- host, port,
- null /* alias */);
+ if (savedInstanceState == null) {
+ KeyChain.choosePrivateKeyAlias(
+ this, this,
+ null /* keytypes */, null /* issuers */,
+ host, port,
+ null /* alias */);
+ }
}
/**
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 74c1c87c0..87742f878 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -839,6 +839,7 @@
com.android.email
com.android.email
com.android.email.EXCHANGE_INTENT
+ com.android.email.EXCHANGE_REQUEST_CERT
com.android.exchange
com.android.email.activity.setup.ACCOUNT_MANAGER_ENTRY
com.android.email.CREATE_ACCOUNT
diff --git a/src/com/android/email/activity/setup/AccountSetupCredentialsFragment.java b/src/com/android/email/activity/setup/AccountSetupCredentialsFragment.java
index 9cfb9c89b..82106434f 100644
--- a/src/com/android/email/activity/setup/AccountSetupCredentialsFragment.java
+++ b/src/com/android/email/activity/setup/AccountSetupCredentialsFragment.java
@@ -18,7 +18,6 @@ package com.android.email.activity.setup;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
-import android.net.Uri;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
@@ -354,8 +353,10 @@ public class AccountSetupCredentialsFragment extends AccountSetupFragment
@Override
public void onCertificateRequested() {
- final Intent intent = new Intent(CertificateRequestor.ACTION_REQUEST_CERT);
- intent.setData(Uri.parse("eas://com.android.emailcommon/certrequest"));
+ final Intent intent = new Intent(getString(R.string.intent_exchange_cert_action));
+ intent.setData(CertificateRequestor.CERTIFICATE_REQUEST_URI);
+ // We don't set EXTRA_HOST or EXTRA_PORT here because we don't know the final host/port
+ // that we're connecting to yet, and autodiscover might point us somewhere else
startActivityForResult(intent, CERTIFICATE_REQUEST);
}
}
diff --git a/src/com/android/email/activity/setup/AccountSetupIncomingFragment.java b/src/com/android/email/activity/setup/AccountSetupIncomingFragment.java
index eb0a1a9ad..bfd647cba 100644
--- a/src/com/android/email/activity/setup/AccountSetupIncomingFragment.java
+++ b/src/com/android/email/activity/setup/AccountSetupIncomingFragment.java
@@ -20,7 +20,6 @@ import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.Loader;
-import android.net.Uri;
import android.os.Bundle;
import android.os.Parcel;
import android.text.Editable;
@@ -611,8 +610,15 @@ public class AccountSetupIncomingFragment extends AccountServerBaseFragment
@Override
public void onCertificateRequested() {
- final Intent intent = new Intent(CertificateRequestor.ACTION_REQUEST_CERT);
- intent.setData(Uri.parse("eas://com.android.emailcommon/certrequest"));
+ final Intent intent = new Intent(getString(R.string.intent_exchange_cert_action));
+ intent.setData(CertificateRequestor.CERTIFICATE_REQUEST_URI);
+ intent.putExtra(CertificateRequestor.EXTRA_HOST, mServerView.getText().toString().trim());
+ try {
+ intent.putExtra(CertificateRequestor.EXTRA_PORT,
+ Integer.parseInt(mPortView.getText().toString().trim()));
+ } catch (final NumberFormatException e) {
+ LogUtils.d(LogUtils.TAG, "Couldn't parse port %s", mPortView.getText());
+ }
startActivityForResult(intent, CERTIFICATE_REQUEST);
}