aboutsummaryrefslogtreecommitdiffstats
path: root/src/cgeo/geocaching/files/FileList.java
diff options
context:
space:
mode:
authorSammysHP <sven@sammyshp.de>2011-09-14 21:42:32 +0200
committerSammysHP <sven@sammyshp.de>2011-09-14 21:42:32 +0200
commit4f7c67407019de18fd53b640edb9682a346fbfef (patch)
tree5a1d10843e8f5104e4202211f4792b5bfe830cb6 /src/cgeo/geocaching/files/FileList.java
parent90e7bf968f6722b8df8b884f37617e7fc78901b5 (diff)
downloadcgeo-4f7c67407019de18fd53b640edb9682a346fbfef.zip
cgeo-4f7c67407019de18fd53b640edb9682a346fbfef.tar.gz
cgeo-4f7c67407019de18fd53b640edb9682a346fbfef.tar.bz2
Formatting
Diffstat (limited to 'src/cgeo/geocaching/files/FileList.java')
-rw-r--r--src/cgeo/geocaching/files/FileList.java456
1 files changed, 229 insertions, 227 deletions
diff --git a/src/cgeo/geocaching/files/FileList.java b/src/cgeo/geocaching/files/FileList.java
index 08c8b11..fb0c698 100644
--- a/src/cgeo/geocaching/files/FileList.java
+++ b/src/cgeo/geocaching/files/FileList.java
@@ -1,8 +1,8 @@
package cgeo.geocaching.files;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
+import cgeo.geocaching.R;
+import cgeo.geocaching.cgSettings;
+import cgeo.geocaching.activity.AbstractListActivity;
import org.apache.commons.lang3.ArrayUtils;
@@ -14,231 +14,233 @@ import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.ArrayAdapter;
-import cgeo.geocaching.R;
-import cgeo.geocaching.cgSettings;
-import cgeo.geocaching.activity.AbstractListActivity;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
public abstract class FileList<T extends ArrayAdapter<File>> extends AbstractListActivity {
- private List<File> files = new ArrayList<File>();
- private T adapter = null;
- private ProgressDialog waitDialog = null;
- private loadFiles searchingThread = null;
- private boolean endSearching = false;
- private int listId = 1;
- final private Handler changeWaitDialogHandler = new Handler() {
-
- @Override
- public void handleMessage(Message msg) {
- if (msg.obj != null && waitDialog != null) {
- waitDialog.setMessage(res.getString(R.string.file_searching_in) + " " + (String) msg.obj);
- }
- }
- };
- final private Handler loadFilesHandler = new Handler() {
-
- @Override
- public void handleMessage(Message msg) {
- try {
- if (files == null || files.isEmpty()) {
- if (waitDialog != null) {
- waitDialog.dismiss();
- }
-
- showToast(res.getString(R.string.file_list_no_files));
-
- finish();
- return;
- } else {
- if (adapter != null) {
- adapter.notifyDataSetChanged();
- }
- }
-
- if (waitDialog != null) {
- waitDialog.dismiss();
- }
- } catch (Exception e) {
- if (waitDialog != null) {
- waitDialog.dismiss();
- }
- Log.e(cgSettings.tag, "cgFileList.loadFilesHandler: " + e.toString());
- }
- }
- };
- private String[] extensions;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- setTheme();
- setContentView(R.layout.gpx);
- setTitle();
-
- Bundle extras = getIntent().getExtras();
- if (extras != null) {
- listId = extras.getInt("list");
- }
- if (listId <= 0) {
- listId = 1;
- }
-
- setAdapter();
-
- waitDialog = ProgressDialog.show(
- this,
- res.getString(R.string.file_title_searching),
- res.getString(R.string.file_searching),
- true,
- true,
- new DialogInterface.OnCancelListener() {
- public void onCancel(DialogInterface arg0) {
- if (searchingThread != null && searchingThread.isAlive()) {
- searchingThread.notifyEnd();
- }
- if (files.isEmpty()) {
- finish();
- }
- }
- }
- );
-
- endSearching = false;
- searchingThread = new loadFiles();
- searchingThread.start();
- }
-
- @Override
- public void onResume() {
- super.onResume();
-
- getSettings().load();
- }
-
- protected abstract T getAdapter(List<File> files);
-
- private void setAdapter() {
- if (adapter == null) {
- adapter = getAdapter(files);
- setListAdapter(adapter);
- }
- }
-
- /**
- * Gets the base folder for file searches
- * @return The folder to start the recursive search in
- */
- protected abstract String[] getBaseFolders();
-
- /**
- * Triggers the deriving class to set the title
- */
- protected abstract void setTitle();
-
- private class loadFiles extends Thread {
- public void notifyEnd() {
- endSearching = true;
- }
-
- @Override
- public void run() {
- List<File> list = new ArrayList<File>();
-
- try {
- if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
- boolean loaded = false;
- for(String baseFolder : getBaseFolders())
- {
- final File dir = new File(baseFolder);
-
- if (dir.exists() && dir.isDirectory()) {
- listDir(list, dir);
- if (list.size() > 0) {
- loaded = true;
- break;
- }
- }
- }
- if (!loaded) {
- listDir(list, Environment.getExternalStorageDirectory());
- }
- } else {
- Log.w(cgSettings.tag, "No external media mounted.");
- }
- } catch (Exception e) {
- Log.e(cgSettings.tag, "cgFileList.loadFiles.run: " + e.toString());
- }
-
- final Message msg = new Message();
- msg.obj = "loaded directories";
- changeWaitDialogHandler.sendMessage(msg);
-
- files.addAll(list);
- list.clear();
-
- loadFilesHandler.sendMessage(new Message());
- }
- }
-
- private void listDir(List<File> result, File directory) {
- if (directory == null || !directory.isDirectory() || !directory.canRead()) {
- return;
- }
-
- final File[] files = directory.listFiles();
-
- if (ArrayUtils.isNotEmpty(files)) {
- for (File file : files) {
- if (endSearching) {
- return;
- }
- if (!file.canRead()) {
- continue;
- }
- String name = file.getName();
- if (file.isFile()) {
- for (String ext : extensions) {
- int extLength = ext.length();
- if (name.length() > extLength && name.substring(name.length() - extLength, name.length()).equalsIgnoreCase(ext)) {
- result.add(file); // add file to list
- break;
- }
- }
-
- } else if (file.isDirectory()) {
- if (name.charAt(0) == '.') {
- continue; // skip hidden directories
- }
- if (name.length() > 16) {
- name = name.substring(0, 14) + "...";
- }
- final Message msg = new Message();
- msg.obj = name;
- changeWaitDialogHandler.sendMessage(msg);
-
- listDir(result, file); // go deeper
- }
- }
- }
-
- return;
- }
-
- protected FileList(final String extension) {
- setExtensions(new String[] {extension});
- }
-
- protected FileList(final String[] extensions) {
- setExtensions(extensions);
- }
-
- private void setExtensions(String[] extensionsIn) {
- for (String extension : extensionsIn) {
- if (extension.length() == 0 || extension.charAt(0) != '.') {
- extension = "." + extension;
- }
- }
- extensions = extensionsIn;
- }
+ private List<File> files = new ArrayList<File>();
+ private T adapter = null;
+ private ProgressDialog waitDialog = null;
+ private loadFiles searchingThread = null;
+ private boolean endSearching = false;
+ private int listId = 1;
+ final private Handler changeWaitDialogHandler = new Handler() {
+
+ @Override
+ public void handleMessage(Message msg) {
+ if (msg.obj != null && waitDialog != null) {
+ waitDialog.setMessage(res.getString(R.string.file_searching_in) + " " + (String) msg.obj);
+ }
+ }
+ };
+ final private Handler loadFilesHandler = new Handler() {
+
+ @Override
+ public void handleMessage(Message msg) {
+ try {
+ if (files == null || files.isEmpty()) {
+ if (waitDialog != null) {
+ waitDialog.dismiss();
+ }
+
+ showToast(res.getString(R.string.file_list_no_files));
+
+ finish();
+ return;
+ } else {
+ if (adapter != null) {
+ adapter.notifyDataSetChanged();
+ }
+ }
+
+ if (waitDialog != null) {
+ waitDialog.dismiss();
+ }
+ } catch (Exception e) {
+ if (waitDialog != null) {
+ waitDialog.dismiss();
+ }
+ Log.e(cgSettings.tag, "cgFileList.loadFilesHandler: " + e.toString());
+ }
+ }
+ };
+ private String[] extensions;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setTheme();
+ setContentView(R.layout.gpx);
+ setTitle();
+
+ Bundle extras = getIntent().getExtras();
+ if (extras != null) {
+ listId = extras.getInt("list");
+ }
+ if (listId <= 0) {
+ listId = 1;
+ }
+
+ setAdapter();
+
+ waitDialog = ProgressDialog.show(
+ this,
+ res.getString(R.string.file_title_searching),
+ res.getString(R.string.file_searching),
+ true,
+ true,
+ new DialogInterface.OnCancelListener() {
+ public void onCancel(DialogInterface arg0) {
+ if (searchingThread != null && searchingThread.isAlive()) {
+ searchingThread.notifyEnd();
+ }
+ if (files.isEmpty()) {
+ finish();
+ }
+ }
+ }
+ );
+
+ endSearching = false;
+ searchingThread = new loadFiles();
+ searchingThread.start();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ getSettings().load();
+ }
+
+ protected abstract T getAdapter(List<File> files);
+
+ private void setAdapter() {
+ if (adapter == null) {
+ adapter = getAdapter(files);
+ setListAdapter(adapter);
+ }
+ }
+
+ /**
+ * Gets the base folder for file searches
+ *
+ * @return The folder to start the recursive search in
+ */
+ protected abstract String[] getBaseFolders();
+
+ /**
+ * Triggers the deriving class to set the title
+ */
+ protected abstract void setTitle();
+
+ private class loadFiles extends Thread {
+ public void notifyEnd() {
+ endSearching = true;
+ }
+
+ @Override
+ public void run() {
+ List<File> list = new ArrayList<File>();
+
+ try {
+ if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
+ boolean loaded = false;
+ for (String baseFolder : getBaseFolders())
+ {
+ final File dir = new File(baseFolder);
+
+ if (dir.exists() && dir.isDirectory()) {
+ listDir(list, dir);
+ if (list.size() > 0) {
+ loaded = true;
+ break;
+ }
+ }
+ }
+ if (!loaded) {
+ listDir(list, Environment.getExternalStorageDirectory());
+ }
+ } else {
+ Log.w(cgSettings.tag, "No external media mounted.");
+ }
+ } catch (Exception e) {
+ Log.e(cgSettings.tag, "cgFileList.loadFiles.run: " + e.toString());
+ }
+
+ final Message msg = new Message();
+ msg.obj = "loaded directories";
+ changeWaitDialogHandler.sendMessage(msg);
+
+ files.addAll(list);
+ list.clear();
+
+ loadFilesHandler.sendMessage(new Message());
+ }
+ }
+
+ private void listDir(List<File> result, File directory) {
+ if (directory == null || !directory.isDirectory() || !directory.canRead()) {
+ return;
+ }
+
+ final File[] files = directory.listFiles();
+
+ if (ArrayUtils.isNotEmpty(files)) {
+ for (File file : files) {
+ if (endSearching) {
+ return;
+ }
+ if (!file.canRead()) {
+ continue;
+ }
+ String name = file.getName();
+ if (file.isFile()) {
+ for (String ext : extensions) {
+ int extLength = ext.length();
+ if (name.length() > extLength && name.substring(name.length() - extLength, name.length()).equalsIgnoreCase(ext)) {
+ result.add(file); // add file to list
+ break;
+ }
+ }
+
+ } else if (file.isDirectory()) {
+ if (name.charAt(0) == '.') {
+ continue; // skip hidden directories
+ }
+ if (name.length() > 16) {
+ name = name.substring(0, 14) + "...";
+ }
+ final Message msg = new Message();
+ msg.obj = name;
+ changeWaitDialogHandler.sendMessage(msg);
+
+ listDir(result, file); // go deeper
+ }
+ }
+ }
+
+ return;
+ }
+
+ protected FileList(final String extension) {
+ setExtensions(new String[] { extension });
+ }
+
+ protected FileList(final String[] extensions) {
+ setExtensions(extensions);
+ }
+
+ private void setExtensions(String[] extensionsIn) {
+ for (String extension : extensionsIn) {
+ if (extension.length() == 0 || extension.charAt(0) != '.') {
+ extension = "." + extension;
+ }
+ }
+ extensions = extensionsIn;
+ }
}