mirror of
https://github.com/revanced/revanced-patches.git
synced 2025-04-30 06:34:28 +02:00
fix(YouTube): Do not show restart prompt more than once if setting change is canceled
This commit is contained in:
parent
fabe37cb91
commit
49797fe8d0
@ -22,12 +22,23 @@ import app.revanced.extension.shared.settings.Setting;
|
|||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public abstract class AbstractPreferenceFragment extends PreferenceFragment {
|
public abstract class AbstractPreferenceFragment extends PreferenceFragment {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates that if a preference changes,
|
* Indicates that if a preference changes,
|
||||||
* to apply the change from the Setting to the UI component.
|
* to apply the change from the Setting to the UI component.
|
||||||
*/
|
*/
|
||||||
public static boolean settingImportInProgress;
|
public static boolean settingImportInProgress;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prevents recursive calls during preference <-> UI syncing from showing extra dialogs.
|
||||||
|
*/
|
||||||
|
private static boolean updatingPreference;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to prevent showing reboot dialog, if user cancels a setting user dialog.
|
||||||
|
*/
|
||||||
|
private static boolean showingUserDialogMessage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Confirm and restart dialog button text and title.
|
* Confirm and restart dialog button text and title.
|
||||||
* Set by subclasses if Strings cannot be added as a resource.
|
* Set by subclasses if Strings cannot be added as a resource.
|
||||||
@ -35,13 +46,13 @@ public abstract class AbstractPreferenceFragment extends PreferenceFragment {
|
|||||||
@Nullable
|
@Nullable
|
||||||
protected static String restartDialogButtonText, restartDialogTitle, confirmDialogTitle;
|
protected static String restartDialogButtonText, restartDialogTitle, confirmDialogTitle;
|
||||||
|
|
||||||
/**
|
|
||||||
* Used to prevent showing reboot dialog, if user cancels a setting user dialog.
|
|
||||||
*/
|
|
||||||
private boolean showingUserDialogMessage;
|
|
||||||
|
|
||||||
private final SharedPreferences.OnSharedPreferenceChangeListener listener = (sharedPreferences, str) -> {
|
private final SharedPreferences.OnSharedPreferenceChangeListener listener = (sharedPreferences, str) -> {
|
||||||
try {
|
try {
|
||||||
|
if (updatingPreference) {
|
||||||
|
Logger.printDebug(() -> "Ignoring preference change as sync is in progress");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Setting<?> setting = Setting.getSettingFromPath(Objects.requireNonNull(str));
|
Setting<?> setting = Setting.getSettingFromPath(Objects.requireNonNull(str));
|
||||||
if (setting == null) {
|
if (setting == null) {
|
||||||
return;
|
return;
|
||||||
@ -63,10 +74,13 @@ public abstract class AbstractPreferenceFragment extends PreferenceFragment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updatingPreference = true;
|
||||||
// Apply 'Setting <- Preference', unless during importing when it needs to be 'Setting -> Preference'.
|
// Apply 'Setting <- Preference', unless during importing when it needs to be 'Setting -> Preference'.
|
||||||
|
// Updating here can can cause a recursive call back into this same method.
|
||||||
updatePreference(pref, setting, true, settingImportInProgress);
|
updatePreference(pref, setting, true, settingImportInProgress);
|
||||||
// Update any other preference availability that may now be different.
|
// Update any other preference availability that may now be different.
|
||||||
updateUIAvailability();
|
updateUIAvailability();
|
||||||
|
updatingPreference = false;
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.printException(() -> "OnSharedPreferenceChangeListener failure", ex);
|
Logger.printException(() -> "OnSharedPreferenceChangeListener failure", ex);
|
||||||
}
|
}
|
||||||
@ -97,7 +111,9 @@ public abstract class AbstractPreferenceFragment extends PreferenceFragment {
|
|||||||
if (confirmDialogTitle == null) {
|
if (confirmDialogTitle == null) {
|
||||||
confirmDialogTitle = str("revanced_settings_confirm_user_dialog_title");
|
confirmDialogTitle = str("revanced_settings_confirm_user_dialog_title");
|
||||||
}
|
}
|
||||||
|
|
||||||
showingUserDialogMessage = true;
|
showingUserDialogMessage = true;
|
||||||
|
|
||||||
new AlertDialog.Builder(context)
|
new AlertDialog.Builder(context)
|
||||||
.setTitle(confirmDialogTitle)
|
.setTitle(confirmDialogTitle)
|
||||||
.setMessage(Objects.requireNonNull(setting.userDialogMessage).toString())
|
.setMessage(Objects.requireNonNull(setting.userDialogMessage).toString())
|
||||||
@ -141,14 +157,16 @@ public abstract class AbstractPreferenceFragment extends PreferenceFragment {
|
|||||||
* @return If the preference is currently set to the default value of the Setting.
|
* @return If the preference is currently set to the default value of the Setting.
|
||||||
*/
|
*/
|
||||||
protected boolean prefIsSetToDefault(Preference pref, Setting<?> setting) {
|
protected boolean prefIsSetToDefault(Preference pref, Setting<?> setting) {
|
||||||
|
Object defaultValue = setting.defaultValue;
|
||||||
if (pref instanceof SwitchPreference switchPref) {
|
if (pref instanceof SwitchPreference switchPref) {
|
||||||
return switchPref.isChecked() == (Boolean) setting.defaultValue;
|
return switchPref.isChecked() == (Boolean) defaultValue;
|
||||||
}
|
}
|
||||||
|
String defaultValueString = defaultValue.toString();
|
||||||
if (pref instanceof EditTextPreference editPreference) {
|
if (pref instanceof EditTextPreference editPreference) {
|
||||||
return editPreference.getText().equals(setting.defaultValue.toString());
|
return editPreference.getText().equals(defaultValueString);
|
||||||
}
|
}
|
||||||
if (pref instanceof ListPreference listPref) {
|
if (pref instanceof ListPreference listPref) {
|
||||||
return listPref.getValue().equals(setting.defaultValue.toString());
|
return listPref.getValue().equals(defaultValueString);
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new IllegalStateException("Must override method to handle "
|
throw new IllegalStateException("Must override method to handle "
|
||||||
@ -255,7 +273,7 @@ public abstract class AbstractPreferenceFragment extends PreferenceFragment {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void showRestartDialog(@NonNull final Context context) {
|
public static void showRestartDialog(Context context) {
|
||||||
Utils.verifyOnMainThread();
|
Utils.verifyOnMainThread();
|
||||||
if (restartDialogTitle == null) {
|
if (restartDialogTitle == null) {
|
||||||
restartDialogTitle = str("revanced_settings_restart_title");
|
restartDialogTitle = str("revanced_settings_restart_title");
|
||||||
@ -263,6 +281,7 @@ public abstract class AbstractPreferenceFragment extends PreferenceFragment {
|
|||||||
if (restartDialogButtonText == null) {
|
if (restartDialogButtonText == null) {
|
||||||
restartDialogButtonText = str("revanced_settings_restart");
|
restartDialogButtonText = str("revanced_settings_restart");
|
||||||
}
|
}
|
||||||
|
|
||||||
new AlertDialog.Builder(context)
|
new AlertDialog.Builder(context)
|
||||||
.setMessage(restartDialogTitle)
|
.setMessage(restartDialogTitle)
|
||||||
.setPositiveButton(restartDialogButtonText, (dialog, id)
|
.setPositiveButton(restartDialogButtonText, (dialog, id)
|
||||||
|
@ -73,6 +73,7 @@ public class SpoofStreamingDataSideEffectsPreference extends Preference {
|
|||||||
if (currentClientType == clientType) {
|
if (currentClientType == clientType) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
currentClientType = clientType;
|
||||||
|
|
||||||
Logger.printDebug(() -> "Updating spoof stream side effects preference");
|
Logger.printDebug(() -> "Updating spoof stream side effects preference");
|
||||||
setEnabled(BaseSettings.SPOOF_VIDEO_STREAMS.get());
|
setEnabled(BaseSettings.SPOOF_VIDEO_STREAMS.get());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user