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

Reply via email to