diff --git a/res/layout/cstor_name_credential_dialog_view.xml b/res/layout/cstor_name_credential_dialog_view.xml
index e5ccb3675db..33688bd25cf 100644
--- a/res/layout/cstor_name_credential_dialog_view.xml
+++ b/res/layout/cstor_name_credential_dialog_view.xml
@@ -46,6 +46,22 @@
android:layout_height="wrap_content"
android:singleLine="True"/>
+
+
+
+
+
Certificate name:
+
+ Password to extract the certificate:
Certificate details:
The name can contain only letters and numbers.
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index 91fadecf821..f579b788a73 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -37,6 +37,7 @@ import android.preference.PreferenceCategory;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
import android.provider.Settings;
+import android.security.CertTool;
import android.security.Keystore;
import android.text.Html;
import android.text.TextUtils;
@@ -630,6 +631,17 @@ public class SecuritySettings extends PreferenceActivity implements
}
mCstorAddCredentialHelper.setName(name);
+
+ if (mCstorAddCredentialHelper.isPkcs12Keystore()) {
+ String password = getText(R.id.cstor_credential_password);
+ if (TextUtils.isEmpty(password)) {
+ showError(R.string.cstor_password_empty_error);
+ return false;
+ }
+
+ mCstorAddCredentialHelper.setPassword(password);
+ }
+
return true;
}
@@ -881,6 +893,9 @@ public class SecuritySettings extends PreferenceActivity implements
mView = View.inflate(SecuritySettings.this,
R.layout.cstor_name_credential_dialog_view, null);
hideError();
+ if (!mCstorAddCredentialHelper.isPkcs12Keystore()) {
+ hide(R.id.cstor_credential_password_container);
+ }
setText(R.id.cstor_credential_name_title,
R.string.cstor_credential_name);
@@ -907,6 +922,7 @@ public class SecuritySettings extends PreferenceActivity implements
private List mNamespaceList;
private String mDescription;
private String mName;
+ private String mPassword;
CstorAddCredentialHelper(Intent intent) {
parse(intent);
@@ -916,6 +932,10 @@ public class SecuritySettings extends PreferenceActivity implements
return mTypeName;
}
+ boolean isPkcs12Keystore() {
+ return CertTool.TITLE_PKCS12_KEYSTORE.equals(mTypeName);
+ }
+
CharSequence getDescription() {
return Html.fromHtml(mDescription);
}
@@ -928,12 +948,26 @@ public class SecuritySettings extends PreferenceActivity implements
return mName;
}
+ void setPassword(String password) {
+ mPassword = password;
+ }
+
+ String getPassword() {
+ return mPassword;
+ }
+
int saveToStorage() {
- Keystore ks = Keystore.getInstance();
- for (int i = 0, count = mItemList.size(); i < count; i++) {
- byte[] blob = mItemList.get(i);
- int ret = ks.put(mNamespaceList.get(i), mName, new String(blob));
- if (ret < 0) return ret;
+ if (isPkcs12Keystore()) {
+ return CertTool.getInstance().addPkcs12Keystore(
+ mItemList.get(0), mPassword, mName);
+ } else {
+ Keystore ks = Keystore.getInstance();
+ for (int i = 0, count = mItemList.size(); i < count; i++) {
+ byte[] blob = mItemList.get(i);
+ int ret = ks.put(mNamespaceList.get(i), mName,
+ new String(blob));
+ if (ret < 0) return ret;
+ }
}
return 0;
}