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

Last change on this file since c14b8d2 was 288126d, checked in by Jose Ruiz <joseruiz@…>, 11 years ago

Manejo de repositorio de certificados y firma con pkcs7

  • Property mode set to 100644
File size: 3.8 KB
Line 
1package ve.gob.cenditel.tibisaymovil;
2
3import java.security.cert.X509Certificate;
4import java.util.ArrayList;
5import java.util.Collections;
6import java.util.List;
7
8import android.content.Context;
9import android.os.AsyncTask;
10import android.view.LayoutInflater;
11import android.view.View;
12import android.view.ViewGroup;
13import android.widget.BaseAdapter;
14import android.widget.CheckBox;
15import android.widget.ListView;
16import android.widget.TextView;
17
18
19
20public class DirectCertificateAdapter extends BaseAdapter {
21
22    private final List<String> aliases;
23    private final List<String> subjects = new ArrayList<String>();
24    private DirectKeyChain keyChain;
25        private Context context;
26
27    public DirectCertificateAdapter(DirectKeyChain keyChain, Context context)
28    throws KeystoreException {
29        this.context=context;
30        this.aliases = Collections.list(keyChain.getAliases());
31        this.subjects.addAll(Collections.nCopies(this.aliases.size(), (String) null));
32        this.keyChain = keyChain;
33    }
34
35    @Override public int getCount() {
36
37        return this.aliases.size();
38    }
39
40    @Override public String getItem(int adapterPosition) {
41
42        return this.aliases.get(adapterPosition);
43    }
44
45    @Override public long getItemId(int adapterPosition) {
46
47        return adapterPosition;
48    }
49
50    @Override public View getView(final int position, View convertView, ViewGroup parent) {
51
52        if (convertView == null) {
53            LayoutInflater inflater = LayoutInflater.from(this.context);
54            convertView = inflater.inflate(R.layout.cert_item, parent, false);
55        }
56
57        TextView aliasTextView = (TextView) convertView.findViewById(R.id.cert_item_alias);
58        TextView subjectTextView = (TextView) convertView.findViewById(R.id.cert_item_subject);
59        CheckBox checkBox = (CheckBox) convertView.findViewById(R.id.cert_item_selected);
60
61        String alias = this.aliases.get(position);
62        convertView.setTag(alias);
63        aliasTextView.setText(alias);
64
65        String subject = this.subjects.get(position);
66        if (subject == null) {
67            new CertLoader(position, subjectTextView, this.keyChain).execute();
68        } else {
69            subjectTextView.setText(subject);
70        }
71
72       
73       
74        ListView lv = (ListView)parent;
75        /*
76        //Old monochoice code.
77        int listViewCheckedItemPosition = lv.getCheckedItemPosition();
78        int adapterCheckedItemPosition = listViewCheckedItemPosition;
79        checkBox.setChecked(position == adapterCheckedItemPosition);
80        */
81        checkBox.setChecked(lv.getCheckedItemPositions().get(position));
82       
83        return convertView;
84    }
85
86    private class CertLoader extends AsyncTask<Void, Void, String> {
87
88        private final int adapterPosition;
89        private final TextView subjectView;
90        private DirectKeyChain keyChain;
91
92        private CertLoader(int adapterPosition, TextView subjectView, DirectKeyChain keyChain) {
93
94            this.adapterPosition = adapterPosition;
95            this.subjectView = subjectView;
96            this.keyChain = keyChain;
97        }
98
99        @Override protected String doInBackground(Void... params) {
100
101            String alias = DirectCertificateAdapter.this.aliases.get(this.adapterPosition);
102            X509Certificate cert;
103            try {
104                cert = this.keyChain.getCertificateChain(alias)[0];
105                // bouncycastle can handle the emailAddress OID of 1.2.840.113549.1.9.1
106                return cert.getSubjectDN().getName();
107            } catch (KeystoreException e) {
108                return "";
109            }
110        }
111
112        @Override protected void onPostExecute(String subjectString) {
113
114            DirectCertificateAdapter.this.subjects.set(this.adapterPosition, subjectString);
115            this.subjectView.setText(subjectString);
116        }
117    }
118}
Note: See TracBrowser for help on using the repository browser.