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

Unverified Commit 72e0493f authored by Manu Suresh's avatar Manu Suresh
Browse files

FP6: parts: update RemotePreference summary during preference change within our fragment

parent 6c17bbe3
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -21,7 +21,9 @@ public class SliderSwitchOptionReceiver extends RemotePreferenceUpdater {
    @Override
    public String getSummary(Context context, String key) {
        if (SliderUtils.HARDWARE_SWITCH_CATEGORY_KEY.equals(key)) {
            return SliderUtils.getCurrentOption(context);
            String currentOption = SliderUtils.getCurrentOption(context);
            Integer currentOptionResourceIndex = SliderUtils.getFeatureTitleRes(currentOption);
            return context.getString(currentOptionResourceIndex);
        }
        return null;
    }
+31 −9
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ package org.lineageos.settings.switchcust;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import androidx.annotation.NonNull;
import androidx.preference.PreferenceManager;

import org.lineageos.settings.R;
@@ -25,17 +26,39 @@ public class SliderUtils {

    public static int getFeatureLabelRes(String key) {
        switch (key) {
            case SliderUtils.KEY_SENSOR_PRIVACY:     return R.string.sensor_access;
            case SliderUtils.KEY_FAIRPHONE_MOMENTS:  return R.string.fairphone_moments;
            case SliderUtils.KEY_DO_NOT_DISTURB:     return R.string.do_not_disturb;
            case SliderUtils.KEY_FLIGHT_MODE:        return R.string.flight_mode;
            case SliderUtils.KEY_TORCH_LIGHT:        return R.string.torch;
            case SliderUtils.KEY_DARK_LIGHT_MODE:    return R.string.dark_mode;
            case SliderUtils.KEY_BATTERY_SAVER:      return R.string.battery_saver;
            case KEY_SENSOR_PRIVACY:     return R.string.sensor_access;
            case KEY_FAIRPHONE_MOMENTS:  return R.string.fairphone_moments;
            case KEY_DO_NOT_DISTURB:     return R.string.do_not_disturb;
            case KEY_FLIGHT_MODE:        return R.string.flight_mode;
            case KEY_TORCH_LIGHT:        return R.string.torch;
            case KEY_DARK_LIGHT_MODE:    return R.string.dark_mode;
            case KEY_BATTERY_SAVER:      return R.string.battery_saver;
            default:                     return android.R.string.untitled;
        }
    }

    public static int getFeatureTitleRes(String key) {
        switch (key) {
            case KEY_SENSOR_PRIVACY:     return R.string.sensor_privacy_title;
            case KEY_FAIRPHONE_MOMENTS:  return R.string.fairphone_moments_title;
            case KEY_DO_NOT_DISTURB:     return R.string.do_not_disturb_title;
            case KEY_FLIGHT_MODE:        return R.string.flight_mode_title;
            case KEY_TORCH_LIGHT:        return R.string.torch_light_title;
            case KEY_DARK_LIGHT_MODE:    return R.string.dark_light_mode_title;
            case KEY_BATTERY_SAVER:      return R.string.battery_saver_title;
            default:                     return android.R.string.untitled;
        }
    }
    public static boolean isSelectableKey(@NonNull String key) {
        return KEY_SENSOR_PRIVACY.equals(key)
                || KEY_FAIRPHONE_MOMENTS.equals(key)
                || KEY_DO_NOT_DISTURB.equals(key)
                || KEY_FLIGHT_MODE.equals(key)
                || KEY_TORCH_LIGHT.equals(key)
                || KEY_DARK_LIGHT_MODE.equals(key)
                || KEY_BATTERY_SAVER.equals(key);
    }

    public static boolean getCurrentFallbackState(Intent intent) {
        boolean fallbackState = false;
        if (intent != null && intent.hasExtra(SliderSwitchStateReceiver.EXTRA_SLIDER_STATE)) {
@@ -47,8 +70,7 @@ public class SliderUtils {

    public static String getCurrentOption(Context context) {
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
        String currentOption = prefs.getString(PREF_SWITCH_FUNCTION, KEY_SENSOR_PRIVACY);
        return context.getString(SliderUtils.getFeatureLabelRes(currentOption));
        return prefs.getString(PREF_SWITCH_FUNCTION, KEY_SENSOR_PRIVACY);
    }

    public static void notifyChanged(Context context) {
+29 −59
Original line number Diff line number Diff line
@@ -13,22 +13,13 @@ import android.content.Context;
import android.content.SharedPreferences;

import org.lineageos.settings.R;
import org.lineageos.settings.switchcust.SliderUtils;

public class SwitchSettingsFragment extends PreferenceFragmentCompat implements
        SharedPreferences.OnSharedPreferenceChangeListener {

    private static final String TAG = "SwitchFragment";

    private static final String KEY_SENSOR_PRIVACY   = "sensor_privacy";
    private static final String KEY_FAIRPHONE_MOMENTS = "fairphone_moments";
    private static final String KEY_DO_NOT_DISTURB   = "do_not_disturb";
    private static final String KEY_FLIGHT_MODE      = "flight_mode";
    private static final String KEY_TORCH_LIGHT      = "torch_light";
    private static final String KEY_DARK_LIGHT_MODE  = "dark_light_mode";
    private static final String KEY_BATTERY_SAVER    = "battery_saver";

    private static final String PREF_SWITCH_FUNCTION = "switch_function";

    private CheckBoxPreference mSensorPrivacyPref;
    private CheckBoxPreference mFpMomentsPref;
    private CheckBoxPreference mDoNotDisturbPref;
@@ -37,7 +28,7 @@ public class SwitchSettingsFragment extends PreferenceFragmentCompat implements
    private CheckBoxPreference mDarkLightModePref;
    private CheckBoxPreference mBatterySaverPref;

    private String mCurrentSelection = KEY_SENSOR_PRIVACY;
    private String mCurrentSelection = SliderUtils.KEY_SENSOR_PRIVACY;

    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
@@ -46,24 +37,24 @@ public class SwitchSettingsFragment extends PreferenceFragmentCompat implements
        final Context context = requireContext();
        final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

        mSensorPrivacyPref  = findPreference(KEY_SENSOR_PRIVACY);
        mFpMomentsPref  = findPreference(KEY_FAIRPHONE_MOMENTS);
        mDoNotDisturbPref   = findPreference(KEY_DO_NOT_DISTURB);
        mFlightModePref     = findPreference(KEY_FLIGHT_MODE);
        mTorchLightPref     = findPreference(KEY_TORCH_LIGHT);
        mDarkLightModePref  = findPreference(KEY_DARK_LIGHT_MODE);
        mBatterySaverPref   = findPreference(KEY_BATTERY_SAVER);

        final String persisted = prefs.getString(PREF_SWITCH_FUNCTION, KEY_SENSOR_PRIVACY);
        mCurrentSelection = isSelectableKey(persisted) ? persisted : KEY_SENSOR_PRIVACY;

        setUpRadioBehavior(mSensorPrivacyPref,  KEY_SENSOR_PRIVACY);
        setUpRadioBehavior(mFpMomentsPref,      KEY_FAIRPHONE_MOMENTS);
        setUpRadioBehavior(mDoNotDisturbPref,   KEY_DO_NOT_DISTURB);
        setUpRadioBehavior(mFlightModePref,     KEY_FLIGHT_MODE);
        setUpRadioBehavior(mTorchLightPref,     KEY_TORCH_LIGHT);
        setUpRadioBehavior(mDarkLightModePref,  KEY_DARK_LIGHT_MODE);
        setUpRadioBehavior(mBatterySaverPref,   KEY_BATTERY_SAVER);
        mSensorPrivacyPref = findPreference(SliderUtils.KEY_SENSOR_PRIVACY);
        mFpMomentsPref     = findPreference(SliderUtils.KEY_FAIRPHONE_MOMENTS);
        mDoNotDisturbPref  = findPreference(SliderUtils.KEY_DO_NOT_DISTURB);
        mFlightModePref    = findPreference(SliderUtils.KEY_FLIGHT_MODE);
        mTorchLightPref    = findPreference(SliderUtils.KEY_TORCH_LIGHT);
        mDarkLightModePref = findPreference(SliderUtils.KEY_DARK_LIGHT_MODE);
        mBatterySaverPref  = findPreference(SliderUtils.KEY_BATTERY_SAVER);

        final String persisted = prefs.getString(SliderUtils.PREF_SWITCH_FUNCTION, SliderUtils.KEY_SENSOR_PRIVACY);
        mCurrentSelection = SliderUtils.isSelectableKey(persisted) ? persisted : SliderUtils.KEY_SENSOR_PRIVACY;

        setUpRadioBehavior(mSensorPrivacyPref, SliderUtils.KEY_SENSOR_PRIVACY);
        setUpRadioBehavior(mFpMomentsPref,     SliderUtils.KEY_FAIRPHONE_MOMENTS);
        setUpRadioBehavior(mDoNotDisturbPref,  SliderUtils.KEY_DO_NOT_DISTURB);
        setUpRadioBehavior(mFlightModePref,    SliderUtils.KEY_FLIGHT_MODE);
        setUpRadioBehavior(mTorchLightPref,    SliderUtils.KEY_TORCH_LIGHT);
        setUpRadioBehavior(mDarkLightModePref, SliderUtils.KEY_DARK_LIGHT_MODE);
        setUpRadioBehavior(mBatterySaverPref,  SliderUtils.KEY_BATTERY_SAVER);

        updateCheckboxStates();
    }
@@ -106,11 +97,12 @@ public class SwitchSettingsFragment extends PreferenceFragmentCompat implements

                PreferenceManager.getDefaultSharedPreferences(requireContext())
                        .edit()
                        .putString(PREF_SWITCH_FUNCTION, key)
                        .putString(SliderUtils.PREF_SWITCH_FUNCTION, key)
                        .apply();

                updateCheckboxStates();
                handleSwitchFunctionChange(key);
                SliderUtils.notifyChanged(requireContext());
            } else if (key.equals(mCurrentSelection)) {
                // Prevent unchecking the currently selected option
                if (preference instanceof CheckBoxPreference) {
@@ -123,13 +115,13 @@ public class SwitchSettingsFragment extends PreferenceFragmentCompat implements
    }

    private void updateCheckboxStates() {
        setCheckedIfNotNull(mSensorPrivacyPref, KEY_SENSOR_PRIVACY.equals(mCurrentSelection));
        setCheckedIfNotNull(mFpMomentsPref,     KEY_FAIRPHONE_MOMENTS.equals(mCurrentSelection));
        setCheckedIfNotNull(mDoNotDisturbPref,  KEY_DO_NOT_DISTURB.equals(mCurrentSelection));
        setCheckedIfNotNull(mFlightModePref,    KEY_FLIGHT_MODE.equals(mCurrentSelection));
        setCheckedIfNotNull(mTorchLightPref,    KEY_TORCH_LIGHT.equals(mCurrentSelection));
        setCheckedIfNotNull(mDarkLightModePref, KEY_DARK_LIGHT_MODE.equals(mCurrentSelection));
        setCheckedIfNotNull(mBatterySaverPref,  KEY_BATTERY_SAVER.equals(mCurrentSelection));
        setCheckedIfNotNull(mSensorPrivacyPref, SliderUtils.KEY_SENSOR_PRIVACY.equals(mCurrentSelection));
        setCheckedIfNotNull(mFpMomentsPref,     SliderUtils.KEY_FAIRPHONE_MOMENTS.equals(mCurrentSelection));
        setCheckedIfNotNull(mDoNotDisturbPref,  SliderUtils.KEY_DO_NOT_DISTURB.equals(mCurrentSelection));
        setCheckedIfNotNull(mFlightModePref,    SliderUtils.KEY_FLIGHT_MODE.equals(mCurrentSelection));
        setCheckedIfNotNull(mTorchLightPref,    SliderUtils.KEY_TORCH_LIGHT.equals(mCurrentSelection));
        setCheckedIfNotNull(mDarkLightModePref, SliderUtils.KEY_DARK_LIGHT_MODE.equals(mCurrentSelection));
        setCheckedIfNotNull(mBatterySaverPref,  SliderUtils.KEY_BATTERY_SAVER.equals(mCurrentSelection));
    }

    private void setCheckedIfNotNull(CheckBoxPreference pref, boolean checked) {
@@ -142,26 +134,4 @@ public class SwitchSettingsFragment extends PreferenceFragmentCompat implements
        // Future: trigger actual system actions here
    }

    private String getFunctionDisplayName(String function) {
        switch (function) {
            case KEY_SENSOR_PRIVACY:   return "Sensor Privacy";
            case KEY_FAIRPHONE_MOMENTS: return "Fairphone Moments";
            case KEY_DO_NOT_DISTURB:   return "Do Not Disturb";
            case KEY_FLIGHT_MODE:      return "Flight Mode";
            case KEY_TORCH_LIGHT:      return "Torch Light";
            case KEY_DARK_LIGHT_MODE:  return "Dark & Light Mode";
            case KEY_BATTERY_SAVER:    return "Battery Saver";
            default:                   return "Unknown";
        }
    }

    private boolean isSelectableKey(@NonNull String key) {
        return KEY_SENSOR_PRIVACY.equals(key)
                || KEY_FAIRPHONE_MOMENTS.equals(key)
                || KEY_DO_NOT_DISTURB.equals(key)
                || KEY_FLIGHT_MODE.equals(key)
                || KEY_TORCH_LIGHT.equals(key)
                || KEY_DARK_LIGHT_MODE.equals(key)
                || KEY_BATTERY_SAVER.equals(key);
    }
}