diff options
| author | koem <koem@petoria.de> | 2013-06-19 21:28:38 -0600 |
|---|---|---|
| committer | koem <koem@petoria.de> | 2013-06-19 21:28:38 -0600 |
| commit | 59db927f55895df298035923238bf25e57830ea7 (patch) | |
| tree | 186bfd5c1e662f48e3c3200c69cc7a68582f9fab /main/src | |
| parent | a9d1353b00c24f8163ad02b9ecb7daf2f5893c12 (diff) | |
| download | cgeo-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.java | 9 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/speech/TextFactory.java | 42 |
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); |
