aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
authorkoem <koem@petoria.de>2013-06-19 21:28:38 -0600
committerkoem <koem@petoria.de>2013-06-19 21:28:38 -0600
commit59db927f55895df298035923238bf25e57830ea7 (patch)
tree186bfd5c1e662f48e3c3200c69cc7a68582f9fab /main/src
parenta9d1353b00c24f8163ad02b9ecb7daf2f5893c12 (diff)
downloadcgeo-59db927f55895df298035923238bf25e57830ea7.zip
cgeo-59db927f55895df298035923238bf25e57830ea7.tar.gz
cgeo-59db927f55895df298035923238bf25e57830ea7.tar.bz2
#2747 TTS distances should use Android plurals
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/CompassActivity.java9
-rw-r--r--main/src/cgeo/geocaching/speech/TextFactory.java42
2 files changed, 36 insertions, 15 deletions
diff --git a/main/src/cgeo/geocaching/CompassActivity.java b/main/src/cgeo/geocaching/CompassActivity.java
index 4f8af08..9da428d 100644
--- a/main/src/cgeo/geocaching/CompassActivity.java
+++ b/main/src/cgeo/geocaching/CompassActivity.java
@@ -127,8 +127,7 @@ public class CompassActivity extends AbstractActivity {
final IWaypoint coordinate = coordinates.get(i);
subMenu.add(0, COORDINATES_OFFSET + i, 0, coordinate.getName() + " (" + coordinate.getCoordType() + ")");
}
- }
- else {
+ } else {
menu.findItem(R.id.menu_select_destination).setVisible(false);
}
return true;
@@ -199,8 +198,7 @@ public class CompassActivity extends AbstractActivity {
protected void onActivityResult(int request, int result, Intent data) {
if (request == REQUEST_TTS_DATA_CHECK && result == Engine.CHECK_VOICE_DATA_PASS) {
SpeechService.startService(this, dstCoords);
- }
- else {
+ } else {
Log.i("TTS failed to start. Request: " + request + " result: " + result);
startActivity(new Intent(Engine.ACTION_INSTALL_TTS_DATA));
}
@@ -248,8 +246,7 @@ public class CompassActivity extends AbstractActivity {
if (geo.getCoords() != null) {
if (geo.getSatellitesVisible() >= 0) {
navSatellites.setText(res.getString(R.string.loc_sat) + ": " + geo.getSatellitesFixed() + "/" + geo.getSatellitesVisible());
- }
- else {
+ } else {
navSatellites.setText("");
}
navType.setText(res.getString(geo.getLocationProvider().resourceId));
diff --git a/main/src/cgeo/geocaching/speech/TextFactory.java b/main/src/cgeo/geocaching/speech/TextFactory.java
index 0e13564..993f1cf 100644
--- a/main/src/cgeo/geocaching/speech/TextFactory.java
+++ b/main/src/cgeo/geocaching/speech/TextFactory.java
@@ -26,38 +26,62 @@ public class TextFactory {
if (Settings.isUseMetricUnits()) {
if (kilometers >= 5.0) {
- return getString(R.string.tts_kilometers, String.valueOf(Math.round(kilometers)));
+ int quantity = Math.round(kilometers);
+ return getQuantityString(R.plurals.tts_kilometers, quantity, String.valueOf(quantity));
}
if (kilometers >= 1.0) {
+ float precision1 = Math.round(kilometers * 10.0f) / 10.0f;
+ float precision0 = Math.round(kilometers);
+ if (precision1 == precision0) {
+ // this is an int - e.g. 2 kilometers
+ int quantity = (int) precision0;
+ return getQuantityString(R.plurals.tts_kilometers, quantity, String.valueOf(quantity));
+ }
+ // this is no int - e.g. 1.7 kilometers
String digits = String.format(Locale.getDefault(), "%.1f", kilometers);
- return getString(R.string.tts_kilometers, digits);
+ // always use the plural (9 leads to plural)
+ return getQuantityString(R.plurals.tts_kilometers, 9, digits);
}
- int meters = (int) (kilometers * 1000.0);
+ int meters = (int) Math.round(kilometers * 1000.0);
if (meters > 50) {
- return getString(R.string.tts_meters, String.valueOf(Math.round(meters / 10.0) * 10));
+ meters = (int) Math.round(meters / 10.0) * 10;
}
- return getString(R.string.tts_meters, String.valueOf(meters));
+ return getQuantityString(R.plurals.tts_meters, meters, String.valueOf(meters));
}
float miles = kilometers / IConversion.MILES_TO_KILOMETER;
if (miles >= 3.0) {
- return getString(R.string.tts_miles, String.valueOf(Math.round(miles)));
+ int quantity = Math.round(miles);
+ return getQuantityString(R.plurals.tts_miles, quantity, String.valueOf(quantity));
}
if (miles >= 0.2) { // approx 1000 ft
+ float precision1 = Math.round(miles * 10.0f) / 10.0f;
+ float precision0 = Math.round(miles);
+ if (precision1 == precision0) {
+ // this is an int - e.g. 2 miles
+ int quantity = (int) precision0;
+ return getQuantityString(R.plurals.tts_miles, quantity, String.valueOf(quantity));
+ }
+ // this is no int - e.g. 1.7 miles
String digits = String.format(Locale.getDefault(), "%.1f", miles);
- return getString(R.string.tts_miles, digits);
+ // always use the plural (9 leads to plural)
+ return getQuantityString(R.plurals.tts_miles, 9, digits);
}
int feet = (int) (kilometers * 1000.0 * IConversion.METERS_TO_FEET);
if (feet > 300) {
- return getString(R.string.tts_feet, String.valueOf(Math.round(feet / 10.0) * 10));
+ feet = (int) Math.round(feet / 10.0) * 10;
}
- return getString(R.string.tts_feet, String.valueOf(feet));
+ return getQuantityString(R.plurals.tts_feet, feet, String.valueOf(feet));
}
private static String getString(int resourceId, Object... formatArgs) {
return cgeoapplication.getInstance().getString(resourceId, formatArgs);
}
+ private static String getQuantityString(int resourceId, int quantity, Object... formatArgs) {
+ return cgeoapplication.getInstance().getResources().getQuantityString(resourceId, quantity, formatArgs);
+ }
+
private static String getDirection(Geopoint position, Geopoint target, float direction) {
final int bearing = (int) position.bearingTo(target);
int degrees = (int) AngleUtils.normalize(bearing - direction);