source: dispositivos_moviles/TibisayMovil/src/ve/gob/cenditel/tibisaymovil/DirectCertificateAdapter.java @ 8379cd8

Last change on this file since 8379cd8 was 8379cd8, checked in by Antonio Araujo Brett <aaraujo@…>, 11 years ago

Agregado encabezado de licencia a archivos fuentes.

  • Property mode set to 100644
File size: 4.5 KB
Line 
1/*
2Tibisay Movil
3
4Copyright (C) 2013 Antonio Araujo (aaraujo@cenditel.gob.ve), Jose Ruiz
5(jruiz@cenditel.gob.ve), Fundacion Centro Nacional de Desarrollo e
6Investigacion en Tecnologias Libres - CENDITEL.
7
8La Fundación CENDITEL concede permiso para usar, copiar, distribuir y/o
9modificar este programa, reconociendo el derecho que la humanidad posee al
10libre acceso al conocimiento, bajo los términos de la licencia de software
11GPL versión 2.0 de la Free Software Foundation.
12
13Este programa se distribuye con la esperanza de que sea util, pero SIN
14NINGUNA GARANTIA; tampoco las implicitas garantias de MERCANTILIDAD o
15ADECUACION A UN PROPOSITO PARTICULAR.
16
17Para mayor información sobre los términos de la licencia ver el archivo
18llamado "gpl-2.0.txt" en ingles.
19*/
20
21package ve.gob.cenditel.tibisaymovil;
22
23import java.security.cert.X509Certificate;
24import java.util.ArrayList;
25import java.util.Collections;
26import java.util.List;
27
28import android.content.Context;
29import android.os.AsyncTask;
30import android.view.LayoutInflater;
31import android.view.View;
32import android.view.ViewGroup;
33import android.widget.BaseAdapter;
34import android.widget.CheckBox;
35import android.widget.ListView;
36import android.widget.TextView;
37
38
39
40public class DirectCertificateAdapter extends BaseAdapter {
41
42    private final List<String> aliases;
43    private final List<String> subjects = new ArrayList<String>();
44    private DirectKeyChain keyChain;
45        private Context context;
46
47    public DirectCertificateAdapter(DirectKeyChain keyChain, Context context)
48    throws KeystoreException {
49        this.context=context;
50        this.aliases = Collections.list(keyChain.getAliases());
51        this.subjects.addAll(Collections.nCopies(this.aliases.size(), (String) null));
52        this.keyChain = keyChain;
53    }
54
55    @Override public int getCount() {
56
57        return this.aliases.size();
58    }
59
60    @Override public String getItem(int adapterPosition) {
61
62        return this.aliases.get(adapterPosition);
63    }
64
65    @Override public long getItemId(int adapterPosition) {
66
67        return adapterPosition;
68    }
69
70    @Override public View getView(final int position, View convertView, ViewGroup parent) {
71
72        if (convertView == null) {
73            LayoutInflater inflater = LayoutInflater.from(this.context);
74            convertView = inflater.inflate(R.layout.cert_item, parent, false);
75        }
76
77        TextView aliasTextView = (TextView) convertView.findViewById(R.id.cert_item_alias);
78        TextView subjectTextView = (TextView) convertView.findViewById(R.id.cert_item_subject);
79        CheckBox checkBox = (CheckBox) convertView.findViewById(R.id.cert_item_selected);
80
81        String alias = this.aliases.get(position);
82        convertView.setTag(alias);
83        aliasTextView.setText(alias);
84
85        String subject = this.subjects.get(position);
86        if (subject == null) {
87            new CertLoader(position, subjectTextView, this.keyChain).execute();
88        } else {
89            subjectTextView.setText(subject);
90        }
91
92       
93       
94        ListView lv = (ListView)parent;
95        /*
96        //Old monochoice code.
97        int listViewCheckedItemPosition = lv.getCheckedItemPosition();
98        int adapterCheckedItemPosition = listViewCheckedItemPosition;
99        checkBox.setChecked(position == adapterCheckedItemPosition);
100        */
101        checkBox.setChecked(lv.getCheckedItemPositions().get(position));
102       
103        return convertView;
104    }
105
106    private class CertLoader extends AsyncTask<Void, Void, String> {
107
108        private final int adapterPosition;
109        private final TextView subjectView;
110        private DirectKeyChain keyChain;
111
112        private CertLoader(int adapterPosition, TextView subjectView, DirectKeyChain keyChain) {
113
114            this.adapterPosition = adapterPosition;
115            this.subjectView = subjectView;
116            this.keyChain = keyChain;
117        }
118
119        @Override protected String doInBackground(Void... params) {
120
121            String alias = DirectCertificateAdapter.this.aliases.get(this.adapterPosition);
122            X509Certificate cert;
123            try {
124                cert = this.keyChain.getCertificateChain(alias)[0];
125                // bouncycastle can handle the emailAddress OID of 1.2.840.113549.1.9.1
126                return cert.getSubjectDN().getName();
127            } catch (KeystoreException e) {
128                return "";
129            }
130        }
131
132        @Override protected void onPostExecute(String subjectString) {
133
134            DirectCertificateAdapter.this.subjects.set(this.adapterPosition, subjectString);
135            this.subjectView.setText(subjectString);
136        }
137    }
138}
Note: See TracBrowser for help on using the repository browser.