aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2012-06-03 07:34:32 +0200
committerBananeweizen <bananeweizen@gmx.de>2012-06-03 07:34:32 +0200
commit133c78c84688c5cb6fe8ba5651e4815b6a0ff634 (patch)
tree6681c2700da473a6d15b044a4de4d3b0e397903f /main/src
parentfbf4086d126aeb3fd34bd0563891cbaf7704eac5 (diff)
downloadcgeo-133c78c84688c5cb6fe8ba5651e4815b6a0ff634.zip
cgeo-133c78c84688c5cb6fe8ba5651e4815b6a0ff634.tar.gz
cgeo-133c78c84688c5cb6fe8ba5651e4815b6a0ff634.tar.bz2
refactoring: have more physical units code in one place
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/AbstractPopupActivity.java4
-rw-r--r--main/src/cgeo/geocaching/CacheDetailActivity.java17
-rw-r--r--main/src/cgeo/geocaching/cgeo.java11
-rw-r--r--main/src/cgeo/geocaching/cgeonavigate.java26
-rw-r--r--main/src/cgeo/geocaching/cgeotrackable.java4
-rw-r--r--main/src/cgeo/geocaching/connector/gc/GCMap.java9
-rw-r--r--main/src/cgeo/geocaching/geopoint/HumanDistance.java49
-rw-r--r--main/src/cgeo/geocaching/geopoint/Units.java73
-rw-r--r--main/src/cgeo/geocaching/maps/ScaleOverlay.java4
-rw-r--r--main/src/cgeo/geocaching/ui/AddressListAdapter.java4
-rw-r--r--main/src/cgeo/geocaching/ui/CacheDetailsCreator.java4
-rw-r--r--main/src/cgeo/geocaching/ui/DistanceView.java6
12 files changed, 104 insertions, 107 deletions
diff --git a/main/src/cgeo/geocaching/AbstractPopupActivity.java b/main/src/cgeo/geocaching/AbstractPopupActivity.java
index bf81d5c..819aa68 100644
--- a/main/src/cgeo/geocaching/AbstractPopupActivity.java
+++ b/main/src/cgeo/geocaching/AbstractPopupActivity.java
@@ -8,7 +8,7 @@ import cgeo.geocaching.enumerations.LogType;
import cgeo.geocaching.gcvote.GCVote;
import cgeo.geocaching.gcvote.GCVoteRating;
import cgeo.geocaching.geopoint.Geopoint;
-import cgeo.geocaching.geopoint.HumanDistance;
+import cgeo.geocaching.geopoint.Units;
import cgeo.geocaching.ui.CacheDetailsCreator;
import cgeo.geocaching.utils.GeoDirHandler;
import cgeo.geocaching.utils.Log;
@@ -64,7 +64,7 @@ public abstract class AbstractPopupActivity extends AbstractActivity {
protected void updateGeoData(final IGeoData geo) {
try {
if (geo.getCoords() != null && cache != null && cache.getCoords() != null) {
- cacheDistance.setText(HumanDistance.getHumanDistance(geo.getCoords().distanceTo(cache.getCoords())));
+ cacheDistance.setText(Units.getDistanceFromKilometers(geo.getCoords().distanceTo(cache.getCoords())));
cacheDistance.bringToFront();
}
} catch (Exception e) {
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java
index bf80e5a..f897ffe 100644
--- a/main/src/cgeo/geocaching/CacheDetailActivity.java
+++ b/main/src/cgeo/geocaching/CacheDetailActivity.java
@@ -14,8 +14,7 @@ import cgeo.geocaching.enumerations.LoadFlags.SaveFlag;
import cgeo.geocaching.enumerations.LogType;
import cgeo.geocaching.enumerations.WaypointType;
import cgeo.geocaching.geopoint.GeopointFormatter;
-import cgeo.geocaching.geopoint.HumanDistance;
-import cgeo.geocaching.geopoint.IConversion;
+import cgeo.geocaching.geopoint.Units;
import cgeo.geocaching.network.HtmlImage;
import cgeo.geocaching.network.Parameters;
import cgeo.geocaching.ui.CacheDetailsCreator;
@@ -138,21 +137,13 @@ public class CacheDetailActivity extends AbstractActivity {
final StringBuilder dist = new StringBuilder();
if (geo.getCoords() != null && cache != null && cache.getCoords() != null) {
- dist.append(HumanDistance.getHumanDistance(geo.getCoords().distanceTo(cache.getCoords())));
+ dist.append(Units.getDistanceFromKilometers(geo.getCoords().distanceTo(cache.getCoords())));
}
if (cache != null && cache.getElevation() != null) {
if (geo.getAltitude() != 0.0) {
- final double diff = cache.getElevation() - geo.getAltitude();
- dist.append(diff >= 0 ? " ↗" : " ↘");
- // TODO: move code related to different units (from the whole project) into utils code
- if (Settings.isUseMetricUnits()) {
- dist.append(Math.abs((int) diff));
- dist.append(" m");
- } else {
- dist.append(Math.abs((int) (diff * IConversion.METERS_TO_FEET)));
- dist.append(" ft");
- }
+ final float diff = (float) (cache.getElevation() - geo.getAltitude());
+ dist.append(' ').append(Units.getElevation(diff));
}
}
diff --git a/main/src/cgeo/geocaching/cgeo.java b/main/src/cgeo/geocaching/cgeo.java
index 35d0a22..bb01cf1 100644
--- a/main/src/cgeo/geocaching/cgeo.java
+++ b/main/src/cgeo/geocaching/cgeo.java
@@ -6,8 +6,7 @@ import cgeo.geocaching.connector.gc.Login;
import cgeo.geocaching.enumerations.CacheType;
import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.geopoint.Geopoint;
-import cgeo.geocaching.geopoint.HumanDistance;
-import cgeo.geocaching.geopoint.IConversion;
+import cgeo.geocaching.geopoint.Units;
import cgeo.geocaching.maps.CGeoMap;
import cgeo.geocaching.network.StatusUpdater.Status;
import cgeo.geocaching.ui.Formatter;
@@ -633,11 +632,7 @@ public class cgeo extends AbstractActivity {
if (geo.getAccuracy() >= 0) {
int speed = Math.round(geo.getSpeed()) * 60 * 60 / 1000;
- if (Settings.isUseMetricUnits()) {
- navAccuracy.setText("±" + Math.round(geo.getAccuracy()) + " m" + Formatter.SEPARATOR + speed + " km/h");
- } else {
- navAccuracy.setText("±" + Math.round(geo.getAccuracy() * IConversion.METERS_TO_FEET) + " ft" + Formatter.SEPARATOR + speed / IConversion.MILES_TO_KILOMETER + " mph");
- }
+ navAccuracy.setText("±" + Units.getDistanceFromMeters(geo.getAccuracy()) + Formatter.SEPARATOR + Units.getSpeed(speed));
} else {
navAccuracy.setText(null);
}
@@ -651,7 +646,7 @@ public class cgeo extends AbstractActivity {
}
} else {
if (geo.getAltitude() != 0.0) {
- final String humanAlt = HumanDistance.getHumanDistance((float) geo.getAltitude() / 1000);
+ final String humanAlt = Units.getDistanceFromKilometers((float) geo.getAltitude() / 1000);
navLocation.setText(geo.getCoords() + " | " + humanAlt);
} else {
navLocation.setText(geo.getCoords().toString());
diff --git a/main/src/cgeo/geocaching/cgeonavigate.java b/main/src/cgeo/geocaching/cgeonavigate.java
index 567ae74..6062a14 100644
--- a/main/src/cgeo/geocaching/cgeonavigate.java
+++ b/main/src/cgeo/geocaching/cgeonavigate.java
@@ -2,8 +2,7 @@ package cgeo.geocaching;
import cgeo.geocaching.activity.AbstractActivity;
import cgeo.geocaching.geopoint.Geopoint;
-import cgeo.geocaching.geopoint.HumanDistance;
-import cgeo.geocaching.geopoint.IConversion;
+import cgeo.geocaching.geopoint.Units;
import cgeo.geocaching.maps.CGeoMap;
import cgeo.geocaching.ui.CompassView;
import cgeo.geocaching.utils.GeoDirHandler;
@@ -217,7 +216,7 @@ public class cgeonavigate extends AbstractActivity {
}
cacheHeading = geo.getCoords().bearingTo(dstCoords);
- distanceView.setText(HumanDistance.getHumanDistance(geo.getCoords().distanceTo(dstCoords)));
+ distanceView.setText(Units.getDistanceFromKilometers(geo.getCoords().distanceTo(dstCoords)));
headingView.setText(Math.round(cacheHeading) + "°");
}
@@ -233,29 +232,22 @@ public class cgeonavigate extends AbstractActivity {
}
if (geo.getCoords() != null) {
- String satellites;
- if (geo.getSatellitesFixed() > 0) {
- satellites = res.getString(R.string.loc_sat) + ": " + geo.getSatellitesFixed() + "/" + geo.getSatellitesVisible();
- } else if (geo.getSatellitesVisible() >= 0) {
- satellites = res.getString(R.string.loc_sat) + ": 0/" + geo.getSatellitesVisible();
- } else {
- satellites = "";
+ if (geo.getSatellitesVisible() >= 0) {
+ navSatellites.setText(res.getString(R.string.loc_sat) + ": " + geo.getSatellitesFixed() + "/" + geo.getSatellitesVisible());
+ }
+ else {
+ navSatellites.setText("");
}
- navSatellites.setText(satellites);
navType.setText(res.getString(geo.getLocationProvider().resourceId));
if (geo.getAccuracy() >= 0) {
- if (Settings.isUseMetricUnits()) {
- navAccuracy.setText("±" + Math.round(geo.getAccuracy()) + " m");
- } else {
- navAccuracy.setText("±" + Math.round(geo.getAccuracy() * IConversion.METERS_TO_FEET) + " ft");
- }
+ navAccuracy.setText("±" + Units.getDistanceFromMeters(geo.getAccuracy()));
} else {
navAccuracy.setText(null);
}
if (geo.getAltitude() != 0.0f) {
- final String humanAlt = HumanDistance.getHumanDistance((float) geo.getAltitude() / 1000);
+ final String humanAlt = Units.getDistanceFromMeters((float) geo.getAltitude());
navLocation.setText(geo.getCoords() + " | " + humanAlt);
} else {
navLocation.setText(geo.getCoords().toString());
diff --git a/main/src/cgeo/geocaching/cgeotrackable.java b/main/src/cgeo/geocaching/cgeotrackable.java
index c635e41..acd351d 100644
--- a/main/src/cgeo/geocaching/cgeotrackable.java
+++ b/main/src/cgeo/geocaching/cgeotrackable.java
@@ -3,7 +3,7 @@ package cgeo.geocaching;
import cgeo.geocaching.activity.AbstractActivity;
import cgeo.geocaching.connector.gc.GCParser;
import cgeo.geocaching.enumerations.LogType;
-import cgeo.geocaching.geopoint.HumanDistance;
+import cgeo.geocaching.geopoint.Units;
import cgeo.geocaching.network.HtmlImage;
import cgeo.geocaching.ui.CacheDetailsCreator;
import cgeo.geocaching.ui.Formatter;
@@ -166,7 +166,7 @@ public class cgeotrackable extends AbstractActivity {
// trackable distance
if (trackable.getDistance() >= 0) {
- details.add(R.string.trackable_distance, HumanDistance.getHumanDistance(trackable.getDistance()));
+ details.add(R.string.trackable_distance, Units.getDistanceFromKilometers(trackable.getDistance()));
}
// trackable goal
diff --git a/main/src/cgeo/geocaching/connector/gc/GCMap.java b/main/src/cgeo/geocaching/connector/gc/GCMap.java
index a8509b8..dd9193d 100644
--- a/main/src/cgeo/geocaching/connector/gc/GCMap.java
+++ b/main/src/cgeo/geocaching/connector/gc/GCMap.java
@@ -10,7 +10,7 @@ import cgeo.geocaching.enumerations.LiveMapStrategy.Strategy;
import cgeo.geocaching.enumerations.LiveMapStrategy.StrategyFlag;
import cgeo.geocaching.enumerations.StatusCode;
import cgeo.geocaching.geopoint.Geopoint;
-import cgeo.geocaching.geopoint.IConversion;
+import cgeo.geocaching.geopoint.Units;
import cgeo.geocaching.geopoint.Viewport;
import cgeo.geocaching.network.Parameters;
import cgeo.geocaching.ui.Formatter;
@@ -243,12 +243,7 @@ public class GCMap {
SearchResult result = searchByViewport(viewport, tokens, strategy);
if (Settings.isDebug()) {
- String text = Formatter.SEPARATOR + strategy.getL10n() + Formatter.SEPARATOR;
- if (Settings.isUseMetricUnits()) {
- text += speed + " km/h";
- } else {
- text += speed / IConversion.MILES_TO_KILOMETER + " mph";
- }
+ StringBuilder text = new StringBuilder(Formatter.SEPARATOR).append(strategy.getL10n()).append(Formatter.SEPARATOR).append(Units.getSpeed(speed));
result.setUrl(result.getUrl() + text);
}
diff --git a/main/src/cgeo/geocaching/geopoint/HumanDistance.java b/main/src/cgeo/geocaching/geopoint/HumanDistance.java
deleted file mode 100644
index 25d1bb7..0000000
--- a/main/src/cgeo/geocaching/geopoint/HumanDistance.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package cgeo.geocaching.geopoint;
-
-import cgeo.geocaching.Settings;
-
-import org.apache.commons.lang3.tuple.ImmutablePair;
-
-public class HumanDistance {
-
- public static ImmutablePair<Double, String> scaleUnit(final double distanceKilometers) {
- double distance;
- String units;
- if (Settings.isUseMetricUnits()) {
- if (distanceKilometers >= 1) {
- distance = distanceKilometers;
- units = "km";
- } else {
- distance = distanceKilometers * 1000;
- units = "m";
- }
- } else {
- distance = distanceKilometers / IConversion.MILES_TO_KILOMETER;
- if (distance >= 0.1) {
- units = "mi";
- } else {
- distance *= 5280;
- units = "ft";
- }
- }
- return new ImmutablePair<Double, String>(distance, units);
- }
-
- public static String getHumanDistance(final Float distanceKilometers) {
- if (distanceKilometers == null) {
- return "?";
- }
-
- final ImmutablePair<Double, String> scaled = scaleUnit(distanceKilometers);
- String formatString;
- if (scaled.left >= 100) {
- formatString = "%.0f";
- } else if (scaled.left >= 10) {
- formatString = "%.1f";
- } else {
- formatString = "%.2f";
- }
-
- return String.format(formatString + " %s", scaled.left, scaled.right);
- }
-}
diff --git a/main/src/cgeo/geocaching/geopoint/Units.java b/main/src/cgeo/geocaching/geopoint/Units.java
new file mode 100644
index 0000000..3da3ad9
--- /dev/null
+++ b/main/src/cgeo/geocaching/geopoint/Units.java
@@ -0,0 +1,73 @@
+package cgeo.geocaching.geopoint;
+
+import cgeo.geocaching.Settings;
+
+import org.apache.commons.lang3.tuple.ImmutablePair;
+
+public class Units {
+
+ public static ImmutablePair<Double, String> scaleDistance(final double distanceKilometers) {
+ double distance;
+ String units;
+ if (Settings.isUseMetricUnits()) {
+ if (distanceKilometers >= 1) {
+ distance = distanceKilometers;
+ units = "km";
+ } else {
+ distance = distanceKilometers * 1000;
+ units = "m";
+ }
+ } else {
+ distance = distanceKilometers / IConversion.MILES_TO_KILOMETER;
+ if (distance >= 0.1) {
+ units = "mi";
+ } else {
+ distance *= 5280;
+ units = "ft";
+ }
+ }
+ return new ImmutablePair<Double, String>(distance, units);
+ }
+
+ public static String getDistanceFromKilometers(final Float distanceKilometers) {
+ if (distanceKilometers == null) {
+ return "?";
+ }
+
+ final ImmutablePair<Double, String> scaled = scaleDistance(distanceKilometers);
+ String formatString;
+ if (scaled.left >= 100) {
+ formatString = "%.0f";
+ } else if (scaled.left >= 10) {
+ formatString = "%.1f";
+ } else {
+ formatString = "%.2f";
+ }
+
+ return String.format(formatString + " %s", scaled.left, scaled.right);
+ }
+
+ /**
+ * Get human readable elevation, depending on settings for metric units.
+ * Result is rounded to full meters/feet, as the sensors don't have that precision anyway.
+ *
+ * @param meters
+ * @return
+ */
+ public static String getElevation(float meters) {
+ final ImmutablePair<Double, String> scaled = scaleDistance(meters / 1000f);
+ return (meters >= 0 ? "↥ " : "↧ ") + String.format("%d %s", Math.abs(Math.round(scaled.left)), scaled.right);
+ }
+
+ public static String getDistanceFromMeters(float meters) {
+ return getDistanceFromKilometers(meters / 1000f);
+ }
+
+ public static String getSpeed(float kilometersPerHour) {
+ final String speed = getDistanceFromKilometers(kilometersPerHour);
+ if (speed.endsWith("mi")) {
+ return speed.substring(0, speed.length() - 2) + "mph";
+ }
+ return speed + (Settings.isUseMetricUnits() ? "/h" : "ph");
+ }
+}
diff --git a/main/src/cgeo/geocaching/maps/ScaleOverlay.java b/main/src/cgeo/geocaching/maps/ScaleOverlay.java
index 321624d..bee6acf 100644
--- a/main/src/cgeo/geocaching/maps/ScaleOverlay.java
+++ b/main/src/cgeo/geocaching/maps/ScaleOverlay.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.maps;
import cgeo.geocaching.geopoint.Geopoint;
-import cgeo.geocaching.geopoint.HumanDistance;
+import cgeo.geocaching.geopoint.Units;
import cgeo.geocaching.maps.interfaces.GeneralOverlay;
import cgeo.geocaching.maps.interfaces.GeoPointImpl;
import cgeo.geocaching.maps.interfaces.MapProjectionImpl;
@@ -62,7 +62,7 @@ public class ScaleOverlay implements GeneralOverlay {
final Geopoint leftCoords = new Geopoint(center.getLatitudeE6() / 1e6, center.getLongitudeE6() / 1e6 - span / 2);
final Geopoint rightCoords = new Geopoint(center.getLatitudeE6() / 1e6, center.getLongitudeE6() / 1e6 + span / 2);
- final ImmutablePair<Double, String> scaled = HumanDistance.scaleUnit(leftCoords.distanceTo(rightCoords) * SCALE_WIDTH_FACTOR);
+ final ImmutablePair<Double, String> scaled = Units.scaleDistance(leftCoords.distanceTo(rightCoords) * SCALE_WIDTH_FACTOR);
final double distanceRound = keepSignificantDigit(scaled.left);
final double pixels = Math.round((mapView.getWidth() * SCALE_WIDTH_FACTOR / scaled.left) * distanceRound);
diff --git a/main/src/cgeo/geocaching/ui/AddressListAdapter.java b/main/src/cgeo/geocaching/ui/AddressListAdapter.java
index 17a9289..eb8b516 100644
--- a/main/src/cgeo/geocaching/ui/AddressListAdapter.java
+++ b/main/src/cgeo/geocaching/ui/AddressListAdapter.java
@@ -4,7 +4,7 @@ import cgeo.geocaching.R;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.cgeocaches;
import cgeo.geocaching.geopoint.Geopoint;
-import cgeo.geocaching.geopoint.HumanDistance;
+import cgeo.geocaching.geopoint.Units;
import org.apache.commons.lang3.StringUtils;
@@ -73,7 +73,7 @@ public class AddressListAdapter extends ArrayAdapter<Address> {
private CharSequence getDistanceText(final Address address) {
if (location != null && address.hasLatitude() && address.hasLongitude()) {
- return HumanDistance.getHumanDistance(location.distanceTo(new Geopoint(address.getLatitude(), address.getLongitude())));
+ return Units.getDistanceFromKilometers(location.distanceTo(new Geopoint(address.getLatitude(), address.getLongitude())));
}
return "";
diff --git a/main/src/cgeo/geocaching/ui/CacheDetailsCreator.java b/main/src/cgeo/geocaching/ui/CacheDetailsCreator.java
index 70fc2bb..2a83ddc 100644
--- a/main/src/cgeo/geocaching/ui/CacheDetailsCreator.java
+++ b/main/src/cgeo/geocaching/ui/CacheDetailsCreator.java
@@ -4,7 +4,7 @@ import cgeo.geocaching.R;
import cgeo.geocaching.cgCache;
import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.geopoint.Geopoint;
-import cgeo.geocaching.geopoint.HumanDistance;
+import cgeo.geocaching.geopoint.Units;
import org.apache.commons.lang3.StringUtils;
@@ -148,7 +148,7 @@ public final class CacheDetailsCreator {
}
String text = "--";
if (distance != null) {
- text = HumanDistance.getHumanDistance(distance);
+ text = Units.getDistanceFromKilometers(distance);
}
else if (cacheDistanceView != null) {
// if there is already a distance in cacheDistance, use it instead of resetting to default.
diff --git a/main/src/cgeo/geocaching/ui/DistanceView.java b/main/src/cgeo/geocaching/ui/DistanceView.java
index 83de4aa..9611511 100644
--- a/main/src/cgeo/geocaching/ui/DistanceView.java
+++ b/main/src/cgeo/geocaching/ui/DistanceView.java
@@ -1,7 +1,7 @@
package cgeo.geocaching.ui;
import cgeo.geocaching.geopoint.Geopoint;
-import cgeo.geocaching.geopoint.HumanDistance;
+import cgeo.geocaching.geopoint.Units;
import android.content.Context;
import android.util.AttributeSet;
@@ -30,11 +30,11 @@ public class DistanceView extends TextView {
if (cacheCoords == null || coords == null) {
return;
}
- setText(HumanDistance.getHumanDistance(coords.distanceTo(cacheCoords)));
+ setText(Units.getDistanceFromKilometers(coords.distanceTo(cacheCoords)));
}
public void setDistance(Float distance) {
- setText("~" + HumanDistance.getHumanDistance(distance));
+ setText("~" + Units.getDistanceFromKilometers(distance));
}
public void clear() {