# HG changeset patch
# User Brad Greco
# Date 1307225017 14400
# Node ID 46783e4c83e252d695da783b97f27197b4e97d29
Initial commit
diff -r 000000000000 -r 46783e4c83e2 .classpath
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.classpath Sat Jun 04 18:03:37 2011 -0400
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff -r 000000000000 -r 46783e4c83e2 .project
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.project Sat Jun 04 18:03:37 2011 -0400
@@ -0,0 +1,33 @@
+
+
+ DirectoryPicker
+
+
+
+
+
+ com.android.ide.eclipse.adt.ResourceManagerBuilder
+
+
+
+
+ com.android.ide.eclipse.adt.PreCompilerBuilder
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ com.android.ide.eclipse.adt.ApkBuilder
+
+
+
+
+
+ com.android.ide.eclipse.adt.AndroidNature
+ org.eclipse.jdt.core.javanature
+
+
diff -r 000000000000 -r 46783e4c83e2 AndroidManifest.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/AndroidManifest.xml Sat Jun 04 18:03:37 2011 -0400
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r 000000000000 -r 46783e4c83e2 default.properties
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/default.properties Sat Jun 04 18:03:37 2011 -0400
@@ -0,0 +1,12 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system use,
+# "build.properties", and override values to adapt the script to your
+# project structure.
+
+# Project target.
+target=android-4
+android.library=true
diff -r 000000000000 -r 46783e4c83e2 proguard.cfg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/proguard.cfg Sat Jun 04 18:03:37 2011 -0400
@@ -0,0 +1,36 @@
+-optimizationpasses 5
+-dontusemixedcaseclassnames
+-dontskipnonpubliclibraryclasses
+-dontpreverify
+-verbose
+-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
+
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class com.android.vending.licensing.ILicensingService
+
+-keepclasseswithmembernames class * {
+ native ;
+}
+
+-keepclasseswithmembernames class * {
+ public (android.content.Context, android.util.AttributeSet);
+}
+
+-keepclasseswithmembernames class * {
+ public (android.content.Context, android.util.AttributeSet, int);
+}
+
+-keepclassmembers enum * {
+ public static **[] values();
+ public static ** valueOf(java.lang.String);
+}
+
+-keep class * implements android.os.Parcelable {
+ public static final android.os.Parcelable$Creator *;
+}
diff -r 000000000000 -r 46783e4c83e2 res/drawable/icon.png
Binary file res/drawable/icon.png has changed
diff -r 000000000000 -r 46783e4c83e2 res/layout/chooser_list.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/res/layout/chooser_list.xml Sat Jun 04 18:03:37 2011 -0400
@@ -0,0 +1,16 @@
+
+
+
+
+
+
diff -r 000000000000 -r 46783e4c83e2 res/layout/list_item.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/res/layout/list_item.xml Sat Jun 04 18:03:37 2011 -0400
@@ -0,0 +1,7 @@
+
+
+
\ No newline at end of file
diff -r 000000000000 -r 46783e4c83e2 res/values/strings.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/res/values/strings.xml Sat Jun 04 18:03:37 2011 -0400
@@ -0,0 +1,4 @@
+
+
+
+
diff -r 000000000000 -r 46783e4c83e2 src/net/bgreco/DirectoryPicker.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/bgreco/DirectoryPicker.java Sat Jun 04 18:03:37 2011 -0400
@@ -0,0 +1,126 @@
+package net.bgreco;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+
+import android.app.ListActivity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Environment;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.ListView;
+import android.widget.Toast;
+
+public class DirectoryPicker extends ListActivity {
+
+ public static final String START_DIR = "startDir";
+ public static final String ONLY_DIRS = "onlyDirs";
+ public static final String SHOW_HIDDEN = "showHidden";
+ public static final String CHOSEN_DIRECTORY = "chosenDir";
+ public static final int PICK_DIRECTORY = 43522432;
+ private File dir;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ Bundle extras = getIntent().getExtras();
+ dir = Environment.getExternalStorageDirectory();
+ String preferredStartDir = extras.getString(START_DIR);
+ final boolean showHidden = extras.getBoolean(SHOW_HIDDEN, false);
+ final boolean onlyDirs = extras.getBoolean(ONLY_DIRS, true);
+ if(preferredStartDir != null) {
+ File startDir = new File(preferredStartDir);
+ if(startDir.isDirectory()) {
+ dir = startDir;
+ }
+ }
+
+ setContentView(R.layout.chooser_list);
+ setTitle(dir.getAbsolutePath());
+ Button btnChoose = (Button) findViewById(R.id.btnChoose);
+ String name = dir.getName();
+ if(name.length() == 0)
+ name = "/";
+ btnChoose.setText("Choose " + "'" + name + "'");
+ btnChoose.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ returnDir(dir.getAbsolutePath());
+ }
+ });
+
+ ListView lv = getListView();
+ lv.setTextFilterEnabled(true);
+
+ if(!dir.canRead()) {
+ Context context = getApplicationContext();
+ String msg = "Could not read folder contents.";
+ Toast toast = Toast.makeText(context, msg, Toast.LENGTH_LONG);
+ toast.show();
+ return;
+ }
+
+ final ArrayList files = filter(dir.listFiles(), onlyDirs, showHidden);
+ String[] names = names(files);
+ setListAdapter(new ArrayAdapter(this, R.layout.list_item, names));
+
+
+ lv.setOnItemClickListener(new OnItemClickListener() {
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ if(!files.get(position).isDirectory())
+ return;
+ String path = files.get(position).getAbsolutePath();
+ Intent intent = new Intent(DirectoryPicker.this, DirectoryPicker.class);
+ intent.putExtra(DirectoryPicker.START_DIR, path);
+ intent.putExtra(DirectoryPicker.SHOW_HIDDEN, showHidden);
+ intent.putExtra(DirectoryPicker.ONLY_DIRS, onlyDirs);
+ startActivityForResult(intent, PICK_DIRECTORY);
+ }
+ });
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if(requestCode == PICK_DIRECTORY && resultCode == RESULT_OK) {
+ Bundle extras = data.getExtras();
+ String path = (String) extras.get(DirectoryPicker.CHOSEN_DIRECTORY);
+ returnDir(path);
+ }
+ }
+
+ private void returnDir(String path) {
+ Intent result = new Intent();
+ result.putExtra(CHOSEN_DIRECTORY, path);
+ setResult(RESULT_OK, result);
+ finish();
+ }
+
+ public ArrayList filter(File[] file_list, boolean onlyDirs, boolean showHidden) {
+ ArrayList files = new ArrayList();
+ for(File file: file_list) {
+ if(onlyDirs && !file.isDirectory())
+ continue;
+ if(!showHidden && file.isHidden())
+ continue;
+ files.add(file);
+ }
+ Collections.sort(files);
+ return files;
+ }
+
+ public String[] names(ArrayList files) {
+ String[] names = new String[files.size()];
+ int i = 0;
+ for(File file: files) {
+ names[i] = file.getName();
+ i++;
+ }
+ return names;
+ }
+}
+