source: dispositivos_moviles/TibisayMovil/src/ve/gob/cenditel/tibisaymovil/FileToVerifySignatureActivity.java

Last change on this file was 58c7f6a, checked in by Antonio Araujo Brett <aaraujo@…>, 10 years ago

Modificaciones en archivos fuentes para la versión 1.1 que mejora el aspecto gráfico de la aplicación.

  • Property mode set to 100644
File size: 17.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
21
22package ve.gob.cenditel.tibisaymovil;
23
24import java.io.File;
25import java.text.SimpleDateFormat;
26import java.util.ArrayList;
27import java.util.Collections;
28import java.util.Date;
29
30import ve.gob.cenditel.tibisaymovil.R;
31import android.app.Activity;
32import android.app.AlertDialog;
33import android.content.DialogInterface;
34import android.content.Intent;
35import android.graphics.drawable.Drawable;
36import android.net.Uri;
37import android.os.Bundle;
38import android.util.Log;
39import android.view.LayoutInflater;
40import android.view.View;
41import android.view.ViewGroup;
42import android.view.View.OnClickListener;
43import android.view.Window;
44import android.webkit.MimeTypeMap;
45import android.widget.AdapterView;
46import android.widget.ArrayAdapter;
47import android.widget.BaseAdapter;
48import android.widget.ImageView;
49import android.widget.LinearLayout;
50import android.widget.ListView;
51import android.widget.RadioButton;
52import android.widget.TextView;
53import android.widget.AdapterView.OnItemClickListener;
54import android.widget.Toast;
55
56public class FileToVerifySignatureActivity extends Activity implements OnItemClickListener, OnClickListener {
57
58        private File cwd;
59    private File selected;
60    private FileBrowserView viewHolder;
61    private FileListAdapter listAdapter;
62    private String filterMImeType = "application/pdf";
63   
64
65        @Override
66        protected void onCreate(Bundle savedInstanceState) {
67                //Estilando la barra de titulo
68                final boolean customTitleSupported = requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
69
70                super.onCreate(savedInstanceState);
71               
72                this.viewHolder = new FileBrowserView();       
73
74        if (savedInstanceState != null) {
75                if(savedInstanceState.getString("selected") != null)
76                        this.selected = new File(savedInstanceState.getString("selected"));
77
78            if (this.selected != null) {
79               
80                FileToVerifySignatureActivity.this.updateButton
81                (FileToVerifySignatureActivity.this.viewHolder.accept,true);
82
83            }
84           
85            this.cwd = new File(savedInstanceState.getString("cwd"));
86            this.viewHolder.fileList.setAdapter(this.listAdapter = new FileListAdapter(this.cwd.getAbsolutePath(), filterMImeType));
87           
88        } else {
89            this.selected = null;
90            this.viewHolder.fileList.setAdapter(this.listAdapter = new FileListAdapter());
91        }
92       
93       
94        boolean enabled = false;
95        if (this.selected != null)
96                enabled = this.viewHolder.accept.isEnabled();
97       
98        FileToVerifySignatureActivity.this.updateButton
99        (FileToVerifySignatureActivity.this.viewHolder.accept,enabled);
100       
101        //Estilando Barra de titulo
102                if(customTitleSupported)
103                        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar);
104        }
105
106       
107    /**
108     * Provides the data to be shown in the file browser ListView.
109     *
110     * @author José M. Prieto (jmprieto@emergya.com)
111     */
112    private class FileListAdapter extends BaseAdapter {
113
114        private final ArrayList<File> directories;
115        private final ArrayList<File> files;
116
117        private FileListAdapter() {
118            this("/",filterMImeType);
119        }
120
121        private FileListAdapter(String location) {
122            this(location, "");
123        }
124       
125        private FileListAdapter(String location, String filterMimeType) {
126               
127            directories = new ArrayList<File>();
128            files = new ArrayList<File>();
129           
130            //Obtiene etiqueta que se colocará antes del path que visualizará el usuario
131                String toPathText = FileToVerifySignatureActivity.this.getString(R.string.pathstring)+":   ";
132                //Coloca el texto de la etiqueta en la vista
133                FileToVerifySignatureActivity.this.viewHolder.pathString.setText(toPathText);
134                //Coloca el texto con el path actual
135                FileToVerifySignatureActivity.this.viewHolder.path.setText(location);
136                //Crea un objeto file cwd con la ubicacion dada en location
137            FileToVerifySignatureActivity.this.cwd = new File(location);
138            //Obtiene el directorio padre del objeto file cwd
139            File parent = FileToVerifySignatureActivity.this.cwd.getParentFile();
140            //Si tiene un padre, lo agrega en la posición cero de la lista de directorios 
141           
142            if (parent != null) {
143                directories.add(0, parent);
144            }
145           
146            //Crea un arreglo con las lista de archivos contenidos en el directorio cwd
147            File[] ls = FileToVerifySignatureActivity.this.cwd.listFiles();
148            if (ls != null) {
149                for (File f : ls) { //recorre todos los archivos contenidos en el directorio
150                       
151                    if (FsUtils.isHiddenOrNotReadable(f)) { // Si son ocultos no hace nada
152                        continue;
153                    }
154                  // Si son directorios los agrega a la lista de directorios a partir de la posición 1
155                  // En la posición 0 se encuentra el directorio padre 
156                    if (f.isDirectory()) {
157                        directories.add(f);
158                    } else // De lo contrario lo agrega a la lista de archivos
159                        {
160                        //Valida tipo de archivo a mostrar
161                        Uri selectedUri = Uri.fromFile(f);
162                        String fileExtension = MimeTypeMap.getFileExtensionFromUrl(selectedUri.toString());
163                        String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension);
164                         
165//                          Toast.makeText(FileToVerifySignatureActivity.this,
166//                          "FileExtension: " + fileExtension + "\n" +
167//                          "MimeType: " + mimeType,
168//                          Toast.LENGTH_LONG).show();
169                       
170                                                 
171                        //Filtra por mimeType: se consideran los pdf y los bdoc
172                        if(filterMimeType.isEmpty() || filterMimeType == mimeType || fileExtension.equals("bdoc"))                       
173                            files.add(f);
174                               
175                    }
176                }
177            }
178
179            Collections.sort(directories); // Ordena los directorios alfabeticamente
180            Collections.sort(files); // Ordena los archivos alfabeticamente
181        }
182       
183        /**
184         * Retorna cantidad total de elementos que se listarán en el directorio.
185         */
186        @Override 
187        public int getCount() {
188               
189            return directories.size() + files.size();
190           
191        }
192
193        /**
194         * Dada una posición en el listado del directorio, retorna un archivo o directorio
195         * según corresponda.
196         */
197        @Override
198        public File getItem(int position) {
199
200            if (position < directories.size()) {
201                return directories.get(position);
202            } else {
203                return files.get(position - directories.size());
204            }
205        }
206
207        /**
208         * Retorna un código hash para el archivo, permite comparar si dos archivos son los mismos
209         */
210        @Override
211        public long getItemId(int position) {
212
213            return getItem(position).hashCode();
214        }
215       
216        /**
217         * Crea la visualización de cada item del fileBrowser
218         */
219        @Override
220        public View getView(int position, View convertView, ViewGroup parent) {
221
222                //Crea la vista de cada fila del filebrowser a partir del layout
223            if (convertView == null) {
224                LayoutInflater inflater = LayoutInflater.from(FileToVerifySignatureActivity.this);
225                convertView = inflater.inflate(R.layout.file_to_verify_bdoc_signature_item, parent, false); 
226            }
227           
228            // Se enlaza a cada componente del layout
229            ImageView image = (ImageView) convertView.findViewById(R.id.type_image);
230            TextView fileName = (TextView) convertView.findViewById(R.id.filename_text);
231            TextView modified = (TextView) convertView.findViewById(R.id.filename_modified);
232           
233            // Se obtiene el archivo ubicado en position
234                File file = getItem(position);
235               
236                //RadioButton
237            RadioButton radio = (RadioButton) convertView.findViewById(R.id.file_radio);
238            radio.setFocusable(false);
239           
240            // Se asignan los iconos según el tipo de archivo y se oculta el radio en los directorios
241            if (file.isDirectory()) {
242                image.setImageResource(R.drawable.ic_carpeta_verde);
243                radio.setVisibility(View.INVISIBLE);
244                radio.setChecked(false);
245            } else {
246                image.setImageResource(R.drawable.ic_archivo_verde);
247                radio.setVisibility(View.VISIBLE);
248               
249                if (FileToVerifySignatureActivity.this.selected == null ||
250                        FileToVerifySignatureActivity.this.selected.hashCode() != file.hashCode()){
251                                radio.setChecked(false);
252                } else{
253                        radio.setChecked(true);
254                }         
255            }
256
257            // Si es el directorio que hace referencia al padre le coloca como nombre ".."
258            if (file.isDirectory() && position == 0 && ! "/".equals(FileToVerifySignatureActivity.this.cwd.getAbsolutePath())) {
259                fileName.setText("..");
260            } else {
261                fileName.setText(file.getName());
262            }
263 
264           
265            //Datos de modificación del archivo
266            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
267            Date date = new Date(file.lastModified());
268           
269            String dateString = FileToVerifySignatureActivity.this.getString(R.string.modified)+": ";
270            if (file.lastModified()>0)
271                modified.setText(dateString+sdf.format(date));
272            else
273                modified.setText(dateString+"-");
274           
275            return convertView;
276        }
277       
278        /**
279         * Controla la selección de cada item del fileBrowser
280         */
281        public void select(ListView parent, int position) {
282
283            File item = getItem(position);
284            //Si es un directorio el seleccionado se hace un llamado del fileBrowser del directorio
285            if (item.isDirectory()) {
286                parent.setAdapter(FileToVerifySignatureActivity.this.listAdapter = new FileListAdapter(item.getAbsolutePath(), filterMImeType));
287            } else { // Si es un archivo
288               
289                        //Se agrega el archivo a la lista de seleccionados si no se encuentra en la misma               
290                if (FileToVerifySignatureActivity.this.selected == null || 
291                        FileToVerifySignatureActivity.this.selected.hashCode() != item.hashCode()){
292                       
293                        FileToVerifySignatureActivity.this.selected = item;
294                       
295                        FileToVerifySignatureActivity.this.updateButton(FileToVerifySignatureActivity.this.viewHolder.accept,true);             
296                                               
297                }
298                else{ // De lo contrario se elimina de la lista de seleccionados
299                       
300                        FileToVerifySignatureActivity.this.selected = null;                             
301                        FileToVerifySignatureActivity.this.updateButton(FileToVerifySignatureActivity.this.viewHolder.accept,false);
302                                       
303                }
304                notifyDataSetChanged();
305           }
306        }       
307    }   
308
309
310   
311   
312    @Override
313    protected void onSaveInstanceState(Bundle outState) {
314        super.onSaveInstanceState(outState);
315
316        outState.putParcelable("intent", this.getIntent());
317        outState.putString("cwd", this.cwd.getAbsolutePath());
318        if(this.selected != null)
319                outState.putString("selected", this.selected.getAbsolutePath());
320       
321        }
322   
323    private void updateButton(View v, boolean bool) {
324        try{
325
326                v.setEnabled(bool);
327                if (v instanceof TextView){
328                        Drawable icon = ((TextView)v).getCompoundDrawables()[1];
329                        if (icon!=null)
330                        if (bool)
331                                icon.setAlpha(255);
332                        else
333                                icon.setAlpha(127);     
334                }
335                if (v instanceof ImageView){
336                        ImageView result = (ImageView) v;
337                        if (bool)
338                                result.setAlpha(255);
339                        else
340                                result.setAlpha(127);   
341                }
342       
343        }catch(NullPointerException e){}
344                       
345        }
346   
347    private void updateButton(LinearLayout layout, boolean bool) {
348        try{
349        layout.setEnabled(bool);
350        for (int i=0; i<layout.getChildCount();i++){
351                this.updateButton(layout.getChildAt(i), bool);
352        }
353        }catch(NullPointerException e){}
354                       
355        }
356
357       
358       
359        /**
360     * Holds references to view objects.
361     *
362     * @author José M. Prieto (jmprieto@emergya.com)
363     */
364    private class FileBrowserView {
365
366        public ListView fileList;
367        public TextView path;
368        public LinearLayout accept;
369                public LinearLayout clear;
370        public TextView pathString;
371
372        public FileBrowserView() {
373
374            setContentView(R.layout.activity_file_to_verify_bdoc);
375            this.path = (TextView) findViewById(R.id.path);
376            this.pathString = (TextView) findViewById(R.id.pathstring);
377
378            this.fileList = (ListView) findViewById(R.id.file_list);
379            this.fileList.setOnItemClickListener(FileToVerifySignatureActivity.this);
380            this.fileList.setItemsCanFocus(true);
381         
382           
383            this.clear = (LinearLayout) findViewById(R.id.button_clear_zone);
384            this.clear.setOnClickListener(FileToVerifySignatureActivity.this);
385           
386            this.accept = (LinearLayout) findViewById(R.id.button_accept_zone);
387            this.accept.setOnClickListener(FileToVerifySignatureActivity.this);
388
389        }
390    }
391   
392        @Override
393    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
394       
395       
396        if (parent.getId() == R.id.file_list) { // user selects a file
397            this.listAdapter.select((ListView) parent, position);
398           
399        } else { // user de-selects a file
400            //this.listAdapter.addIfSameDirectory(selectedAdapter.doUnselect((ListView) parent, position));
401               
402        }
403        //this.viewHolder.numSelected.setText(Integer.toString(this.selected.size()));
404    }
405
406    @Override
407    public void onClick(View v) {
408
409        switch (v.getId()) {
410
411       
412        case R.id.button_clear_zone:
413               
414                this.selected = null;
415                this.listAdapter.notifyDataSetChanged();
416
417                //this.viewHolder.numSelected.setText(""+this.selected.size());
418            this.updateButton(this.viewHolder.accept, false);
419                break;         
420       
421
422       
423            case R.id.button_accept_zone:
424               
425                        //Crear dialogo de opciones para firmar
426                        //final AlertDialog image_dialog = selectImageOptionsDialog();
427                        //image_dialog.show();
428           
429                        Log.d("DEBUG***",  FileToVerifySignatureActivity.this.selected.getAbsolutePath());
430                       
431                        // lanzar activity para mostrar resultados de verificacion
432                        Intent intent = new Intent(this, BDOCVerifyResultActivity.class);
433                        intent.putExtra("fileToVerify", FileToVerifySignatureActivity.this.selected.getAbsolutePath());
434                       
435                        File f = new File(FileToVerifySignatureActivity.this.selected.getAbsolutePath());
436                        Uri selectedUri = Uri.fromFile(f);
437            String fileExtension = MimeTypeMap.getFileExtensionFromUrl(selectedUri.toString());
438            intent.putExtra("fileExtension", fileExtension);
439                        startActivity(intent);
440                                               
441                break;         
442       
443        }
444    }
445   
446       
447        //Crea dialogo de opciones para seleccion de imagen de firma
448        public AlertDialog selectImageOptionsDialog() {
449                final String[] option = new String[] {getString(R.string.firmar_man_capt_img), getString(R.string.firmar_man_exist_img), getString(R.string.firmar_man_prefer_img) };
450                ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
451                        android.R.layout.select_dialog_item, option);
452                AlertDialog.Builder builder = new AlertDialog.Builder(this);
453               
454                builder.setTitle(getString(R.string.seleccione_opcion_firmar_man_img));
455                builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
456               
457                  public void onClick(DialogInterface dialog, int which) {
458                         
459                          switch (which) {
460                        case 0: // Capturar imágen
461                                Intent intent = new Intent(FileToVerifySignatureActivity.this, CaptureImgHandwrittenSignatureActivity.class);
462                    intent.putExtra("FILE_TO_SIGN", FileToVerifySignatureActivity.this.selected.getAbsolutePath());
463                    Log.i("DEBUG",  FileToVerifySignatureActivity.this.selected.getAbsolutePath());
464                    startActivity(intent);
465                               
466                                break;
467                        case 1: // Buscar en archivos
468                               
469                                break;
470                        case 2: // Usar predeterminada
471                               
472                                break;
473
474                        default:
475                                break;
476                        }
477                  }
478                 
479                });     
480               
481                return builder.create();
482        }
483}
484
Note: See TracBrowser for help on using the repository browser.