aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/cgeoimages.java33
-rw-r--r--main/src/cgeo/geocaching/files/FileList.java20
-rw-r--r--main/src/cgeo/geocaching/files/GPXParser.java8
3 files changed, 41 insertions, 20 deletions
diff --git a/main/src/cgeo/geocaching/cgeoimages.java b/main/src/cgeo/geocaching/cgeoimages.java
index b2f7ad6..6de6444 100644
--- a/main/src/cgeo/geocaching/cgeoimages.java
+++ b/main/src/cgeo/geocaching/cgeoimages.java
@@ -34,7 +34,7 @@ import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
+import java.util.LinkedList;
import java.util.List;
public class cgeoimages extends AbstractActivity {
@@ -55,7 +55,11 @@ public class cgeoimages extends AbstractActivity {
private BitmapDrawable currentDrawable;
private cgImage currentImage;
- static private final Collection<Bitmap> bitmaps = Collections.synchronizedCollection(new ArrayList<Bitmap>());
+ // We could use a Set here, but we will insert no duplicates, so there is no need to check for uniqueness.
+ private final Collection<Bitmap> bitmaps = new LinkedList<Bitmap>();
+ private int message;
+ private boolean offline;
+ private ArrayList<cgImage> imageNames;
private void loadImages(final List<cgImage> images, final int progressMessage, final boolean offline) {
@@ -175,31 +179,34 @@ public class cgeoimages extends AbstractActivity {
setTitle(res.getString(img_type == SPOILER_IMAGES ? R.string.cache_spoiler_images_title : R.string.cache_log_images_title));
inflater = getLayoutInflater();
- if (imagesView == null) {
- imagesView = (LinearLayout) findViewById(R.id.spoiler_list);
- }
+ imagesView = (LinearLayout) findViewById(R.id.spoiler_list);
- final ArrayList<cgImage> images = extras.getParcelableArrayList("images");
- if (CollectionUtils.isEmpty(images)) {
+ imageNames = extras.getParcelableArrayList("images");
+ if (CollectionUtils.isEmpty(imageNames)) {
showToast(res.getString(R.string.warn_load_images));
finish();
return;
}
- final int message = img_type == SPOILER_IMAGES ? R.string.cache_spoiler_images_loading : R.string.cache_log_images_loading;
- final boolean offline = app.isOffline(geocode, null) && (img_type == SPOILER_IMAGES || Settings.isStoreLogImages());
+ message = img_type == SPOILER_IMAGES ? R.string.cache_spoiler_images_loading : R.string.cache_log_images_loading;
+ offline = app.isOffline(geocode, null) && (img_type == SPOILER_IMAGES || Settings.isStoreLogImages());
+ }
- loadImages(images, message, offline);
+ @Override
+ public void onStart() {
+ super.onStart();
+ loadImages(imageNames, message, offline);
}
@Override
- public void onDestroy() {
+ public void onStop() {
// Reclaim native memory faster than the finalizers would
- for (Bitmap b : bitmaps) {
+ imagesView.removeAllViews();
+ for (final Bitmap b : bitmaps) {
b.recycle();
}
bitmaps.clear();
- super.onDestroy();
+ super.onStop();
}
private void viewImageInStandardApp(final BitmapDrawable image) {
diff --git a/main/src/cgeo/geocaching/files/FileList.java b/main/src/cgeo/geocaching/files/FileList.java
index 431fe3b..08c1940 100644
--- a/main/src/cgeo/geocaching/files/FileList.java
+++ b/main/src/cgeo/geocaching/files/FileList.java
@@ -19,15 +19,17 @@ import android.widget.ArrayAdapter;
import java.io.File;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
public abstract class FileList<T extends ArrayAdapter<File>> extends AbstractListActivity {
private static final int MSG_SEARCH_WHOLE_SD_CARD = 1;
- private List<File> files = new ArrayList<File>();
+ private final List<File> files = new ArrayList<File>();
private T adapter = null;
private ProgressDialog waitDialog = null;
- private loadFiles searchingThread = null;
+ private SearchFilesThread searchingThread = null;
private boolean endSearching = false;
private int listId = StoredList.STANDARD_LIST_ID;
final private Handler changeWaitDialogHandler = new Handler() {
@@ -114,7 +116,7 @@ public abstract class FileList<T extends ArrayAdapter<File>> extends AbstractLis
);
endSearching = false;
- searchingThread = new loadFiles();
+ searchingThread = new SearchFilesThread();
searchingThread.start();
}
@@ -145,14 +147,14 @@ public abstract class FileList<T extends ArrayAdapter<File>> extends AbstractLis
*/
protected abstract void setTitle();
- private class loadFiles extends Thread {
+ private class SearchFilesThread extends Thread {
public void notifyEnd() {
endSearching = true;
}
@Override
public void run() {
- List<File> list = new ArrayList<File>();
+ final List<File> list = new ArrayList<File>();
try {
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
@@ -181,7 +183,13 @@ public abstract class FileList<T extends ArrayAdapter<File>> extends AbstractLis
changeWaitDialogHandler.sendMessage(Message.obtain(changeWaitDialogHandler, 0, "loaded directories"));
files.addAll(list);
- list.clear();
+ Collections.sort(files, new Comparator<File>() {
+
+ @Override
+ public int compare(File lhs, File rhs) {
+ return lhs.getName().compareToIgnoreCase(rhs.getName());
+ }
+ });
loadFilesHandler.sendMessage(Message.obtain(loadFilesHandler));
}
diff --git a/main/src/cgeo/geocaching/files/GPXParser.java b/main/src/cgeo/geocaching/files/GPXParser.java
index 76ca111..fbe1b65 100644
--- a/main/src/cgeo/geocaching/files/GPXParser.java
+++ b/main/src/cgeo/geocaching/files/GPXParser.java
@@ -51,6 +51,7 @@ public abstract class GPXParser extends FileParser {
*/
private static final Pattern patternGeocode = Pattern.compile("([A-Z][0-9A-Z]+)");
private static final Pattern patternGuid = Pattern.compile(".*" + Pattern.quote("guid=") + "([0-9a-z\\-]+)", Pattern.CASE_INSENSITIVE);
+ private static final Pattern patternUrlGeocode = Pattern.compile(".*" + Pattern.quote("wp=") + "([A-Z][0-9A-Z]+)", Pattern.CASE_INSENSITIVE);
/**
* supported groundspeak extensions of the GPX format
*/
@@ -228,7 +229,7 @@ public abstract class GPXParser extends FileParser {
static Date parseDate(String inputUntrimmed) throws ParseException {
String input = inputUntrimmed.trim();
- // remove milli seconds to reduce number of needed patterns
+ // remove milliseconds to reduce number of needed patterns
final Matcher matcher = PATTERN_MILLISECONDS.matcher(input);
input = matcher.replaceFirst("");
if (input.contains("Z")) {
@@ -422,6 +423,11 @@ public abstract class GPXParser extends FileParser {
cache.setGuid(guid);
}
}
+ final Matcher matcherCode = patternUrlGeocode.matcher(url);
+ if (matcherCode.matches()) {
+ String geocode = matcherCode.group(1);
+ cache.setGeocode(geocode);
+ }
}
});