Mercurial > directorypicker
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 |