Many style and navigation changes. Pulled in ActionBarCompat from Android sample...
[debian/openrocket] / android / src / net / sf / openrocket / android / filebrowser / SimpleFileBrowser.java
1 package net.sf.openrocket.android.filebrowser;\r
2 \r
3 import java.io.File;\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
10 \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
22 \r
23 public class SimpleFileBrowser extends ActionBarListActivity {\r
24 \r
25         private List<String> item = null;\r
26         private List<String> path = null;\r
27         private String root = "/";\r
28 \r
29         private static final OrkFileFilter filter = new OrkFileFilter();\r
30         private static final Collator sorter = Collator.getInstance();\r
31         static {\r
32                 sorter.setStrength(Collator.TERTIARY);\r
33                 sorter.setDecomposition(Collator.CANONICAL_DECOMPOSITION);\r
34         }\r
35 \r
36         /** Called when the activity is first created. */\r
37         @Override\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
42         }\r
43 \r
44         private static class OrkFileFilter implements FileFilter {\r
45 \r
46                 /* (non-Javadoc)\r
47                  * @see java.io.FileFilter#accept(java.io.File)\r
48                  */\r
49                 @Override\r
50                 public boolean accept(File arg0) {\r
51                         if ( arg0.isDirectory() ) { \r
52                                 return true;\r
53                         }\r
54                         if ( arg0.getName().endsWith(".ork") ) {\r
55                                 return true;\r
56                         }\r
57                         return false;\r
58                 }\r
59 \r
60         }\r
61 \r
62         private static class FileComparator implements Comparator<File> {\r
63 \r
64                 /* (non-Javadoc)\r
65                  * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)\r
66                  */\r
67                 @Override\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
72                                         return -1;\r
73                                 }\r
74                                 return sorter.compare(arg0.getName(), arg1.getName());\r
75                         }\r
76 \r
77                         // arg0 is not a directory.\r
78                         if ( arg1.isDirectory() ) {\r
79                                 return 1;\r
80                         }\r
81 \r
82                         return sorter.compare(arg0.getName(), arg1.getName());\r
83                 }\r
84 \r
85         }\r
86 \r
87         private void getDir(String dirPath) {\r
88                 setTitle(dirPath);\r
89                 item = new ArrayList<String>();\r
90                 path = new ArrayList<String>();\r
91 \r
92                 File f = new File(dirPath);\r
93                 File[] files = f.listFiles(filter);\r
94 \r
95                 if (!dirPath.equals(root)) {\r
96                         item.add(root);\r
97                         path.add(root);\r
98                         item.add("../");\r
99                         path.add(f.getParent());\r
100                 }\r
101 \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
108                         else\r
109                                 item.add(file.getName());\r
110                 }\r
111 \r
112                 ArrayAdapter<String> fileList = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, item);\r
113                 setListAdapter(fileList);\r
114 \r
115         }\r
116 \r
117         @Override\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
123                         else {\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
128                                         @Override\r
129                                         public void onClick(DialogInterface dialog, int which) {\r
130                                                 // TODO Auto-generated method stub\r
131                                         }\r
132                                 }).show();\r
133                         }\r
134                 }\r
135                 else\r
136                 {\r
137                         Intent resultData = new Intent(Intent.ACTION_VIEW);\r
138                         resultData.setData( Uri.fromFile(file) );\r
139                         setResult(RESULT_OK,resultData);\r
140                         finish();\r
141                 }\r
142         }\r
143 }\r