Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4fb17c1c authored by Lifu Tang's avatar Lifu Tang
Browse files

Disallows setting when user restriction applies

- Fix b/10116533

Change-Id: Ib171f9545c1651fb36c408decefa47b3d82ba3ab
parent 8df4caf1
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -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);
+3 −3
Original line number Diff line number Diff line
@@ -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()) {
+13 −4
Original line number Diff line number Diff line
@@ -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());
    }
}