aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java')
-rw-r--r--main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java63
1 files changed, 51 insertions, 12 deletions
diff --git a/main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java b/main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java
index 9aee71a..578a15f 100644
--- a/main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java
+++ b/main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java
@@ -6,11 +6,13 @@ import cgeo.geocaching.Geocache;
import cgeo.geocaching.R;
import cgeo.geocaching.activity.AbstractActivity;
import cgeo.geocaching.activity.Keyboard;
-import cgeo.geocaching.geopoint.Geopoint;
-import cgeo.geocaching.geopoint.GeopointFormatter;
-import cgeo.geocaching.sensors.IGeoData;
+import cgeo.geocaching.location.Geopoint;
+import cgeo.geocaching.location.Geopoint.ParseException;
+import cgeo.geocaching.location.GeopointFormatter;
+import cgeo.geocaching.sensors.GeoData;
import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.settings.Settings.CoordInputFormatEnum;
+import cgeo.geocaching.utils.ClipboardUtils;
import cgeo.geocaching.utils.EditUtils;
import org.apache.commons.lang3.StringUtils;
@@ -21,6 +23,7 @@ import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.text.Editable;
import android.text.TextWatcher;
+import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -53,16 +56,14 @@ public class CoordinatesInputDialog extends DialogFragment {
private static final String CACHECOORDS_ARG = "CACHECOORDS";
- public static CoordinatesInputDialog getInstance(final Geocache cache, final Geopoint gp, final IGeoData geo) {
+ public static CoordinatesInputDialog getInstance(final Geocache cache, final Geopoint gp, final GeoData geo) {
final Bundle args = new Bundle();
if (gp != null) {
args.putParcelable(GEOPOINT_ARG, gp);
- } else if (geo != null && geo.getCoords() != null) {
- args.putParcelable(GEOPOINT_ARG, geo.getCoords());
} else {
- args.putParcelable(GEOPOINT_ARG, Geopoint.ZERO);
+ args.putParcelable(GEOPOINT_ARG, geo != null ? geo.getCoords() : Geopoint.ZERO);
}
if (geo !=null) {
@@ -173,12 +174,27 @@ public class CoordinatesInputDialog extends DialogFragment {
buttonCache.setVisibility(View.GONE);
}
+ if (hasClipboardCoordinates()) {
+ final Button buttonClipboard = ButterKnife.findById(v, R.id.clipboard);
+ buttonClipboard.setOnClickListener(new ClipboardListener());
+ buttonClipboard.setVisibility(View.VISIBLE);
+ }
+
final Button buttonDone = ButterKnife.findById(v, R.id.done);
buttonDone.setOnClickListener(new InputDoneListener());
return v;
}
+ @SuppressWarnings("unused")
+ private static boolean hasClipboardCoordinates() {
+ try {
+ new Geopoint(StringUtils.defaultString(ClipboardUtils.getText()));
+ } catch (final ParseException ignored) {
+ return false;
+ }
+ return true;
+ }
private void updateGUI() {
@@ -215,8 +231,10 @@ public class CoordinatesInputDialog extends DialogFragment {
eLatDeg.setText(addZeros(gp.getLatDeg(), 2));
eLatMin.setText(addZeros(gp.getLatDegFrac(), 5));
+ eLatMin.setGravity(Gravity.NO_GRAVITY);
eLonDeg.setText(addZeros(gp.getLonDeg(), 3));
eLonMin.setText(addZeros(gp.getLonDegFrac(), 5));
+ eLonMin.setGravity(Gravity.NO_GRAVITY);
break;
case Min: // DDD° MM.MMM
getView().findViewById(R.id.coordTable).setVisibility(View.VISIBLE);
@@ -238,9 +256,11 @@ public class CoordinatesInputDialog extends DialogFragment {
eLatDeg.setText(addZeros(gp.getLatDeg(), 2));
eLatMin.setText(addZeros(gp.getLatMin(), 2));
+ eLatMin.setGravity(Gravity.RIGHT);
eLatSec.setText(addZeros(gp.getLatMinFrac(), 3));
eLonDeg.setText(addZeros(gp.getLonDeg(), 3));
eLonMin.setText(addZeros(gp.getLonMin(), 2));
+ eLonMin.setGravity(Gravity.RIGHT);
eLonSec.setText(addZeros(gp.getLonMinFrac(), 3));
break;
case Sec: // DDD° MM SS.SSS
@@ -263,10 +283,12 @@ public class CoordinatesInputDialog extends DialogFragment {
eLatDeg.setText(addZeros(gp.getLatDeg(), 2));
eLatMin.setText(addZeros(gp.getLatMin(), 2));
+ eLatMin.setGravity(Gravity.RIGHT);
eLatSec.setText(addZeros(gp.getLatSec(), 2));
eLatSub.setText(addZeros(gp.getLatSecFrac(), 3));
eLonDeg.setText(addZeros(gp.getLonDeg(), 3));
eLonMin.setText(addZeros(gp.getLonMin(), 2));
+ eLonMin.setGravity(Gravity.RIGHT);
eLonSec.setText(addZeros(gp.getLonSec(), 2));
eLonSub.setText(addZeros(gp.getLonSecFrac(), 3));
break;
@@ -391,16 +413,18 @@ public class CoordinatesInputDialog extends DialogFragment {
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();
+ // right-pad decimal fraction
+ final String latDegFrac = padZerosRight(eLatMin.getText().toString(), 5);
+ final String lonDegFrac = padZerosRight(eLonMin.getText().toString(), 5);
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();
+ // right-pad seconds fraction
+ final String latSecFrac = padZerosRight(eLatSub.getText().toString(), 3);
+ final String lonSecFrac = padZerosRight(eLonSub.getText().toString(), 3);
switch (currentFormat) {
case Deg:
@@ -421,7 +445,7 @@ public class CoordinatesInputDialog extends DialogFragment {
gp = current;
return true;
}
- } catch (final Geopoint.ParseException e) {
+ } catch (final Geopoint.ParseException ignored) {
// Signaled and returned below
}
if (signalError) {
@@ -431,6 +455,10 @@ public class CoordinatesInputDialog extends DialogFragment {
return false;
}
+ private static String padZerosRight(final String value, final int len) {
+ return StringUtils.rightPad(value, len, '0');
+ }
+
public int getMaxLengthFromCurrentField(final EditText editText) {
if (editText == eLonDeg || editText == eLatSub || editText == eLonSub) {
return 3;
@@ -503,6 +531,17 @@ public class CoordinatesInputDialog extends DialogFragment {
}
}
+ private class ClipboardListener implements View.OnClickListener {
+
+ @Override
+ public void onClick(final View v) {
+ try {
+ gp = new Geopoint(StringUtils.defaultString(ClipboardUtils.getText()));
+ updateGUI();
+ } catch (final ParseException ignored) {
+ }
+ }
+ }
private class InputDoneListener implements View.OnClickListener {