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

Commit 6593453d authored by Matthew Fritze's avatar Matthew Fritze Committed by Andrew Sapperstein
Browse files

Expose Location toggling logic

Specifically refactor the check for secondary user and the
method to toggle location mode using the previously set
location mode.

Test: robotests
Bug: 62022517
Change-Id: I519fad6d802efd8af2e77c623f698e19d4cdc800
parent 688e5438
Loading
Loading
Loading
Loading
+16 −9
Original line number Diff line number Diff line
@@ -85,13 +85,23 @@ public abstract class LocationSettingsBase extends SettingsPreferenceFragment {
    /** Called when location mode has changed. */
    public abstract void onModeChanged(int mode, boolean restricted);

    private boolean isRestricted() {
        final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
    public static boolean isRestricted(Context context) {
        final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
        return um.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION);
    }

    public static boolean updateLocationMode(Context context, int oldMode, int newMode) {
        Intent intent = new Intent(MODE_CHANGING_ACTION);
        intent.putExtra(CURRENT_MODE_KEY, oldMode);
        intent.putExtra(NEW_MODE_KEY, newMode);
        context.sendBroadcast(intent, android.Manifest.permission.WRITE_SECURE_SETTINGS);
        return Settings.Secure.putInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE,
                newMode);
    }

    public void setLocationMode(int mode) {
        if (isRestricted()) {
        Context context = getActivity();
        if (isRestricted(context)) {
            // Location toggling disabled by user restriction. Read the current location mode to
            // update the location master switch.
            if (Log.isLoggable(TAG, Log.INFO)) {
@@ -104,11 +114,8 @@ public abstract class LocationSettingsBase extends SettingsPreferenceFragment {
            }
            return;
        }
        Intent intent = new Intent(MODE_CHANGING_ACTION);
        intent.putExtra(CURRENT_MODE_KEY, mCurrentMode);
        intent.putExtra(NEW_MODE_KEY, mode);
        getActivity().sendBroadcast(intent, android.Manifest.permission.WRITE_SECURE_SETTINGS);
        Settings.Secure.putInt(getContentResolver(), Settings.Secure.LOCATION_MODE, mode);

        updateLocationMode(context, mCurrentMode, mode);
        refreshLocationMode();
    }

@@ -120,7 +127,7 @@ public abstract class LocationSettingsBase extends SettingsPreferenceFragment {
            if (Log.isLoggable(TAG, Log.INFO)) {
                Log.i(TAG, "Location mode has been changed");
            }
            onModeChanged(mode, isRestricted());
            onModeChanged(mode, isRestricted(getActivity()));
        }
    }
}
+9 −2
Original line number Diff line number Diff line
@@ -70,7 +70,8 @@ public class ResultPayload implements Parcelable {
            Availability.DISABLED_DEPENDENT_APP,
            Availability.DISABLED_UNSUPPORTED,
            Availability.RESOURCE_CONTENTION,
            Availability.INTENT_ONLY,})
            Availability.INTENT_ONLY,
            Availability.DISABLED_FOR_USER,})
    @Retention(RetentionPolicy.SOURCE)
    public @interface Availability {
        /**
@@ -96,7 +97,7 @@ public class ResultPayload implements Parcelable {
        int RESOURCE_CONTENTION = 3;

        /**
         * The setting is disabled because corresponding app is disabled
         * The setting is disabled because corresponding app is disabled.
         */
        int DISABLED_DEPENDENT_APP = 4;

@@ -104,6 +105,12 @@ public class ResultPayload implements Parcelable {
         * This setting is supported on the device but cannot be changed inline.
         */
        int INTENT_ONLY = 5;

        /**
         * The setting cannot be changed by the current user.
         * ex: MobileNetworkTakeMeThereSetting should not be available to a secondary user.
         */
        int DISABLED_FOR_USER = 6;
    }

    @IntDef({SettingsSource.UNKNOWN, SettingsSource.SYSTEM, SettingsSource.SECURE,