diff options
author | Selim Gurun <sgurun@google.com> | 2013-12-27 18:05:26 -0800 |
---|---|---|
committer | Selim Gurun <sgurun@google.com> | 2013-12-27 18:17:24 -0800 |
commit | f64facc2f949d44a70bbb5897293accf9c146369 (patch) | |
tree | b337a2cc089e853330550848c6ef851b891c452f /src/com/android/settings/TrustedCredentialsSettings.java | |
parent | 2d8e25af35d163bbfaa0bbed4bf9429bdf4a6b2a (diff) | |
download | packages_apps_Settings-f64facc2f949d44a70bbb5897293accf9c146369.tar.gz packages_apps_Settings-f64facc2f949d44a70bbb5897293accf9c146369.tar.bz2 packages_apps_Settings-f64facc2f949d44a70bbb5897293accf9c146369.zip |
Display certificate chain
Bug: 5012010
Change-Id: Id1b4753b28ab3460662ea41feea277777e655780
Diffstat (limited to 'src/com/android/settings/TrustedCredentialsSettings.java')
-rw-r--r-- | src/com/android/settings/TrustedCredentialsSettings.java | 63 |
1 files changed, 61 insertions, 2 deletions
diff --git a/src/com/android/settings/TrustedCredentialsSettings.java b/src/com/android/settings/TrustedCredentialsSettings.java index cdb96cbbc..65d09348c 100644 --- a/src/com/android/settings/TrustedCredentialsSettings.java +++ b/src/com/android/settings/TrustedCredentialsSettings.java @@ -35,15 +35,20 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; +import android.widget.AdapterView.OnItemSelectedListener; +import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.FrameLayout; +import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ProgressBar; +import android.widget.Spinner; import android.widget.TabHost; import android.widget.TextView; import java.security.cert.CertificateEncodingException; +import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.Collections; @@ -360,10 +365,42 @@ public class TrustedCredentialsSettings extends Fragment { } private void showCertDialog(final CertHolder certHolder) { - View view = certHolder.mSslCert.inflateCertificateView(getActivity()); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(com.android.internal.R.string.ssl_certificate); - builder.setView(view); + + final ArrayList<View> views = new ArrayList<View>(); + final ArrayList<String> titles = new ArrayList<String>(); + addCertChain(certHolder, views, titles); + + ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getActivity(), + android.R.layout.simple_spinner_item, + titles); + arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + Spinner spinner = new Spinner(getActivity()); + spinner.setAdapter(arrayAdapter); + spinner.setOnItemSelectedListener(new OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView<?> parent, View view, int position, + long id) { + for(int i = 0; i < views.size(); i++) { + views.get(i).setVisibility(i == position ? View.VISIBLE : View.GONE); + } + } + @Override + public void onNothingSelected(AdapterView<?> parent) { } + }); + + LinearLayout container = new LinearLayout(getActivity()); + container.setOrientation(LinearLayout.VERTICAL); + container.addView(spinner); + for (int i = 0; i < views.size(); ++i) { + View certificateView = views.get(i); + if (i != 0) { + certificateView.setVisibility(View.GONE); + } + container.addView(certificateView); + } + builder.setView(container); builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { dialog.dismiss(); @@ -371,6 +408,7 @@ public class TrustedCredentialsSettings extends Fragment { }); final Dialog certDialog = builder.create(); + View view = views.get(0); ViewGroup body = (ViewGroup) view.findViewById(com.android.internal.R.id.body); LayoutInflater inflater = LayoutInflater.from(getActivity()); Button removeButton = (Button) inflater.inflate(R.layout.trusted_credential_details, @@ -409,6 +447,27 @@ public class TrustedCredentialsSettings extends Fragment { certDialog.show(); } + private void addCertChain(final CertHolder certHolder, final ArrayList<View> views, + final ArrayList<String> titles) { + + List<X509Certificate> certificates = null; + try { + certificates = mStore.getCertificateChain(certHolder.mX509Cert); + } catch (CertificateException ex) { + return; + } + for (X509Certificate certificate : certificates) { + addCertDetails(certificate, views, titles); + } + } + + private void addCertDetails(X509Certificate certificate, final ArrayList<View> views, + final ArrayList<String> titles) { + SslCertificate sslCert = new SslCertificate(certificate); + views.add(sslCert.inflateCertificateView(getActivity())); + titles.add(sslCert.getIssuedTo().getCName()); + } + @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_PIN_CHALLENGE) { |