aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorrsudev <rasch@munin-soft.de>2011-08-26 20:42:30 +0200
committerrsudev <rasch@munin-soft.de>2011-08-26 20:42:30 +0200
commitfa124eb50eb41d9598dcae0549178d784c650105 (patch)
tree2900d78343281e4e538cbdea35b36cf59044b5eb /src
parenta9ec39c0ce7284f1bf8189a0497d17c24aa43057 (diff)
parentf8e15b3a19db1889e81c58cc1ab25742dc801238 (diff)
downloadcgeo-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.java3
-rw-r--r--src/cgeo/geocaching/cgBase.java149
-rw-r--r--src/cgeo/geocaching/cgeocaches.java20
-rw-r--r--src/cgeo/geocaching/cgeocoords.java64
-rw-r--r--src/cgeo/geocaching/cgeodetail.java44
-rw-r--r--src/cgeo/geocaching/cgeohelpers.java47
-rw-r--r--src/cgeo/geocaching/files/GPXParser.java4
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!");
}