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; }