OSDN Git Service

Disallows setting when user restriction applies
authorLifu Tang <lifu@google.com>
Wed, 28 Aug 2013 00:09:55 +0000 (17:09 -0700)
committerLifu Tang <lifu@google.com>
Wed, 28 Aug 2013 20:41:20 +0000 (13:41 -0700)
- Fix b/10116533

Change-Id: Ib171f9545c1651fb36c408decefa47b3d82ba3ab

src/com/android/settings/location/LocationMode.java
src/com/android/settings/location/LocationSettings.java
src/com/android/settings/location/LocationSettingsBase.java

index 70cee99..63ba6ea 100644 (file)
@@ -110,7 +110,7 @@ public class LocationMode extends LocationSettingsBase
     }
 
     @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 @@ public class LocationMode extends LocationSettingsBase
             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);
index 818ec2b..815be41 100644 (file)
@@ -28,7 +28,6 @@ import android.preference.Preference;
 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 @@ public class LocationSettings extends LocationSettingsBase
     }
 
     @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 @@ public class LocationSettings extends LocationSettingsBase
                 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()) {
index 5637b25..630e1e4 100644 (file)
@@ -71,11 +71,20 @@ public abstract class LocationSettingsBase extends SettingsPreferenceFragment {
     }
 
     /** Called when location mode has changed. */
-    public abstract void onModeChanged(int mode);
+    public abstract void onModeChanged(int mode, boolean restricted);
 
-    public void setLocationMode(int mode) {
+    private boolean isRestricted() {
         final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
-        if (um.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION)) {
+        return um.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION);
+    }
+
+    public void setLocationMode(int mode) {
+        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 abstract class LocationSettingsBase extends SettingsPreferenceFragment {
     public void refreshLocationMode() {
         int mode = Settings.Secure.getInt(getContentResolver(), Settings.Secure.LOCATION_MODE,
                 Settings.Secure.LOCATION_MODE_OFF);
-        onModeChanged(mode);
+        onModeChanged(mode, isRestricted());
     }
 }