fix(YouTube - Change form factor): No user dialog shown when changing settings

This commit is contained in:
inotia00 2025-03-28 19:36:39 +09:00
parent bf9ba0b1ef
commit f0b1155d20

View File

@ -65,6 +65,7 @@ import app.revanced.extension.shared.settings.EnumSetting;
import app.revanced.extension.shared.settings.Setting; import app.revanced.extension.shared.settings.Setting;
import app.revanced.extension.shared.utils.Logger; import app.revanced.extension.shared.utils.Logger;
import app.revanced.extension.shared.utils.ResourceUtils; import app.revanced.extension.shared.utils.ResourceUtils;
import app.revanced.extension.shared.utils.StringRef;
import app.revanced.extension.shared.utils.Utils; import app.revanced.extension.shared.utils.Utils;
import app.revanced.extension.youtube.patches.video.CustomPlaybackSpeedPatch; import app.revanced.extension.youtube.patches.video.CustomPlaybackSpeedPatch;
import app.revanced.extension.youtube.settings.Settings; import app.revanced.extension.youtube.settings.Settings;
@ -141,11 +142,8 @@ public class ReVancedPreferenceFragment extends PreferenceFragment {
if (!settingImportInProgress && !showingUserDialogMessage) { if (!settingImportInProgress && !showingUserDialogMessage) {
final Context context = getActivity(); final Context context = getActivity();
if (setting.userDialogMessage != null && if (setting.userDialogMessage != null && !prefIsSetToDefault(mPreference, setting)) {
mPreference instanceof SwitchPreference switchPreference && showSettingUserDialogConfirmation(context, mPreference, setting);
setting.defaultValue instanceof Boolean defaultValue &&
switchPreference.isChecked() != defaultValue) {
showSettingUserDialogConfirmation(context, switchPreference, (BooleanSetting) setting);
} else if (setting.rebootApp) { } else if (setting.rebootApp) {
showRestartDialog(context); showRestartDialog(context);
} }
@ -155,26 +153,57 @@ public class ReVancedPreferenceFragment extends PreferenceFragment {
} }
}; };
private void showSettingUserDialogConfirmation(Context context, SwitchPreference switchPreference, BooleanSetting setting) { /**
* @return If the preference is currently set to the default value of the Setting.
*/
private boolean prefIsSetToDefault(Preference pref, Setting<?> setting) {
Object defaultValue = setting.defaultValue;
if (pref instanceof SwitchPreference switchPref) {
return switchPref.isChecked() == (Boolean) defaultValue;
}
String defaultValueString = defaultValue.toString();
if (pref instanceof EditTextPreference editPreference) {
return editPreference.getText().equals(defaultValueString);
}
if (pref instanceof ListPreference listPref) {
return listPref.getValue().equals(defaultValueString);
}
throw new IllegalStateException("Must override method to handle "
+ "preference type: " + pref.getClass());
}
private void showSettingUserDialogConfirmation(Context context, Preference pref, Setting<?> setting) {
Utils.verifyOnMainThread(); Utils.verifyOnMainThread();
final StringRef userDialogMessage = setting.userDialogMessage;
if (context != null && userDialogMessage != null) {
showingUserDialogMessage = true; showingUserDialogMessage = true;
assert setting.userDialogMessage != null;
new AlertDialog.Builder(context) new AlertDialog.Builder(context)
.setTitle(str("revanced_extended_confirm_user_dialog_title")) .setTitle(str("revanced_extended_confirm_user_dialog_title"))
.setMessage(setting.userDialogMessage.toString()) .setMessage(userDialogMessage.toString())
.setPositiveButton(android.R.string.ok, (dialog, id) -> { .setPositiveButton(android.R.string.ok, (dialog, id) -> {
if (setting.rebootApp) { if (setting.rebootApp) {
showRestartDialog(context); showRestartDialog(context);
} }
}) })
.setNegativeButton(android.R.string.cancel, (dialog, id) -> { .setNegativeButton(android.R.string.cancel, (dialog, id) -> {
switchPreference.setChecked(setting.defaultValue); // Recursive call that resets the Setting value. // Restore whatever the setting was before the change.
if (setting instanceof BooleanSetting booleanSetting &&
pref instanceof SwitchPreference switchPreference) {
switchPreference.setChecked(booleanSetting.defaultValue);
} else if (setting instanceof EnumSetting<?> enumSetting &&
pref instanceof ListPreference listPreference) {
listPreference.setValue(enumSetting.defaultValue.toString());
updateListPreferenceSummary(listPreference, setting);
}
}) })
.setOnDismissListener(dialog -> showingUserDialogMessage = false) .setOnDismissListener(dialog -> showingUserDialogMessage = false)
.setCancelable(false) .setCancelable(false)
.show(); .show();
} }
}
static PreferenceManager mPreferenceManager; static PreferenceManager mPreferenceManager;
private SharedPreferences mSharedPreferences; private SharedPreferences mSharedPreferences;