diff --git a/src/com/android/settings/location/LocationMode.java b/src/com/android/settings/location/LocationMode.java index 70cee99e73a..63ba6ea6584 100644 --- a/src/com/android/settings/location/LocationMode.java +++ b/src/com/android/settings/location/LocationMode.java @@ -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); diff --git a/src/com/android/settings/location/LocationSettings.java b/src/com/android/settings/location/LocationSettings.java index 818ec2bf886..815be4158f5 100644 --- a/src/com/android/settings/location/LocationSettings.java +++ b/src/com/android/settings/location/LocationSettings.java @@ -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()) { diff --git a/src/com/android/settings/location/LocationSettingsBase.java b/src/com/android/settings/location/LocationSettingsBase.java index 5637b250695..630e1e438bd 100644 --- a/src/com/android/settings/location/LocationSettingsBase.java +++ b/src/com/android/settings/location/LocationSettingsBase.java @@ -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); + + 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 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()); } }