summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/TrustedCredentialsSettings.java
diff options
context:
space:
mode:
authorSelim Gurun <sgurun@google.com>2013-12-27 18:05:26 -0800
committerSelim Gurun <sgurun@google.com>2013-12-27 18:17:24 -0800
commitf64facc2f949d44a70bbb5897293accf9c146369 (patch)
treeb337a2cc089e853330550848c6ef851b891c452f /src/com/android/settings/TrustedCredentialsSettings.java
parent2d8e25af35d163bbfaa0bbed4bf9429bdf4a6b2a (diff)
downloadpackages_apps_Settings-f64facc2f949d44a70bbb5897293accf9c146369.zip
packages_apps_Settings-f64facc2f949d44a70bbb5897293accf9c146369.tar.gz
packages_apps_Settings-f64facc2f949d44a70bbb5897293accf9c146369.tar.bz2
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.java63
1 files changed, 61 insertions, 2 deletions
diff --git a/src/com/android/settings/TrustedCredentialsSettings.java b/src/com/android/settings/TrustedCredentialsSettings.java
index cdb96cb..65d0934 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) {