diff --git a/app/src/main/java/app/revanced/integrations/shared/settings/preference/AbstractPreferenceFragment.java b/app/src/main/java/app/revanced/integrations/shared/settings/preference/AbstractPreferenceFragment.java index dc1fcbd9..34a348a3 100644 --- a/app/src/main/java/app/revanced/integrations/shared/settings/preference/AbstractPreferenceFragment.java +++ b/app/src/main/java/app/revanced/integrations/shared/settings/preference/AbstractPreferenceFragment.java @@ -152,47 +152,60 @@ public abstract class AbstractPreferenceFragment extends PreferenceFragment { } /** - * Updates a UI Preference with the {@link Setting} that backs it. + * Handles syncing a UI Preference with the {@link Setting} that backs it. * If needed, subclasses can override this to handle additional UI Preference types. * + * @param applySettingToPreference If true, then apply {@link Setting} -> Preference. + * If false, then apply {@link Setting} <- Preference. + */ + protected void syncSettingWithPreference(@NonNull Preference pref, + @NonNull Setting setting, + boolean applySettingToPreference) { + if (pref instanceof SwitchPreference) { + SwitchPreference switchPref = (SwitchPreference) pref; + BooleanSetting boolSetting = (BooleanSetting) setting; + if (applySettingToPreference) { + switchPref.setChecked(boolSetting.get()); + } else { + BooleanSetting.privateSetValue(boolSetting, switchPref.isChecked()); + } + } else if (pref instanceof EditTextPreference) { + EditTextPreference editPreference = (EditTextPreference) pref; + if (applySettingToPreference) { + editPreference.setText(setting.get().toString()); + } else { + Setting.privateSetValueFromString(setting, editPreference.getText()); + } + } else if (pref instanceof ListPreference) { + ListPreference listPref = (ListPreference) pref; + if (applySettingToPreference) { + listPref.setValue(setting.get().toString()); + } else { + Setting.privateSetValueFromString(setting, listPref.getValue()); + } + updateListPreferenceSummary(listPref, setting); + } else { + Logger.printException(() -> "Setting cannot be handled: " + pref.getClass() + ": " + pref); + } + } + + /** + * Updates a UI Preference with the {@link Setting} that backs it. + * * @param syncSetting If the UI should be synced {@link Setting} <-> Preference * @param applySettingToPreference If true, then apply {@link Setting} -> Preference. * If false, then apply {@link Setting} <- Preference. */ - protected void updatePreference(@NonNull Preference pref, @NonNull Setting setting, - boolean syncSetting, boolean applySettingToPreference) { + private void updatePreference(@NonNull Preference pref, @NonNull Setting setting, + boolean syncSetting, boolean applySettingToPreference) { if (!syncSetting && applySettingToPreference) { throw new IllegalArgumentException(); } + if (syncSetting) { - if (pref instanceof SwitchPreference) { - SwitchPreference switchPref = (SwitchPreference) pref; - BooleanSetting boolSetting = (BooleanSetting) setting; - if (applySettingToPreference) { - switchPref.setChecked(boolSetting.get()); - } else { - BooleanSetting.privateSetValue(boolSetting, switchPref.isChecked()); - } - } else if (pref instanceof EditTextPreference) { - EditTextPreference editPreference = (EditTextPreference) pref; - if (applySettingToPreference) { - editPreference.setText(setting.get().toString()); - } else { - Setting.privateSetValueFromString(setting, editPreference.getText()); - } - } else if (pref instanceof ListPreference) { - ListPreference listPref = (ListPreference) pref; - if (applySettingToPreference) { - listPref.setValue(setting.get().toString()); - } else { - Setting.privateSetValueFromString(setting, listPref.getValue()); - } - updateListPreferenceSummary(listPref, setting); - } else { - Logger.printException(() -> "Setting cannot be handled: " + pref.getClass() + ": " + pref); - return; - } + syncSettingWithPreference(pref, setting, applySettingToPreference); } + updatePreferenceAvailability(pref, setting); } diff --git a/app/src/main/java/app/revanced/integrations/tiktok/settings/preference/ReVancedPreferenceFragment.java b/app/src/main/java/app/revanced/integrations/tiktok/settings/preference/ReVancedPreferenceFragment.java index c90fb93b..66359350 100644 --- a/app/src/main/java/app/revanced/integrations/tiktok/settings/preference/ReVancedPreferenceFragment.java +++ b/app/src/main/java/app/revanced/integrations/tiktok/settings/preference/ReVancedPreferenceFragment.java @@ -1,11 +1,15 @@ package app.revanced.integrations.tiktok.settings.preference; +import android.preference.Preference; import android.preference.PreferenceScreen; +import androidx.annotation.NonNull; +import app.revanced.integrations.shared.settings.Setting; import app.revanced.integrations.shared.settings.preference.AbstractPreferenceFragment; import app.revanced.integrations.tiktok.settings.preference.categories.DownloadsPreferenceCategory; import app.revanced.integrations.tiktok.settings.preference.categories.FeedFilterPreferenceCategory; import app.revanced.integrations.tiktok.settings.preference.categories.IntegrationsPreferenceCategory; import app.revanced.integrations.tiktok.settings.preference.categories.SimSpoofPreferenceCategory; +import org.jetbrains.annotations.NotNull; /** * Preference fragment for ReVanced settings @@ -13,6 +17,21 @@ import app.revanced.integrations.tiktok.settings.preference.categories.SimSpoofP @SuppressWarnings("deprecation") public class ReVancedPreferenceFragment extends AbstractPreferenceFragment { + @Override + protected void syncSettingWithPreference(@NonNull @NotNull Preference pref, + @NonNull @NotNull Setting setting, + boolean applySettingToPreference) { + if (pref instanceof RangeValuePreference) { + RangeValuePreference rangeValuePref = (RangeValuePreference) pref; + Setting.privateSetValueFromString(setting, rangeValuePref.getValue()); + } else if (pref instanceof DownloadPathPreference) { + DownloadPathPreference downloadPathPref = (DownloadPathPreference) pref; + Setting.privateSetValueFromString(setting, downloadPathPref.getValue()); + } else { + super.syncSettingWithPreference(pref, setting, applySettingToPreference); + } + } + @Override protected void initialize() { final var context = getContext();