Added simple file browser functionality used when there are no applications installed...
authorkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Fri, 13 Jan 2012 21:02:12 +0000 (21:02 +0000)
committerkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Fri, 13 Jan 2012 21:02:12 +0000 (21:02 +0000)
git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@349 180e2498-e6e9-4542-8430-84ac67f01cd8

android/AndroidManifest.xml
android/res/layout/simplefilebrowser.xml [new file with mode: 0644]
android/src/net/sf/openrocket/android/Main.java
android/src/net/sf/openrocket/android/filebrowser/SimpleFileBrowser.java [new file with mode: 0644]

index 2fa501acdfc1679c4f1b46202d9500274d69d4a9..6ae3d51fdcb93e1f3a2561f049f99e62b1a9a0c5 100644 (file)
@@ -77,6 +77,7 @@
             android:label="@string/MotorListTitle" />\r
         <activity android:name=".android.simulation.SimulationViewer" />\r
         <activity android:name=".android.simulation.GraphicalActivity" />\r
-    </application>\r
+        <activity android:name=".android.filebrowser.SimpleFileBrowser" />\r
+        </application>\r
 \r
 </manifest>
\ No newline at end of file
diff --git a/android/res/layout/simplefilebrowser.xml b/android/res/layout/simplefilebrowser.xml
new file mode 100644 (file)
index 0000000..3d89e59
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+    android:layout_width="fill_parent"\r
+    android:layout_height="fill_parent"\r
+    android:orientation="vertical" >\r
+\r
+    <TextView\r
+        android:id="@+id/path"\r
+        android:layout_width="fill_parent"\r
+        android:layout_height="wrap_content" />\r
+\r
+    <ListView\r
+        android:id="@android:id/list"\r
+        android:layout_width="fill_parent"\r
+        android:layout_height="wrap_content" />\r
+\r
+    <TextView\r
+        android:id="@android:id/empty"\r
+        android:layout_width="fill_parent"\r
+        android:layout_height="wrap_content"\r
+        android:text="No Data" />\r
+\r
+</LinearLayout>
\ No newline at end of file
index bd80c9fd050cc0fe921e87732b2ad79fa53501c2..cdb7366a000a7772c4c01e85f913c304a90ae4e0 100644 (file)
@@ -1,13 +1,14 @@
 package net.sf.openrocket.android;\r
 \r
 import net.sf.openrocket.R;\r
+import net.sf.openrocket.android.filebrowser.SimpleFileBrowser;\r
 import net.sf.openrocket.android.motor.MotorHierarchicalBrowser;\r
 import android.app.Activity;\r
+import android.content.ActivityNotFoundException;\r
 import android.content.Intent;\r
 import android.net.Uri;\r
 import android.os.Bundle;\r
 import android.view.View;\r
-import android.view.Window;\r
 \r
 public class Main extends Activity {\r
 \r
@@ -39,9 +40,15 @@ public class Main extends Activity {
        }\r
 \r
        public void pickOrkFiles( View v ) {\r
-               Intent intent = new Intent(Intent.ACTION_GET_CONTENT);\r
-               intent.setType("file/*");\r
-               startActivityForResult(intent,PICK_ORK_FILE_RESULT);\r
+               try {\r
+                       Intent intent = new Intent(Intent.ACTION_GET_CONTENT);\r
+                       intent.setType("file/*");\r
+                       startActivityForResult(intent,PICK_ORK_FILE_RESULT);\r
+               } catch ( ActivityNotFoundException ex ) { \r
+                       // No activity for ACTION_GET_CONTENT  use internal file browser\r
+                       Intent intent = new Intent(Main.this, SimpleFileBrowser.class);\r
+                       startActivityForResult(intent,PICK_ORK_FILE_RESULT);\r
+               }\r
        }\r
 \r
        public void browseMotors( View v ) {\r
diff --git a/android/src/net/sf/openrocket/android/filebrowser/SimpleFileBrowser.java b/android/src/net/sf/openrocket/android/filebrowser/SimpleFileBrowser.java
new file mode 100644 (file)
index 0000000..853f488
--- /dev/null
@@ -0,0 +1,146 @@
+package net.sf.openrocket.android.filebrowser;\r
+\r
+import java.io.File;\r
+import java.io.FileFilter;\r
+import java.text.Collator;\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.Comparator;\r
+import java.util.List;\r
+\r
+import net.sf.openrocket.R;\r
+import android.app.AlertDialog;\r
+import android.app.ListActivity;\r
+import android.content.DialogInterface;\r
+import android.content.Intent;\r
+import android.net.Uri;\r
+import android.os.Bundle;\r
+import android.os.Environment;\r
+import android.view.View;\r
+import android.widget.ArrayAdapter;\r
+import android.widget.ListView;\r
+import android.widget.TextView;\r
+\r
+public class SimpleFileBrowser extends ListActivity {\r
+\r
+       private List<String> item = null;\r
+       private List<String> path = null;\r
+       private String root = "/";\r
+       private TextView myPath;\r
+\r
+       private static final OrkFileFilter filter = new OrkFileFilter();\r
+       private static final Collator sorter = Collator.getInstance();\r
+       static {\r
+               sorter.setStrength(Collator.TERTIARY);\r
+               sorter.setDecomposition(Collator.CANONICAL_DECOMPOSITION);\r
+       }\r
+\r
+       /** Called when the activity is first created. */\r
+       @Override\r
+       public void onCreate(Bundle savedInstanceState) {\r
+               super.onCreate(savedInstanceState);\r
+               setContentView(R.layout.simplefilebrowser);\r
+               myPath = (TextView) findViewById(R.id.path);\r
+               getDir( Environment.getExternalStorageDirectory().getAbsolutePath() );\r
+       }\r
+\r
+       private static class OrkFileFilter implements FileFilter {\r
+\r
+               /* (non-Javadoc)\r
+                * @see java.io.FileFilter#accept(java.io.File)\r
+                */\r
+               @Override\r
+               public boolean accept(File arg0) {\r
+                       if ( arg0.isDirectory() ) { \r
+                               return true;\r
+                       }\r
+                       if ( arg0.getName().endsWith(".ork") ) {\r
+                               return true;\r
+                       }\r
+                       return false;\r
+               }\r
+\r
+       }\r
+\r
+       private static class FileComparator implements Comparator<File> {\r
+\r
+               /* (non-Javadoc)\r
+                * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)\r
+                */\r
+               @Override\r
+               public int compare(File arg0, File arg1) {\r
+                       // Directories come before files, otherwise alpha.\r
+                       if ( arg0.isDirectory() ) {\r
+                               if ( ! arg1.isDirectory() ) {\r
+                                       return -1;\r
+                               }\r
+                               return sorter.compare(arg0.getName(), arg1.getName());\r
+                       }\r
+\r
+                       // arg0 is not a directory.\r
+                       if ( arg1.isDirectory() ) {\r
+                               return 1;\r
+                       }\r
+\r
+                       return sorter.compare(arg0.getName(), arg1.getName());\r
+               }\r
+\r
+       }\r
+\r
+       private void getDir(String dirPath) {\r
+               myPath.setText("Location: " + dirPath);\r
+               item = new ArrayList<String>();\r
+               path = new ArrayList<String>();\r
+\r
+               File f = new File(dirPath);\r
+               File[] files = f.listFiles(filter);\r
+\r
+               if (!dirPath.equals(root)) {\r
+                       item.add(root);\r
+                       path.add(root);\r
+                       item.add("../");\r
+                       path.add(f.getParent());\r
+               }\r
+\r
+               Arrays.sort(files, new FileComparator() );\r
+               for (int i = 0; i < files.length; i++) {\r
+                       File file = files[i];\r
+                       path.add(file.getPath());\r
+                       if (file.isDirectory())\r
+                               item.add(file.getName() + "/");\r
+                       else\r
+                               item.add(file.getName());\r
+               }\r
+\r
+               ArrayAdapter<String> fileList = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, item);\r
+               setListAdapter(fileList);\r
+\r
+       }\r
+\r
+       @Override\r
+       protected void onListItemClick(ListView l, View v, int position, long id) {\r
+               final File file = new File(path.get(position));\r
+               if (file.isDirectory()) {\r
+                       if (file.canRead())\r
+                               getDir(path.get(position));\r
+                       else {\r
+                               new AlertDialog.Builder(this).setIcon(R.drawable.or_launcher)\r
+                               .setTitle("[" + file.getName() + "] folder can't be read!")\r
+                               .setPositiveButton("OK",\r
+                                               new DialogInterface.OnClickListener() {\r
+                                       @Override\r
+                                       public void onClick(DialogInterface dialog, int which) {\r
+                                               // TODO Auto-generated method stub\r
+                                       }\r
+                               }).show();\r
+                       }\r
+               }\r
+               else\r
+               {\r
+                       Intent resultData = new Intent(Intent.ACTION_VIEW);\r
+                       resultData.setData( Uri.fromFile(file) );\r
+                       setResult(RESULT_OK,resultData);\r
+                       finish();\r
+               }\r
+       }\r
+}\r