jenkins-bot has submitted this change and it was merged.
Change subject: Add option to switch between metric/imperial in Nearby.
......................................................................
Add option to switch between metric/imperial in Nearby.
Change-Id: I8f6356a8150c085c4ecc29f101b45be56c85c633
---
M wikipedia/res/menu/menu_nearby.xml
M wikipedia/res/values-qq/strings.xml
M wikipedia/res/values/strings.xml
M wikipedia/src/main/java/org/wikipedia/nearby/NearbyActivity.java
4 files changed, 64 insertions(+), 10 deletions(-)
Approvals:
BearND: Looks good to me, approved
jenkins-bot: Verified
diff --git a/wikipedia/res/menu/menu_nearby.xml
b/wikipedia/res/menu/menu_nearby.xml
index d265738..e830c82 100644
--- a/wikipedia/res/menu/menu_nearby.xml
+++ b/wikipedia/res/menu/menu_nearby.xml
@@ -7,5 +7,8 @@
android:icon="@drawable/ic_refresh"
android:title="@string/menu_update_nearby"
app:showAsAction="always" />
+ <item android:id="@+id/menu_metric_imperial"
+ android:title="@string/nearby_set_imperial"
+ app:showAsAction="never"/>
</menu>
diff --git a/wikipedia/res/values-qq/strings.xml
b/wikipedia/res/values-qq/strings.xml
index 7359ec2..8c0e602 100644
--- a/wikipedia/res/values-qq/strings.xml
+++ b/wikipedia/res/values-qq/strings.xml
@@ -76,10 +76,14 @@
<string name="nearby_empty_message">Message details when no nearby pages
were found</string>
<string name="nearby_distance_in_meters">Distance to the place mentioned in
the nearby page in meters. Please leave the %d as is. It represents an integer
decimal number up to 999.</string>
<string name="nearby_distance_in_kilometers">Distance to the place mentioned
in the nearby page in kilometers. Please leave the %.2f as is. It represents a
floating point number with 2 digits after the decimal point.</string>
+ <string name="nearby_distance_in_feet">Distance to the place mentioned in
the nearby page in feet. Please leave the %d as is. It represents an integer
decimal number up to 999.</string>
+ <string name="nearby_distance_in_miles">Distance to the place mentioned in
the nearby page in miles. Please leave the %.2f as is. It represents a floating
point number with 2 digits after the decimal point.</string>
<string name="nearby_no_network">Error message when there was a network
error</string>
<string name="nearby_server_error">Error message when the app could not get
list of nearby places from the server.</string>
<string name="nearby_no_location">Error message when the app could not get a
location from any location provider (network or GPS).</string>
<string name="nearby_dialog_goto_settings">Dialog text that tells the user
that Location updates are not enabled on the device, and asks if the user wants
to go to the Settings page on the device where they can enable Location
updates.</string>
+ <string name="nearby_set_metric">Menu item for displaying distances in
metric units (meters and kilometers).</string>
+ <string name="nearby_set_imperial">Menu item for displaying distances in
imperial units (feet and miles).</string>
<string name="last_updated_text">Message in footer of article indicating
when the article was last updated. \'%s\' is substituted with the appropriately
formatted human-readable timestamp, such as \"seven days ago\".</string>
<string name="content_license_html">HTML specifying license of the Wiki and
link to appropriate CC page</string>
<string name="edit_save_action_license_logged_in">HTML specifying Terms of
Use and CC license before saving edits</string>
diff --git a/wikipedia/res/values/strings.xml b/wikipedia/res/values/strings.xml
index d07e658..bc597ee 100644
--- a/wikipedia/res/values/strings.xml
+++ b/wikipedia/res/values/strings.xml
@@ -52,10 +52,14 @@
<string name="nearby_empty_message">You can refresh this page when you
move to a new location.</string>
<string name="nearby_distance_in_meters">%d m</string>
<string name="nearby_distance_in_kilometers">%.2f km</string>
+ <string name="nearby_distance_in_feet">%d ft</string>
+ <string name="nearby_distance_in_miles">%.2f mi</string>
<string name="nearby_no_network">No network connection</string>
<string name="nearby_server_error">Could not get list of nearby
places.</string>
<string name="nearby_no_location">Not able to get location</string>
<string name="nearby_dialog_goto_settings">Location updates are not
enabled on your device. Would you like to go to your device\'s settings to
enable Location updates?</string>
+ <string name="nearby_set_metric">Show meters/km</string>
+ <string name="nearby_set_imperial">Show feet/miles</string>
<string name="last_updated_text">Last updated %s</string>
<string name="content_license_html"><![CDATA[Content is available under <a
href=\"//creativecommons.org/licenses/by-sa/3.0/\">CC BY-SA 3.0</a> unless
otherwise noted]]></string>
diff --git a/wikipedia/src/main/java/org/wikipedia/nearby/NearbyActivity.java
b/wikipedia/src/main/java/org/wikipedia/nearby/NearbyActivity.java
index 4528c92..ca36304 100644
--- a/wikipedia/src/main/java/org/wikipedia/nearby/NearbyActivity.java
+++ b/wikipedia/src/main/java/org/wikipedia/nearby/NearbyActivity.java
@@ -4,6 +4,7 @@
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.hardware.GeomagneticField;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
@@ -14,6 +15,7 @@
import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle;
+import android.preference.PreferenceManager;
import android.provider.Settings;
import android.util.Log;
import android.view.LayoutInflater;
@@ -46,19 +48,23 @@
import java.util.Comparator;
import java.util.Date;
import java.util.List;
+import java.util.Locale;
/**
* Displays a list of nearby pages.
*/
public class NearbyActivity extends ThemedActionBarActivity implements
SensorEventListener {
public static final int ACTIVITY_RESULT_NEARBY_SELECT = 1;
+ private static final String PREF_KEY_UNITS = "nearbyUnits";
private static final String NEARBY_LAST_RESULT = "lastRes";
private static final String NEARBY_LAST_LOCATION = "lastLoc";
private static final String NEARBY_NEXT_LOCATION = "curLoc";
private static final int MIN_TIME_MILLIS = 5000;
private static final int MIN_DISTANCE_METERS = 2;
- private static final int ONE_KM = 1000;
- private static final double ONE_KM_D = 1000.0d;
+ private static final int ONE_THOUSAND = 1000;
+ private static final double ONE_THOUSAND_D = 1000.0d;
+ private static final double METER_TO_FEET = 3.280839895;
+ private static final int ONE_MILE = 5280;
private ListView nearbyList;
private View nearbyLoadingContainer;
@@ -95,6 +101,9 @@
//we'll maintain a list of CompassViews that are currently being
displayed, and update them
//whenever we receive updates from sensors.
private List<NearbyCompassView> compassViews;
+
+ //whether to display distances in imperial units (feet/miles) instead of
metric
+ private boolean showImperial = false;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -166,6 +175,17 @@
showNearbyPages(lastResult);
} else {
setRefreshingState(true);
+ }
+
+ SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(this);
+ //do we already have a preference for metric/imperial units?
+ if (prefs.contains(PREF_KEY_UNITS)) {
+ setImperialUnits(prefs.getBoolean(PREF_KEY_UNITS, false));
+ } else {
+ //if our locale is set to US, then use imperial units by default.
+ if
(Locale.getDefault().getISO3Country().equalsIgnoreCase(Locale.US.getISO3Country()))
{
+ setImperialUnits(true);
+ }
}
}
@@ -391,11 +411,20 @@
}
private String getDistanceLabel(Location otherLocation) {
- final int distance = getDistance(otherLocation);
- if (distance < ONE_KM) {
- return getString(R.string.nearby_distance_in_meters, distance);
+ final int meters = getDistance(otherLocation);
+ if (showImperial) {
+ final double feet = meters * METER_TO_FEET;
+ if (feet < ONE_THOUSAND) {
+ return getString(R.string.nearby_distance_in_feet, (int)feet);
+ } else {
+ return getString(R.string.nearby_distance_in_miles, feet /
ONE_MILE);
+ }
} else {
- return getString(R.string.nearby_distance_in_kilometers, distance
/ ONE_KM_D);
+ if (meters < ONE_THOUSAND) {
+ return getString(R.string.nearby_distance_in_meters, meters);
+ } else {
+ return getString(R.string.nearby_distance_in_kilometers,
meters / ONE_THOUSAND_D);
+ }
}
}
@@ -407,15 +436,18 @@
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_nearby, menu);
app.adjustDrawableToTheme(menu.findItem(R.id.menu_refresh_nearby).getIcon());
+ menu.findItem(R.id.menu_metric_imperial).setTitle(showImperial
+ ? getString(R.string.nearby_set_metric)
+ : getString(R.string.nearby_set_imperial));
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
- // invalidateOptionsMenu is only available since API 11
- menu.findItem(R.id.menu_refresh_nearby).setEnabled(!refreshing);
- }
+ menu.findItem(R.id.menu_refresh_nearby).setEnabled(!refreshing);
+ menu.findItem(R.id.menu_metric_imperial).setTitle(showImperial
+ ? getString(R.string.nearby_set_metric)
+ : getString(R.string.nearby_set_imperial));
return super.onPrepareOptionsMenu(menu);
}
@@ -429,11 +461,22 @@
setRefreshingState(true);
requestLocationUpdates();
return true;
+ case R.id.menu_metric_imperial:
+ setImperialUnits(!showImperial);
+ adapter.notifyDataSetInvalidated();
+ return true;
default:
throw new RuntimeException("Unknown menu item clicked!");
}
}
+ private void setImperialUnits(boolean imperial) {
+ showImperial = imperial;
+ SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(this);
+ prefs.edit().putBoolean(PREF_KEY_UNITS, showImperial).commit();
+ this.supportInvalidateOptionsMenu();
+ }
+
private class NearbyAdapter extends ArrayAdapter<NearbyPage> {
private static final int LAYOUT_ID = R.layout.item_nearby_entry;
--
To view, visit https://gerrit.wikimedia.org/r/163741
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I8f6356a8150c085c4ecc29f101b45be56c85c633
Gerrit-PatchSet: 3
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <[email protected]>
Gerrit-Reviewer: BearND <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits