1 package net.sf.openrocket.android.filebrowser;
\r
4 import java.io.FileFilter;
\r
5 import java.text.Collator;
\r
6 import java.util.ArrayList;
\r
7 import java.util.Arrays;
\r
8 import java.util.Comparator;
\r
9 import java.util.List;
\r
11 import net.sf.openrocket.R;
\r
12 import net.sf.openrocket.android.actionbarcompat.ActionBarListActivity;
\r
13 import android.app.AlertDialog;
\r
14 import android.content.DialogInterface;
\r
15 import android.content.Intent;
\r
16 import android.net.Uri;
\r
17 import android.os.Bundle;
\r
18 import android.os.Environment;
\r
19 import android.view.View;
\r
20 import android.widget.ArrayAdapter;
\r
21 import android.widget.ListView;
\r
23 public class SimpleFileBrowser extends ActionBarListActivity {
\r
25 private List<String> item = null;
\r
26 private List<String> path = null;
\r
27 private String root = "/";
\r
29 private static final OrkFileFilter filter = new OrkFileFilter();
\r
30 private static final Collator sorter = Collator.getInstance();
\r
32 sorter.setStrength(Collator.TERTIARY);
\r
33 sorter.setDecomposition(Collator.CANONICAL_DECOMPOSITION);
\r
36 /** Called when the activity is first created. */
\r
38 public void onCreate(Bundle savedInstanceState) {
\r
39 super.onCreate(savedInstanceState);
\r
40 setContentView(R.layout.simplefilebrowser);
\r
41 getDir( Environment.getExternalStorageDirectory().getAbsolutePath() );
\r
44 private static class OrkFileFilter implements FileFilter {
\r
47 * @see java.io.FileFilter#accept(java.io.File)
\r
50 public boolean accept(File arg0) {
\r
51 if ( arg0.isDirectory() ) {
\r
54 if ( arg0.getName().endsWith(".ork") ) {
\r
62 private static class FileComparator implements Comparator<File> {
\r
65 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
\r
68 public int compare(File arg0, File arg1) {
\r
69 // Directories come before files, otherwise alpha.
\r
70 if ( arg0.isDirectory() ) {
\r
71 if ( ! arg1.isDirectory() ) {
\r
74 return sorter.compare(arg0.getName(), arg1.getName());
\r
77 // arg0 is not a directory.
\r
78 if ( arg1.isDirectory() ) {
\r
82 return sorter.compare(arg0.getName(), arg1.getName());
\r
87 private void getDir(String dirPath) {
\r
89 item = new ArrayList<String>();
\r
90 path = new ArrayList<String>();
\r
92 File f = new File(dirPath);
\r
93 File[] files = f.listFiles(filter);
\r
95 if (!dirPath.equals(root)) {
\r
99 path.add(f.getParent());
\r
102 Arrays.sort(files, new FileComparator() );
\r
103 for (int i = 0; i < files.length; i++) {
\r
104 File file = files[i];
\r
105 path.add(file.getPath());
\r
106 if (file.isDirectory())
\r
107 item.add(file.getName() + "/");
\r
109 item.add(file.getName());
\r
112 ArrayAdapter<String> fileList = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, item);
\r
113 setListAdapter(fileList);
\r
118 protected void onListItemClick(ListView l, View v, int position, long id) {
\r
119 final File file = new File(path.get(position));
\r
120 if (file.isDirectory()) {
\r
121 if (file.canRead())
\r
122 getDir(path.get(position));
\r
124 new AlertDialog.Builder(this).setIcon(R.drawable.or_launcher)
\r
125 .setTitle("[" + file.getName() + "] folder can't be read!")
\r
126 .setPositiveButton("OK",
\r
127 new DialogInterface.OnClickListener() {
\r
129 public void onClick(DialogInterface dialog, int which) {
\r
130 // TODO Auto-generated method stub
\r
137 Intent resultData = new Intent(Intent.ACTION_VIEW);
\r
138 resultData.setData( Uri.fromFile(file) );
\r
139 setResult(RESULT_OK,resultData);
\r