feat: Modernize restart logic (#527)

This commit is contained in:
LisoUseInAIKyrios 2023-11-29 22:48:23 +02:00 committed by GitHub
parent c6a1b9fc59
commit 0ea4e720ed
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 63 additions and 79 deletions

View File

@ -85,7 +85,7 @@ public class ImportExportPreference extends EditTextPreference implements Prefer
ReVancedSettingsFragment.settingImportInProgress = true;
final boolean rebootNeeded = SettingsEnum.importJSON(replacementSettings);
if (rebootNeeded) {
ReVancedSettingsFragment.showRebootDialog(getContext());
ReVancedSettingsFragment.showRestartDialog(getContext());
}
} catch (Exception ex) {
LogHelper.printException(() -> "importSettings failure", ex);

View File

@ -3,15 +3,10 @@ package app.revanced.integrations.settingsmenu;
import static app.revanced.integrations.utils.StringRef.str;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Process;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
@ -22,13 +17,12 @@ import android.preference.SwitchPreference;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.apps.youtube.app.application.Shell_HomeActivity;
import app.revanced.integrations.patches.playback.speed.CustomPlaybackSpeedPatch;
import app.revanced.integrations.settings.SettingsEnum;
import app.revanced.integrations.settings.SharedPrefCategory;
import app.revanced.integrations.utils.LogHelper;
import app.revanced.integrations.utils.ReVancedUtils;
import app.revanced.shared.settings.SettingsUtils;
public class ReVancedSettingsFragment extends PreferenceFragment {
/**
@ -37,23 +31,13 @@ public class ReVancedSettingsFragment extends PreferenceFragment {
*/
static boolean settingImportInProgress;
private static void reboot(@NonNull Context activity) {
final int intentFlags = PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE;
PendingIntent intent = PendingIntent.getActivity(activity, 0,
new Intent(activity, Shell_HomeActivity.class), intentFlags);
AlarmManager systemService = (AlarmManager) activity.getSystemService(Context.ALARM_SERVICE);
systemService.setExact(AlarmManager.ELAPSED_REALTIME, 1500L, intent);
Process.killProcess(Process.myPid());
}
static void showRebootDialog(@NonNull Context activity) {
static void showRestartDialog(@NonNull Context contxt) {
String positiveButton = str("in_app_update_restart_button");
String negativeButton = str("sign_in_cancel");
new AlertDialog.Builder(activity).setMessage(str("pref_refresh_config"))
new AlertDialog.Builder(contxt).setMessage(str("pref_refresh_config"))
.setPositiveButton(positiveButton, (dialog, id) -> {
reboot(activity);
SettingsUtils.restartApp(contxt);
})
.setNegativeButton(negativeButton, null)
.setNegativeButton(android.R.string.cancel, null)
.setCancelable(false)
.show();
}
@ -110,9 +94,9 @@ public class ReVancedSettingsFragment extends PreferenceFragment {
if (!showingUserDialogMessage) {
if (setting.userDialogMessage != null && ((SwitchPreference) pref).isChecked() != (Boolean) setting.defaultValue) {
showSettingUserDialogConfirmation(getActivity(), (SwitchPreference) pref, setting);
showSettingUserDialogConfirmation(getContext(), (SwitchPreference) pref, setting);
} else if (setting.rebootApp) {
showRebootDialog(getActivity());
showRestartDialog(getContext());
}
}
@ -188,14 +172,14 @@ public class ReVancedSettingsFragment extends PreferenceFragment {
}
}
private void showSettingUserDialogConfirmation(@NonNull Activity activity, SwitchPreference switchPref, SettingsEnum setting) {
private void showSettingUserDialogConfirmation(@NonNull Context context, SwitchPreference switchPref, SettingsEnum setting) {
showingUserDialogMessage = true;
new AlertDialog.Builder(activity)
new AlertDialog.Builder(context)
.setTitle(str("revanced_settings_confirm_user_dialog_title"))
.setMessage(setting.userDialogMessage.toString())
.setPositiveButton(android.R.string.ok, (dialog, id) -> {
if (setting.rebootApp) {
showRebootDialog(activity);
showRestartDialog(context);
}
})
.setNegativeButton(android.R.string.cancel, (dialog, id) -> {

View File

@ -0,0 +1,30 @@
package app.revanced.shared.settings;
import android.content.Context;
import android.content.Intent;
import androidx.annotation.NonNull;
/**
* Class is used across multiple target apps.
*
* This entire class can _not_ reference:
* {@link app.revanced.integrations.settings.SettingsEnum}
* {@link app.revanced.twitch.settings.SettingsEnum}
* {@link app.revanced.tiktok.settings.SettingsEnum}
*
* or any other code that references these app specific integration classes.
*/
public class SettingsUtils {
public static void restartApp(@NonNull Context context) {
String packageName = context.getPackageName();
Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
Intent mainIntent = Intent.makeRestartActivityTask(intent.getComponent());
// Required for API 34 and later
// Ref: https://developer.android.com/about/versions/14/behavior-changes-14#safer-intents
mainIntent.setPackage(packageName);
context.startActivity(mainIntent);
System.exit(0);
}
}

View File

@ -1,17 +1,22 @@
package app.revanced.tiktok.settingsmenu;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Process;
import android.preference.*;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
import android.preference.SwitchPreference;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import app.revanced.integrations.utils.LogHelper;
import app.revanced.shared.settings.SettingsUtils;
import app.revanced.tiktok.settings.SettingsEnum;
import app.revanced.tiktok.settings.SharedPrefCategory;
import app.revanced.tiktok.settingsmenu.preference.DownloadPathPreference;
@ -21,7 +26,6 @@ import app.revanced.tiktok.settingsmenu.preference.categories.FeedFilterPreferen
import app.revanced.tiktok.settingsmenu.preference.categories.IntegrationsPreferenceCategory;
import app.revanced.tiktok.settingsmenu.preference.categories.SimSpoofPreferenceCategory;
import app.revanced.tiktok.utils.ReVancedUtils;
import com.ss.android.ugc.aweme.splash.SplashActivity;
@SuppressWarnings("deprecation")
public class ReVancedPreferenceFragment extends PreferenceFragment {
@ -107,13 +111,9 @@ public class ReVancedPreferenceFragment extends PreferenceFragment {
super.onDestroy();
}
private void reboot(Activity activity) {
int intent = PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE;
((AlarmManager) activity.getSystemService(Context.ALARM_SERVICE)).setExact(AlarmManager.ELAPSED_REALTIME, 1500L, PendingIntent.getActivity(activity, 0, new Intent(activity, SplashActivity.class), intent));
Process.killProcess(Process.myPid());
}
private void rebootDialog(final Activity activity) {
new AlertDialog.Builder(activity).setMessage("Refresh and restart").setPositiveButton("Restart", (dialog, i) -> reboot(activity)).setNegativeButton("Cancel", null).show();
private void rebootDialog(@NonNull Context context) {
new AlertDialog.Builder(context).setMessage("Refresh and restart")
.setPositiveButton("Restart", (dialog, i) -> SettingsUtils.restartApp(context))
.setNegativeButton(android.R.string.cancel, null).show();
}
}

View File

@ -1,15 +1,10 @@
package app.revanced.twitch.settingsmenu;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Process;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
@ -17,12 +12,13 @@ import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.preference.SwitchPreference;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import app.revanced.shared.settings.SettingsUtils;
import app.revanced.twitch.settings.SettingsEnum;
import app.revanced.twitch.utils.LogHelper;
import app.revanced.twitch.utils.ReVancedUtils;
import tv.twitch.android.app.core.LandingActivity;
public class ReVancedSettingsFragment extends PreferenceFragment {
@ -62,7 +58,7 @@ public class ReVancedSettingsFragment extends PreferenceFragment {
}
if (ReVancedUtils.getContext() != null && key != null && settingsInitialized && setting.rebootApp) {
rebootDialog(getActivity());
showRestartDialog(getContext());
}
// First onChange event is caused by initial state loading
@ -122,19 +118,12 @@ public class ReVancedSettingsFragment extends PreferenceFragment {
super.onDestroy();
}
@SuppressLint("MissingPermission")
private void reboot(Activity activity) {
int flags;
flags = PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE;
((AlarmManager) activity.getSystemService(Context.ALARM_SERVICE)).setExact(AlarmManager.ELAPSED_REALTIME, 1500L, PendingIntent.getActivity(activity, 0, new Intent(activity, LandingActivity.class), flags));
Process.killProcess(Process.myPid());
}
private void rebootDialog(final Activity activity) {
new AlertDialog.Builder(activity).
private void showRestartDialog(@NonNull Context context) {
new AlertDialog.Builder(context).
setMessage(ReVancedUtils.getString("revanced_reboot_message")).
setPositiveButton(ReVancedUtils.getString("revanced_reboot"), (dialog, i) -> reboot(activity))
.setNegativeButton(ReVancedUtils.getString("revanced_cancel"), null)
setPositiveButton(ReVancedUtils.getString("revanced_reboot"),
(dialog, i) -> SettingsUtils.restartApp(context))
.setNegativeButton(android.R.string.cancel, null)
.show();
}
}

View File

@ -1,5 +0,0 @@
package com.google.android.apps.youtube.app.application;
//dummy class
public class Shell_HomeActivity {
}

View File

@ -1,9 +0,0 @@
package com.ss.android.ugc.aweme.splash;
import android.annotation.SuppressLint;
import android.app.Activity;
//Dummy class
@SuppressLint("CustomSplashScreen")
public class SplashActivity extends Activity {
}

View File

@ -1,5 +0,0 @@
package tv.twitch.android.app.core;
import android.app.Activity;
public class LandingActivity extends Activity {}