diff options
Diffstat (limited to 'main/src')
| -rw-r--r-- | main/src/cgeo/geocaching/cgeoimages.java | 33 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/files/FileList.java | 20 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/files/GPXParser.java | 8 |
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); + } } }); |
