diff options
| author | rsudev <rasch@munin-soft.de> | 2011-08-26 20:42:30 +0200 |
|---|---|---|
| committer | rsudev <rasch@munin-soft.de> | 2011-08-26 20:42:30 +0200 |
| commit | fa124eb50eb41d9598dcae0549178d784c650105 (patch) | |
| tree | 2900d78343281e4e538cbdea35b36cf59044b5eb /src | |
| parent | a9ec39c0ce7284f1bf8189a0497d17c24aa43057 (diff) | |
| parent | f8e15b3a19db1889e81c58cc1ab25742dc801238 (diff) | |
| download | cgeo-fa124eb50eb41d9598dcae0549178d784c650105.zip cgeo-fa124eb50eb41d9598dcae0549178d784c650105.tar.gz cgeo-fa124eb50eb41d9598dcae0549178d784c650105.tar.bz2 | |
Merge branch 'master' of https://github.com/cgeo/c-geo-opensource
Diffstat (limited to 'src')
| -rw-r--r-- | src/cgeo/geocaching/activity/ActivityMixin.java | 3 | ||||
| -rw-r--r-- | src/cgeo/geocaching/cgBase.java | 149 | ||||
| -rw-r--r-- | src/cgeo/geocaching/cgeocaches.java | 20 | ||||
| -rw-r--r-- | src/cgeo/geocaching/cgeocoords.java | 64 | ||||
| -rw-r--r-- | src/cgeo/geocaching/cgeodetail.java | 44 | ||||
| -rw-r--r-- | src/cgeo/geocaching/cgeohelpers.java | 47 | ||||
| -rw-r--r-- | src/cgeo/geocaching/files/GPXParser.java | 4 |
7 files changed, 165 insertions, 166 deletions
diff --git a/src/cgeo/geocaching/activity/ActivityMixin.java b/src/cgeo/geocaching/activity/ActivityMixin.java index 68a4403..acbb405 100644 --- a/src/cgeo/geocaching/activity/ActivityMixin.java +++ b/src/cgeo/geocaching/activity/ActivityMixin.java @@ -120,6 +120,9 @@ public final class ActivityMixin { } protected static void addVisitMenu(IAbstractActivity activity, Menu menu, cgCache cache) { + if (cache == null) { + return; + } if (!cache.supportsLogging()) { return; } diff --git a/src/cgeo/geocaching/cgBase.java b/src/cgeo/geocaching/cgBase.java index e8e23ac..7f18024 100644 --- a/src/cgeo/geocaching/cgBase.java +++ b/src/cgeo/geocaching/cgBase.java @@ -23,6 +23,7 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; +import java.util.Collections; import java.util.Date; import java.util.Enumeration; import java.util.HashMap; @@ -80,19 +81,20 @@ public class cgBase { private final static Pattern patternTerrain = Pattern.compile("<span id=\"ctl00_ContentBody_Localize6\"[^>]*>[^<]*<img src=\"[^\"]*/images/stars/stars([0-9_]+)\\.gif\" alt=\"[^\"]+\"[^>]*>[^<]*</span>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); private final static Pattern patternOwner = Pattern.compile("<span class=\"minorCacheDetails\">\\W*An?(\\W*Event)?\\W*cache\\W*by[^<]*<a href=\"[^\"]+\">([^<]+)</a>[^<]*</span>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); private final static Pattern patternOwnerReal = Pattern.compile("<a id=\"ctl00_ContentBody_uxFindLinksHiddenByThisUser\" href=\"[^\"]*/seek/nearest\\.aspx\\?u=*([^\"]+)\">[^<]+</a>", Pattern.CASE_INSENSITIVE); - private final static Pattern patternHidden = Pattern.compile("<span[^>]*>\\W*Hidden[^\\d]*([^<]+)</span>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); + private final static Pattern patternHidden = Pattern.compile("<span[^>]*>\\W*Hidden[\\s:]*([^<]+)</span>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); private final static Pattern patternHiddenEvent = Pattern.compile("<span[^>]*>\\W*Event\\W*Date[^:]*:([^<]*)</span>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); private final static Pattern patternFavourite = Pattern.compile("<a id=\"uxFavContainerLink\"[^>]*>[^<]*<div[^<]*<span class=\"favorite-value\">[^\\d]*([0-9]+)[^\\d^<]*</span>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); private final static Pattern patternFound = Pattern.compile("<p>[^<]*<a id=\"ctl00_ContentBody_hlFoundItLog\"[^<]*<img src=\".*/images/stockholm/16x16/check\\.gif\"[^>]*>[^<]*</a>[^<]*</p>", Pattern.CASE_INSENSITIVE); + private final static Pattern patternFoundAlternative = Pattern.compile("<div class=\"StatusInformationWidget FavoriteWidget\"", Pattern.CASE_INSENSITIVE); private final static Pattern patternLatLon = Pattern.compile("<span id=\"ctl00_ContentBody_LatLon\"[^>]*>(<b>)?([^<]*)(<\\/b>)?<\\/span>", Pattern.CASE_INSENSITIVE); private final static Pattern patternLocation = Pattern.compile("<span id=\"ctl00_ContentBody_Location\"[^>]*>In ([^<]*)", Pattern.CASE_INSENSITIVE); private final static Pattern patternHint = Pattern.compile("<p>([^<]*<strong>)?\\W*Additional Hints([^<]*<\\/strong>)?[^\\(]*\\(<a[^>]+>Encrypt</a>\\)[^<]*<\\/p>[^<]*<div id=\"div_hint\"[^>]*>(.*)</div>[^<]*<div id=[\\'|\"]dk[\\'|\"]", Pattern.CASE_INSENSITIVE); private final static Pattern patternPersonalNote = Pattern.compile("<p id=\"cache_note\"[^>]*>([^<]*)</p>", Pattern.CASE_INSENSITIVE); private final static Pattern patternDescShort = Pattern.compile("<div class=\"UserSuppliedContent\">[^<]*<span id=\"ctl00_ContentBody_ShortDescription\"[^>]*>((?:(?!</span>[^\\w^<]*</div>).)*)</span>[^\\w^<]*</div>", Pattern.CASE_INSENSITIVE); private final static Pattern patternDesc = Pattern.compile("<span id=\"ctl00_ContentBody_LongDescription\"[^>]*>" + "(.*)</span>[^<]*</div>[^<]*<p>[^<]*</p>[^<]*<p>[^<]*<strong>\\W*Additional Hints</strong>", Pattern.CASE_INSENSITIVE); - private final static Pattern patternCountLogs = Pattern.compile("<span id=\"ctl00_ContentBody_lblFindCounts\"><p>(.*)<\\/p><\\/span>", Pattern.CASE_INSENSITIVE); - private final static Pattern patternCountLog = Pattern.compile(" src=\"\\/images\\/icons\\/([^\\.]*).gif\" alt=\"[^\"]*\" title=\"[^\"]*\" />([0-9]*)[^0-9]+", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); + private final static Pattern patternCountLogs = Pattern.compile("<span id=\"ctl00_ContentBody_lblFindCounts\"><p(.+?)<\\/p><\\/span>", Pattern.CASE_INSENSITIVE); + private final static Pattern patternCountLog = Pattern.compile("src=\"\\/images\\/icons\\/(.+?).gif\"[^>]+> (\\d+)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); //private final static Pattern patternLogs = Pattern.compile("<table class=\"LogsTable\">(.*?)</table>\\s*<p", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); private final static Pattern patternLog = Pattern.compile("<tr><td class.+?<a href=\"/profile/\\?guid=.+?>(.+?)</a>.+?(?:logOwnerStats[^>]+><img[^>]+icon_smile.+?> ([,\\d]+).+?)?LogType.+?<img.+?/images/icons/([^\\.]+)\\..+?title=\"(.+?)\".+?LogDate.+?>(.+?)<.+?LogText.+?>(.*?)</p>(.*?)</div></div></div></td></tr>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); private final static Pattern patternLogImgs = Pattern.compile("href=\"(http://img.geocaching.com/cache/log/.+?)\".+?<span>([^<]*)", Pattern.CASE_INSENSITIVE); @@ -116,9 +118,26 @@ public class cgBase { public static HashMap<Integer, String> logTypesTrackable = new HashMap<Integer, String>(); public static HashMap<Integer, String> logTypesTrackableAction = new HashMap<Integer, String>(); public static HashMap<Integer, String> errorRetrieve = new HashMap<Integer, String>(); - public final static SimpleDateFormat dateInSlash = new SimpleDateFormat("MM/dd/yyyy"); - public final static SimpleDateFormat dateInDash = new SimpleDateFormat("yyyy-MM-dd"); - public final static SimpleDateFormat dateEvIn = new SimpleDateFormat("dd MMMMM yyyy", Locale.ENGLISH); // 28 March 2009 + public static final Map<String, SimpleDateFormat> gcCustomDateFormats; + static { + final String[] formats = new String[] { + "MM/dd/yyyy", + "yyyy-MM-dd", + "yyyy/MM/dd", + "dd/MMM/yyyy", + "MMM/dd/yyyy", + "dd MMM yy" + }; + + HashMap<String, SimpleDateFormat> map = new HashMap<String, SimpleDateFormat>(); + + for (String format : formats) + { + map.put(format, new SimpleDateFormat(format, Locale.ENGLISH)); + } + + gcCustomDateFormats = Collections.unmodifiableMap(map); + } public final static SimpleDateFormat dateTbIn1 = new SimpleDateFormat("EEEEE, dd MMMMM yyyy", Locale.ENGLISH); // Saturday, 28 March 2009 public final static SimpleDateFormat dateTbIn2 = new SimpleDateFormat("EEEEE, MMMMM dd, yyyy", Locale.ENGLISH); // Saturday, March 28, 2009 public final static SimpleDateFormat dateSqlIn = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 2010-07-25 14:44:01 @@ -1244,10 +1263,10 @@ public class cgBase { final Matcher matcherHidden = patternHidden.matcher(tableInside); if (matcherHidden.find()) { if (matcherHidden.groupCount() > 0) { - cache.hidden = parseDate(matcherHidden.group(1)); + cache.hidden = parseGcCustomDate(matcherHidden.group(1)); } } - } catch (Exception e) { + } catch (ParseException e) { // failed to parse cache hidden date Log.w(cgSettings.tag, "cgeoBase.parseCache: Failed to parse cache hidden date"); } @@ -1258,10 +1277,10 @@ public class cgBase { final Matcher matcherHiddenEvent = patternHiddenEvent.matcher(tableInside); if (matcherHiddenEvent.find()) { if (matcherHiddenEvent.groupCount() > 0) { - cache.hidden = parseDate(matcherHiddenEvent.group(1)); + cache.hidden = parseGcCustomDate(matcherHiddenEvent.group(1)); } } - } catch (Exception e) { + } catch (ParseException e) { // failed to parse cache event date Log.w(cgSettings.tag, "cgeoBase.parseCache: Failed to parse cache event date"); } @@ -1295,14 +1314,17 @@ public class cgBase { } // cache found - try { - final Matcher matcherFound = patternFound.matcher(page); - if (matcherFound.find()) { - if (matcherFound.group() != null && matcherFound.group().length() > 0) { - cache.found = true; - } + try + { + final Matcher matcherFound = patternFound.matcher(page); + final Matcher matcherFoundAlternative = patternFoundAlternative.matcher(page); + + if (matcherFound.find() || matcherFoundAlternative.find()) { + cache.found = true; } - } catch (Exception e) { + } + catch (Exception e) + { // failed to parse found Log.w(cgSettings.tag, "cgeoBase.parseCache: Failed to parse found"); } @@ -1550,37 +1572,32 @@ public class cgBase { } // cache logs counts - try { + try + { final Matcher matcherLogCounts = patternCountLogs.matcher(page); - while (matcherLogCounts.find()) { - if (matcherLogCounts.groupCount() > 0) { - final String[] logs = matcherLogCounts.group(1).split("<img"); - final int logsCnt = logs.length; - - for (int k = 1; k < logsCnt; k++) { - Integer type = null; - Integer count = null; - final Matcher matcherLog = patternCountLog.matcher(logs[k]); + + if (matcherLogCounts.find()) + { + final Matcher matcherLog = patternCountLog.matcher(matcherLogCounts.group(1)); - if (matcherLog.find()) { - String typeStr = matcherLog.group(1); - String countStr = matcherLog.group(2); - if (typeStr != null && typeStr.length() > 0) { - if (logTypes.containsKey(typeStr.toLowerCase())) { - type = logTypes.get(typeStr.toLowerCase()); - } - } - if (countStr != null && countStr.length() > 0) { - count = Integer.parseInt(countStr); - } - if (type != null && count != null) { - cache.logCounts.put(type, count); - } - } + while (matcherLog.find()) + { + String typeStr = matcherLog.group(1); + String countStr = matcherLog.group(2); + + if (typeStr != null + && typeStr.length() > 0 + && logTypes.containsKey(typeStr.toLowerCase()) + && countStr != null + && countStr.length() > 0) + { + cache.logCounts.put(logTypes.get(typeStr.toLowerCase()), Integer.parseInt(countStr)); } } } - } catch (Exception e) { + } + catch (Exception e) + { // failed to parse logs Log.w(cgSettings.tag, "cgeoBase.parseCache: Failed to parse cache log count"); } @@ -1618,7 +1635,7 @@ public class cgBase { try { - logDone.date = dateInSlash.parse(matcherLog.group(5)).getTime(); + logDone.date = parseGcCustomDate(matcherLog.group(5)).getTime(); } catch (ParseException e) { @@ -1883,34 +1900,26 @@ public class cgBase { // And BTW: You cannot even see that effect in the debugger, but must use a separate memory profiler! } - private static Date parseDate(String input) { - if (input == null) { - return null; + private static Date parseGcCustomDate(String input) + throws ParseException + { + if (input == null) + { + throw new ParseException("Input is null", 0); } + input = input.trim(); - try { - Date result; - if (input.indexOf('/') > 0) { - result = dateInSlash.parse(input); - if (result != null) { - return result; - } - } - if (input.indexOf('-') > 0) { - result = dateInDash.parse(input); - if (result != null) { - return result; - } - } - result = dateEvIn.parse(input); - if (result != null) { - return result; - } - } catch (ParseException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - return null; + + for (SimpleDateFormat format : gcCustomDateFormats.values()) + { + try + { + return format.parse(input); + } + catch (ParseException e) {} + } + + throw new ParseException("No matching pattern", 0); } public cgRating getRating(String guid, String geocode) { diff --git a/src/cgeo/geocaching/cgeocaches.java b/src/cgeo/geocaching/cgeocaches.java index 214969f..e8586cc 100644 --- a/src/cgeo/geocaching/cgeocaches.java +++ b/src/cgeo/geocaching/cgeocaches.java @@ -1260,17 +1260,17 @@ public class cgeocaches extends AbstractListActivity { // https://code.google.com/p/android/issues/detail?id=7139 lastMenuInfo = info; - // create a searchId for a single cache (as if in details view) - HashMap<String, String> params = new HashMap<String, String>(); - params.put("geocode", cache.geocode); - Long singleSearchId = base.searchByGeocode(params, 0, false); - - if (NavigationAppFactory.onMenuItemSelected(item, geo, this, - res, cache, singleSearchId, null, null)) { - return true; - } - if (cache != null) { + // create a searchId for a single cache (as if in details view) + HashMap<String, String> params = new HashMap<String, String>(); + params.put("geocode", cache.geocode); + Long singleSearchId = base.searchByGeocode(params, 0, false); + + if (NavigationAppFactory.onMenuItemSelected(item, geo, this, + res, cache, singleSearchId, null, null)) { + return true; + } + int logType = id - MENU_LOG_VISIT_OFFLINE; cache.logOffline(this, logType); } diff --git a/src/cgeo/geocaching/cgeocoords.java b/src/cgeo/geocaching/cgeocoords.java index 1639c70..229b3a6 100644 --- a/src/cgeo/geocaching/cgeocoords.java +++ b/src/cgeo/geocaching/cgeocoords.java @@ -185,11 +185,11 @@ public class cgeocoords extends Dialog { if (latitude != null) { eLatDeg.setText(addZeros(latDeg, 2) + Integer.toString(latDeg)); - eLatMin.setText(Integer.toString(latDegFrac) + addZeros(latDegFrac, 5)); + eLatMin.setText(addZeros(latDegFrac, 5) + Integer.toString(latDegFrac)); } if (longitude != null) { eLonDeg.setText(addZeros(latDeg, 3) + Integer.toString(lonDeg)); - eLonMin.setText(Integer.toString(lonDegFrac) + addZeros(lonDegFrac, 5)); + eLonMin.setText(addZeros(lonDegFrac, 5) + Integer.toString(lonDegFrac)); } break; case Min: // DDD° MM.MMM @@ -243,28 +243,29 @@ public class cgeocoords extends Dialog { eLatDeg.setText(addZeros(latDeg, 2) + Integer.toString(latDeg)); eLatMin.setText(addZeros(latMin, 2) + Integer.toString(latMin)); eLatSec.setText(addZeros(latSec, 2) + Integer.toString(latSec)); - eLatSub.setText(Integer.toString(latSecFrac) + addZeros(latSecFrac, 3)); + eLatSub.setText(addZeros(latSecFrac, 3) + Integer.toString(latSecFrac)); } if (longitude != null) { eLonDeg.setText(addZeros(lonDeg, 3) + Integer.toString(lonDeg)); eLonMin.setText(addZeros(lonMin, 2) + Integer.toString(lonMin)); eLonSec.setText(addZeros(lonSec, 2) + Integer.toString(lonSec)); - eLonSub.setText(Integer.toString(lonSecFrac) + addZeros(lonSecFrac, 3)); + eLonSub.setText(addZeros(lonSecFrac, 3) + Integer.toString(lonSecFrac)); } break; } } private static String addZeros(int value, int len) { - String zeros = ""; + StringBuilder zeros = new StringBuilder(); if (value == 0) { value = 1; } - while (value < Math.pow(10, len-1)) { - zeros += "0"; + double wantedLength = Math.pow(10, len-1); + while (value < wantedLength) { + zeros.append('0'); value *= 10; } - return zeros; + return zeros.toString(); } private class buttonClickListener implements View.OnClickListener { @@ -272,8 +273,11 @@ public class cgeocoords extends Dialog { @Override public void onClick(View v) { Button e = (Button) v; - char[] c = e.getText().toString().toCharArray(); - switch (c[0]) { + CharSequence text = e.getText(); + if (text == null || text.length() == 0) { + return; + } + switch (text.charAt(0)) { case 'N': e.setText("S"); break; @@ -386,55 +390,43 @@ public class cgeocoords extends Dialog { return; } - int latDeg = 0, latMin = 0, latSec = 0, latSub = 0; - int lonDeg = 0, lonMin = 0, lonSec = 0, lonSub = 0; + int latDeg = 0, latMin = 0, latSec = 0; + int lonDeg = 0, lonMin = 0, lonSec = 0; + Double latDegFrac = 0.0, latMinFrac = 0.0, latSecFrac = 0.0; + Double lonDegFrac = 0.0, lonMinFrac = 0.0, lonSecFrac = 0.0; + try { latDeg = Integer.parseInt(eLatDeg.getText().toString()); lonDeg = Integer.parseInt(eLonDeg.getText().toString()); + latDegFrac = Double.parseDouble("0."+eLatMin.getText().toString()); + lonDegFrac = Double.parseDouble("0."+eLonMin.getText().toString()); latMin = Integer.parseInt(eLatMin.getText().toString()); lonMin = Integer.parseInt(eLonMin.getText().toString()); + latMinFrac = Double.parseDouble("0."+eLatSec.getText().toString()); + lonMinFrac = Double.parseDouble("0."+eLonSec.getText().toString()); latSec = Integer.parseInt(eLatSec.getText().toString()); lonSec = Integer.parseInt(eLonSec.getText().toString()); - latSub = Integer.parseInt(eLatSub.getText().toString()); - lonSub = Integer.parseInt(eLonSub.getText().toString()); + latSecFrac = Double.parseDouble("0."+eLatSub.getText().toString()); + lonSecFrac = Double.parseDouble("0."+eLonSub.getText().toString()); + } catch (NumberFormatException e) {} switch (currentFormat) { case Deg: - Double latDegFrac = latMin * 1.0; - while (latDegFrac > 1) { - latDegFrac /= 10; - } - Double lonDegFrac = lonMin * 1.0; - while (lonDegFrac > 1) { - lonDegFrac /= 10; - } latitude = latDeg + latDegFrac; longitude = lonDeg + lonDegFrac; break; case Min: - Double latMinFrac = latSec * 1.0; - latMinFrac /= 1000; - Double lonMinFrac = lonSec * 1.0; - lonMinFrac /= 1000; latitude = latDeg + latMin/60.0 + latMinFrac/60.0; longitude = lonDeg + lonMin/60.0 + lonMinFrac/60.0; break; case Sec: - Double latSecFrac = latSub * 1.0; - while (latSecFrac > 1) { - latSecFrac /= 10; - } - Double lonSecFrac = lonSub * 1.0; - while (lonSecFrac > 1) { - lonSecFrac /= 10; - } latitude = latDeg + latMin/60.0 + latSec/60.0/60.0 + latSecFrac/60.0/60.0; longitude = lonDeg + lonMin/60.0 + lonSec/60.0/60.0 + lonSecFrac/60.0/60.0; break; } - latitude *= (bLat.getText().toString() == "S" ? -1 : 1); - longitude *= (bLon.getText().toString() == "W" ? -1 : 1); + latitude *= (bLat.getText().toString().equalsIgnoreCase("S") ? -1 : 1); + longitude *= (bLon.getText().toString().equalsIgnoreCase("W") ? -1 : 1); } private class CoordinateFormatListener implements OnItemSelectedListener { diff --git a/src/cgeo/geocaching/cgeodetail.java b/src/cgeo/geocaching/cgeodetail.java index 7f5e7e5..d4454a2 100644 --- a/src/cgeo/geocaching/cgeodetail.java +++ b/src/cgeo/geocaching/cgeodetail.java @@ -17,6 +17,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.res.Configuration; import android.database.Cursor; +import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; @@ -175,29 +176,36 @@ public class cgeodetail extends AbstractActivity { @Override public void handleMessage(Message message) { BitmapDrawable image = (BitmapDrawable) message.obj; + if (image == null) { + return; + } ScrollView scroll = (ScrollView) findViewById(R.id.details_list_box); final ImageView view = (ImageView) findViewById(R.id.map_preview); + if (view == null) { + return; + } + Bitmap bitmap = image.getBitmap(); + if (bitmap == null || bitmap.getWidth() <= 10) { + return; + } + view.setImageDrawable(image); - if (image != null && view != null) { - view.setImageDrawable(image); - - if (scroll.getScrollY() == 0) { - scroll.scrollTo(0, (int) (80 * pixelRatio)); - } - view.setVisibility(View.VISIBLE); - view.setOnClickListener(new View.OnClickListener() { + if (scroll.getScrollY() == 0) { + scroll.scrollTo(0, (int) (80 * pixelRatio)); + } + view.setVisibility(View.VISIBLE); + view.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - try { - registerForContextMenu(view); - openContextMenu(view); - } catch (Exception e) { - // nothing - } + @Override + public void onClick(View v) { + try { + registerForContextMenu(view); + openContextMenu(view); + } catch (Exception e) { + // nothing } - }); - } + } + }); } }; diff --git a/src/cgeo/geocaching/cgeohelpers.java b/src/cgeo/geocaching/cgeohelpers.java index 056f631..85cf422 100644 --- a/src/cgeo/geocaching/cgeohelpers.java +++ b/src/cgeo/geocaching/cgeohelpers.java @@ -27,52 +27,37 @@ public class cgeohelpers extends AbstractActivity { settings.load(); } - public void installManual(View view) { - final Locale loc = Locale.getDefault(); - final String lng = loc.getLanguage(); - + private void installFromMarket(String marketId) { try { - if (lng.equalsIgnoreCase("de")) { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:gnu.android.app.cgeomanual.de"))); - } else { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:gnu.android.app.cgeomanual.en"))); - } + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:" + marketId))); } catch (Exception e) { // market not available in standard emulator } - finish(); } - public void installLocus(View view) { - try { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:menion.android.locus"))); - } catch (Exception e) { - // market not available in standard emulator - } + public void installManual(View view) { + final Locale loc = Locale.getDefault(); + final String language = loc.getLanguage(); + if ("de".equalsIgnoreCase(language)) { + installFromMarket("gnu.android.app.cgeomanual.de"); + } + else { + installFromMarket("gnu.android.app.cgeomanual.en"); + } + } - finish(); + public void installLocus(View view) { + installFromMarket("menion.android.locus"); } public void installGpsStatus(View view) { - try { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:com.eclipsim.gpsstatus2"))); - } catch (Exception e) { - // market not available in standard emulator - } - - finish(); + installFromMarket("com.eclipsim.gpsstatus2"); } public void installBluetoothGps(View view) { - try { - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:googoo.android.btgps"))); - } catch (Exception e) { - // market not available in standard emulator - } - - finish(); + installFromMarket("googoo.android.btgps"); } } diff --git a/src/cgeo/geocaching/files/GPXParser.java b/src/cgeo/geocaching/files/GPXParser.java index cc864ce..c239ca9 100644 --- a/src/cgeo/geocaching/files/GPXParser.java +++ b/src/cgeo/geocaching/files/GPXParser.java @@ -505,7 +505,9 @@ public abstract class GPXParser extends FileParser { Log.e(cgSettings.tag, "Cannot parse .gpx file " + file.getAbsolutePath() + " as GPX " + version + ": could not parse XML - " + e.toString()); } try { - fis.close(); + if (fis != null) { + fis.close(); + } } catch (IOException e) { Log.e(cgSettings.tag, "Error after parsing .gpx file " + file.getAbsolutePath() + " as GPX " + version + ": could not close file!"); } |
