comparison src/net/bgreco/DirectoryPicker.java @ 0:46783e4c83e2

Initial commit
author Brad Greco
date Sat, 04 Jun 2011 18:03:37 -0400
parents
children adceb82e0818
comparison
equal deleted inserted replaced
-1:000000000000 0:46783e4c83e2
1 package net.bgreco;
2
3 import java.io.File;
4 import java.util.ArrayList;
5 import java.util.Collections;
6
7 import android.app.ListActivity;
8 import android.content.Context;
9 import android.content.Intent;
10 import android.os.Bundle;
11 import android.os.Environment;
12 import android.view.View;
13 import android.widget.AdapterView;
14 import android.widget.AdapterView.OnItemClickListener;
15 import android.widget.ArrayAdapter;
16 import android.widget.Button;
17 import android.widget.ListView;
18 import android.widget.Toast;
19
20 public class DirectoryPicker extends ListActivity {
21
22 public static final String START_DIR = "startDir";
23 public static final String ONLY_DIRS = "onlyDirs";
24 public static final String SHOW_HIDDEN = "showHidden";
25 public static final String CHOSEN_DIRECTORY = "chosenDir";
26 public static final int PICK_DIRECTORY = 43522432;
27 private File dir;
28
29 @Override
30 public void onCreate(Bundle savedInstanceState) {
31 super.onCreate(savedInstanceState);
32 Bundle extras = getIntent().getExtras();
33 dir = Environment.getExternalStorageDirectory();
34 String preferredStartDir = extras.getString(START_DIR);
35 final boolean showHidden = extras.getBoolean(SHOW_HIDDEN, false);
36 final boolean onlyDirs = extras.getBoolean(ONLY_DIRS, true);
37 if(preferredStartDir != null) {
38 File startDir = new File(preferredStartDir);
39 if(startDir.isDirectory()) {
40 dir = startDir;
41 }
42 }
43
44 setContentView(R.layout.chooser_list);
45 setTitle(dir.getAbsolutePath());
46 Button btnChoose = (Button) findViewById(R.id.btnChoose);
47 String name = dir.getName();
48 if(name.length() == 0)
49 name = "/";
50 btnChoose.setText("Choose " + "'" + name + "'");
51 btnChoose.setOnClickListener(new View.OnClickListener() {
52 public void onClick(View v) {
53 returnDir(dir.getAbsolutePath());
54 }
55 });
56
57 ListView lv = getListView();
58 lv.setTextFilterEnabled(true);
59
60 if(!dir.canRead()) {
61 Context context = getApplicationContext();
62 String msg = "Could not read folder contents.";
63 Toast toast = Toast.makeText(context, msg, Toast.LENGTH_LONG);
64 toast.show();
65 return;
66 }
67
68 final ArrayList<File> files = filter(dir.listFiles(), onlyDirs, showHidden);
69 String[] names = names(files);
70 setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, names));
71
72
73 lv.setOnItemClickListener(new OnItemClickListener() {
74 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
75 if(!files.get(position).isDirectory())
76 return;
77 String path = files.get(position).getAbsolutePath();
78 Intent intent = new Intent(DirectoryPicker.this, DirectoryPicker.class);
79 intent.putExtra(DirectoryPicker.START_DIR, path);
80 intent.putExtra(DirectoryPicker.SHOW_HIDDEN, showHidden);
81 intent.putExtra(DirectoryPicker.ONLY_DIRS, onlyDirs);
82 startActivityForResult(intent, PICK_DIRECTORY);
83 }
84 });
85 }
86
87 @Override
88 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
89 if(requestCode == PICK_DIRECTORY && resultCode == RESULT_OK) {
90 Bundle extras = data.getExtras();
91 String path = (String) extras.get(DirectoryPicker.CHOSEN_DIRECTORY);
92 returnDir(path);
93 }
94 }
95
96 private void returnDir(String path) {
97 Intent result = new Intent();
98 result.putExtra(CHOSEN_DIRECTORY, path);
99 setResult(RESULT_OK, result);
100 finish();
101 }
102
103 public ArrayList<File> filter(File[] file_list, boolean onlyDirs, boolean showHidden) {
104 ArrayList<File> files = new ArrayList<File>();
105 for(File file: file_list) {
106 if(onlyDirs && !file.isDirectory())
107 continue;
108 if(!showHidden && file.isHidden())
109 continue;
110 files.add(file);
111 }
112 Collections.sort(files);
113 return files;
114 }
115
116 public String[] names(ArrayList<File> files) {
117 String[] names = new String[files.size()];
118 int i = 0;
119 for(File file: files) {
120 names[i] = file.getName();
121 i++;
122 }
123 return names;
124 }
125 }
126