diff --git a/CHANGELOG.md b/CHANGELOG.md index aa16e1c6..d84f2ab6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [0.125.0-dev.1](https://github.com/ReVanced/revanced-integrations/compare/v0.124.1...v0.125.0-dev.1) (2023-11-29) + + +### Features + +* Modernize restart logic ([#527](https://github.com/ReVanced/revanced-integrations/issues/527)) ([0ea4e72](https://github.com/ReVanced/revanced-integrations/commit/0ea4e720edab250aac02b32a8014c24b1127d02f)) + ## [0.124.1](https://github.com/ReVanced/revanced-integrations/compare/v0.124.0...v0.124.1) (2023-11-27) diff --git a/app/src/main/java/app/revanced/integrations/settingsmenu/ImportExportPreference.java b/app/src/main/java/app/revanced/integrations/settingsmenu/ImportExportPreference.java index ff6397e8..d66c8ab1 100644 --- a/app/src/main/java/app/revanced/integrations/settingsmenu/ImportExportPreference.java +++ b/app/src/main/java/app/revanced/integrations/settingsmenu/ImportExportPreference.java @@ -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); diff --git a/app/src/main/java/app/revanced/integrations/settingsmenu/ReVancedSettingsFragment.java b/app/src/main/java/app/revanced/integrations/settingsmenu/ReVancedSettingsFragment.java index f90f98da..6a33a628 100644 --- a/app/src/main/java/app/revanced/integrations/settingsmenu/ReVancedSettingsFragment.java +++ b/app/src/main/java/app/revanced/integrations/settingsmenu/ReVancedSettingsFragment.java @@ -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) -> { diff --git a/app/src/main/java/app/revanced/shared/settings/SettingsUtils.java b/app/src/main/java/app/revanced/shared/settings/SettingsUtils.java new file mode 100644 index 00000000..be2a4366 --- /dev/null +++ b/app/src/main/java/app/revanced/shared/settings/SettingsUtils.java @@ -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); + } +} diff --git a/app/src/main/java/app/revanced/tiktok/settingsmenu/ReVancedPreferenceFragment.java b/app/src/main/java/app/revanced/tiktok/settingsmenu/ReVancedPreferenceFragment.java index 0fa735b3..68694e7a 100644 --- a/app/src/main/java/app/revanced/tiktok/settingsmenu/ReVancedPreferenceFragment.java +++ b/app/src/main/java/app/revanced/tiktok/settingsmenu/ReVancedPreferenceFragment.java @@ -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(); } } diff --git a/app/src/main/java/app/revanced/twitch/settingsmenu/ReVancedSettingsFragment.java b/app/src/main/java/app/revanced/twitch/settingsmenu/ReVancedSettingsFragment.java index ed76480b..6aea9696 100644 --- a/app/src/main/java/app/revanced/twitch/settingsmenu/ReVancedSettingsFragment.java +++ b/app/src/main/java/app/revanced/twitch/settingsmenu/ReVancedSettingsFragment.java @@ -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(); } } diff --git a/dummy/src/main/java/com/google/android/apps/youtube/app/application/Shell_HomeActivity.java b/dummy/src/main/java/com/google/android/apps/youtube/app/application/Shell_HomeActivity.java deleted file mode 100644 index 52be6225..00000000 --- a/dummy/src/main/java/com/google/android/apps/youtube/app/application/Shell_HomeActivity.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.google.android.apps.youtube.app.application; - -//dummy class -public class Shell_HomeActivity { -} diff --git a/dummy/src/main/java/com/ss/android/ugc/aweme/splash/SplashActivity.java b/dummy/src/main/java/com/ss/android/ugc/aweme/splash/SplashActivity.java deleted file mode 100644 index ec7038a6..00000000 --- a/dummy/src/main/java/com/ss/android/ugc/aweme/splash/SplashActivity.java +++ /dev/null @@ -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 { -} diff --git a/dummy/src/main/java/tv/twitch/android/app/core/LandingActivity.java b/dummy/src/main/java/tv/twitch/android/app/core/LandingActivity.java deleted file mode 100644 index 8411575f..00000000 --- a/dummy/src/main/java/tv/twitch/android/app/core/LandingActivity.java +++ /dev/null @@ -1,5 +0,0 @@ -package tv.twitch.android.app.core; - -import android.app.Activity; - -public class LandingActivity extends Activity {} diff --git a/gradle.properties b/gradle.properties index 639efd0f..5c51c974 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true android.useAndroidX = true -version = 0.124.1 +version = 0.125.0-dev.1