aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2014-04-15 11:45:35 +0200
committerSamuel Tardieu <sam@rfc1149.net>2014-04-15 11:45:35 +0200
commit918732d2d010fc417f4305084e3924e7060e295d (patch)
treecfc8b2adf66fb5ca679da952a0252fa9f2cfca35 /main/src
parentb4853116e776bc22b9138b13e2fd4a0d60aba063 (diff)
downloadcgeo-918732d2d010fc417f4305084e3924e7060e295d.zip
cgeo-918732d2d010fc417f4305084e3924e7060e295d.tar.gz
cgeo-918732d2d010fc417f4305084e3924e7060e295d.tar.bz2
fix #3755: crash when user enters invalid coordinates
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java85
1 files changed, 45 insertions, 40 deletions
diff --git a/main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java b/main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java
index cb52319..2c470e9 100644
--- a/main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java
+++ b/main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java
@@ -249,7 +249,9 @@ public class CoordinatesInputDialog extends NoTitleDialog {
default:
break;
}
- calc(true);
+
+ // This will serve as a reminder to the user that the current coordinates might not be valid
+ areCurrentCoordinatesValid(true);
}
}
@@ -325,49 +327,52 @@ public class CoordinatesInputDialog extends NoTitleDialog {
}
- private boolean calc(final boolean signalError) {
+ private boolean areCurrentCoordinatesValid(final boolean signalError) {
try {
+ Geopoint current = null;
if (currentFormat == CoordInputFormatEnum.Plain) {
- gp = new Geopoint(eLat.getText().toString(), eLon.getText().toString());
- return true;
+ current = new Geopoint(eLat.getText().toString(), eLon.getText().toString());
+ } else {
+ final String latDir = bLat.getText().toString();
+ final String lonDir = bLon.getText().toString();
+ final String latDeg = eLatDeg.getText().toString();
+ final String lonDeg = eLonDeg.getText().toString();
+ final String latDegFrac = eLatMin.getText().toString();
+ final String lonDegFrac = eLonMin.getText().toString();
+ final String latMin = eLatMin.getText().toString();
+ final String lonMin = eLonMin.getText().toString();
+ final String latMinFrac = eLatSec.getText().toString();
+ final String lonMinFrac = eLonSec.getText().toString();
+ final String latSec = eLatSec.getText().toString();
+ final String lonSec = eLonSec.getText().toString();
+ final String latSecFrac = eLatSub.getText().toString();
+ final String lonSecFrac = eLonSub.getText().toString();
+
+ switch (currentFormat) {
+ case Deg:
+ current = new Geopoint(latDir, latDeg, latDegFrac, lonDir, lonDeg, lonDegFrac);
+ break;
+ case Min:
+ current = new Geopoint(latDir, latDeg, latMin, latMinFrac, lonDir, lonDeg, lonMin, lonMinFrac);
+ break;
+ case Sec:
+ current = new Geopoint(latDir, latDeg, latMin, latSec, latSecFrac, lonDir, lonDeg, lonMin, lonSec, lonSecFrac);
+ break;
+ case Plain:
+ // This case has been handled above
+ }
}
-
- final String latDir = bLat.getText().toString();
- final String lonDir = bLon.getText().toString();
- final String latDeg = eLatDeg.getText().toString();
- final String lonDeg = eLonDeg.getText().toString();
- final String latDegFrac = eLatMin.getText().toString();
- final String lonDegFrac = eLonMin.getText().toString();
- final String latMin = eLatMin.getText().toString();
- final String lonMin = eLonMin.getText().toString();
- final String latMinFrac = eLatSec.getText().toString();
- final String lonMinFrac = eLonSec.getText().toString();
- final String latSec = eLatSec.getText().toString();
- final String lonSec = eLonSec.getText().toString();
- final String latSecFrac = eLatSub.getText().toString();
- final String lonSecFrac = eLonSub.getText().toString();
-
- switch (currentFormat) {
- case Deg:
- gp = new Geopoint(latDir, latDeg, latDegFrac, lonDir, lonDeg, lonDegFrac);
- break;
- case Min:
- gp = new Geopoint(latDir, latDeg, latMin, latMinFrac, lonDir, lonDeg, lonMin, lonMinFrac);
- break;
- case Sec:
- gp = new Geopoint(latDir, latDeg, latMin, latSec, latSecFrac, lonDir, lonDeg, lonMin, lonSec, lonSecFrac);
- break;
- case Plain:
- // This case has been handled above
+ if (current.isValid()) {
+ gp = current;
+ return true;
}
} catch (final Geopoint.ParseException e) {
- if (signalError) {
- context.showToast(context.getResources().getString(R.string.err_parse_lat_lon));
- }
- return false;
+ // Signaled and returned below
}
-
- return true;
+ if (signalError) {
+ context.showToast(context.getResources().getString(R.string.err_parse_lat_lon));
+ }
+ return false;
}
public int getMaxLengthFromCurrentField(final EditText editText) {
@@ -392,7 +397,7 @@ public class CoordinatesInputDialog extends NoTitleDialog {
// Start new format with an acceptable value: either the current one
// entered by the user, else our current coordinates, else (0,0).
- if (!calc(false)) {
+ if (!areCurrentCoordinatesValid(false)) {
if (geo != null && geo.getCoords() != null) {
gp = geo.getCoords();
} else {
@@ -444,7 +449,7 @@ public class CoordinatesInputDialog extends NoTitleDialog {
@Override
public void onClick(View v) {
- if (!calc(true)) {
+ if (!areCurrentCoordinatesValid(true)) {
return;
}
if (gp != null) {