diff options
author | Wolfgang Wiedmeyer <wolfgit@wiedmeyer.de> | 2015-05-08 17:10:06 +0200 |
---|---|---|
committer | Wolfgang Wiedmeyer <wolfgit@wiedmeyer.de> | 2015-10-11 23:55:58 +0200 |
commit | 8ff62c5f34db48aa15c7252c40fea3381bba0952 (patch) | |
tree | 2a0ffd9bcf9a2648c45f170426cf86fb319509f2 /main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java | |
parent | 1d2b34e71a01d6af118ed89258ad0ecb983e1a9c (diff) | |
parent | 59b8b2e26a7fff6072c4d5d96f51035dc900e0bc (diff) | |
download | cgeo-8ff62c5f34db48aa15c7252c40fea3381bba0952.zip cgeo-8ff62c5f34db48aa15c7252c40fea3381bba0952.tar.gz cgeo-8ff62c5f34db48aa15c7252c40fea3381bba0952.tar.bz2 |
merge upstream
Diffstat (limited to 'main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java')
-rw-r--r-- | main/src/cgeo/geocaching/ui/dialog/CoordinatesInputDialog.java | 63 |
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 { |