Merge "Import translations. DO NOT MERGE" into klp-dev
diff --git a/src/com/android/settings/fuelgauge/BatteryHistoryChart.java b/src/com/android/settings/fuelgauge/BatteryHistoryChart.java
index 5145789..9642d7c 100644
--- a/src/com/android/settings/fuelgauge/BatteryHistoryChart.java
+++ b/src/com/android/settings/fuelgauge/BatteryHistoryChart.java
@@ -654,19 +654,26 @@
     @Override
     protected void onDraw(Canvas canvas) {
         super.onDraw(canvas);
-        
+
         final int width = getWidth();
         final int height = getHeight();
-        
+        final boolean layoutRtl = isLayoutRtl();
+        final int textStartX = layoutRtl ? width : 0;
+        mTextPaint.setTextAlign(layoutRtl ? Paint.Align.RIGHT : Paint.Align.LEFT);
+
         canvas.drawPath(mBatLevelPath, mBatteryBackgroundPaint);
         if (mLargeMode) {
-            canvas.drawText(mDurationString, 0, -mTextAscent + (mLineWidth/2),
+            int durationHalfWidth = mTotalDurationStringWidth / 2;
+            if (layoutRtl) durationHalfWidth = -durationHalfWidth;
+            canvas.drawText(mDurationString, textStartX, -mTextAscent + (mLineWidth / 2),
                     mTextPaint);
-            canvas.drawText(mTotalDurationString, (width/2) - (mTotalDurationStringWidth/2),
+            canvas.drawText(mTotalDurationString, (width / 2) - durationHalfWidth,
                     mLevelBottom - mTextAscent + mThinLineWidth, mTextPaint);
         } else {
-            canvas.drawText(mDurationString, (width/2) - (mDurationStringWidth/2),
-                    (height/2) - ((mTextDescent-mTextAscent)/2) - mTextAscent, mTextPaint);
+            int durationHalfWidth = mDurationStringWidth / 2;
+            if (layoutRtl) durationHalfWidth = -durationHalfWidth;
+            canvas.drawText(mDurationString, (width / 2) - durationHalfWidth,
+                    (height / 2) - ((mTextDescent - mTextAscent) / 2) - mTextAscent, mTextPaint);
         }
         if (!mBatGoodPath.isEmpty()) {
             canvas.drawPath(mBatGoodPath, mBatteryGoodPaint);
@@ -703,22 +710,22 @@
 
         if (mLargeMode) {
             if (mHavePhoneSignal) {
-                canvas.drawText(mPhoneSignalLabel, 0,
+                canvas.drawText(mPhoneSignalLabel, textStartX,
                         height - mPhoneSignalOffset - mTextDescent, mTextPaint);
             }
             if (mHaveGps) {
-                canvas.drawText(mGpsOnLabel, 0,
+                canvas.drawText(mGpsOnLabel, textStartX,
                         height - mGpsOnOffset - mTextDescent, mTextPaint);
             }
             if (mHaveWifi) {
-                canvas.drawText(mWifiRunningLabel, 0,
+                canvas.drawText(mWifiRunningLabel, textStartX,
                         height - mWifiRunningOffset - mTextDescent, mTextPaint);
             }
-            canvas.drawText(mWakeLockLabel, 0,
+            canvas.drawText(mWakeLockLabel, textStartX,
                     height - mWakeLockOffset - mTextDescent, mTextPaint);
-            canvas.drawText(mChargingLabel, 0,
+            canvas.drawText(mChargingLabel, textStartX,
                     height - mChargingOffset - mTextDescent, mTextPaint);
-            canvas.drawText(mScreenOnLabel, 0,
+            canvas.drawText(mScreenOnLabel, textStartX,
                     height - mScreenOnOffset - mTextDescent, mTextPaint);
             canvas.drawLine(0, mLevelBottom+(mThinLineWidth/2), width,
                     mLevelBottom+(mThinLineWidth/2), mTextPaint);
diff --git a/src/com/android/settings/location/LocationMode.java b/src/com/android/settings/location/LocationMode.java
index 70cee99..63ba6ea 100644
--- a/src/com/android/settings/location/LocationMode.java
+++ b/src/com/android/settings/location/LocationMode.java
@@ -110,7 +110,7 @@
     }
 
     @Override
-    public void onModeChanged(int mode) {
+    public void onModeChanged(int mode, boolean restricted) {
         switch (mode) {
             case Settings.Secure.LOCATION_MODE_OFF:
                 Intent intent = new Intent();
@@ -129,7 +129,8 @@
             default:
                 break;
         }
-        boolean enabled = (mode != Settings.Secure.LOCATION_MODE_OFF);
+
+        boolean enabled = (mode != Settings.Secure.LOCATION_MODE_OFF) && !restricted;
         mHighAccuracy.setEnabled(enabled);
         mBatterySaving.setEnabled(enabled);
         mSensorsOnly.setEnabled(enabled);
diff --git a/src/com/android/settings/location/LocationSettings.java b/src/com/android/settings/location/LocationSettings.java
index 818ec2b..815be41 100644
--- a/src/com/android/settings/location/LocationSettings.java
+++ b/src/com/android/settings/location/LocationSettings.java
@@ -28,7 +28,6 @@
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceCategory;
 import android.preference.PreferenceGroup;
-import android.preference.PreferenceManager;
 import android.preference.PreferenceScreen;
 import android.provider.Settings;
 import android.util.Log;
@@ -216,7 +215,7 @@
     }
 
     @Override
-    public void onModeChanged(int mode) {
+    public void onModeChanged(int mode, boolean restricted) {
         switch (mode) {
             case Settings.Secure.LOCATION_MODE_OFF:
                 mLocationMode.setSummary(R.string.location_mode_location_off_title);
@@ -234,7 +233,8 @@
                 break;
         }
 
-        boolean enabled = (mode != Settings.Secure.LOCATION_MODE_OFF);
+        boolean enabled = (mode != Settings.Secure.LOCATION_MODE_OFF) && !restricted;
+        mSwitch.setEnabled(!restricted);
         mLocationMode.setEnabled(enabled);
 
         if (enabled != mSwitch.isChecked()) {
diff --git a/src/com/android/settings/location/LocationSettingsBase.java b/src/com/android/settings/location/LocationSettingsBase.java
index 5637b25..630e1e4 100644
--- a/src/com/android/settings/location/LocationSettingsBase.java
+++ b/src/com/android/settings/location/LocationSettingsBase.java
@@ -71,11 +71,20 @@
     }
 
     /** Called when location mode has changed. */
-    public abstract void onModeChanged(int mode);
+    public abstract void onModeChanged(int mode, boolean restricted);
+
+    private boolean isRestricted() {
+        final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
+        return um.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION);
+    }
 
     public void setLocationMode(int mode) {
-        final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
-        if (um.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION)) {
+        if (isRestricted()) {
+            // Location toggling disabled by user restriction. Read the current location mode to
+            // update the location master switch.
+            mode = Settings.Secure.getInt(getContentResolver(), Settings.Secure.LOCATION_MODE,
+                    Settings.Secure.LOCATION_MODE_OFF);
+            onModeChanged(mode, true);
             return;
         }
         Settings.Secure.putInt(getContentResolver(), Settings.Secure.LOCATION_MODE, mode);
@@ -85,6 +94,6 @@
     public void refreshLocationMode() {
         int mode = Settings.Secure.getInt(getContentResolver(), Settings.Secure.LOCATION_MODE,
                 Settings.Secure.LOCATION_MODE_OFF);
-        onModeChanged(mode);
+        onModeChanged(mode, isRestricted());
     }
 }