From 2fb8e31cfdb621e7c329e3df7a49c48f156369a7 Mon Sep 17 00:00:00 2001 From: oxmc <67136658+oxmc@users.noreply.github.com> Date: Wed, 15 Jul 2026 21:37:54 -0700 Subject: [PATCH] updater: boot the installed slot via a configurable reboot reason Replace the config_use_tryboot boolean with a config_abRebootReason string passed straight to PowerManager.reboot() (empty = normal reboot). RPi overrides it to "2" so the candidate slot boots via a one-shot reboot,2 (partition 2 = boot_b); tryboot is now reserved for recovery entry. No behavior change on devices that leave the reason empty. --- .../main/java/me/pawlet/updater/UpdaterReceiver.java | 2 +- .../java/me/pawlet/updater/UpdatesListAdapter.java | 2 +- app/src/main/java/me/pawlet/updater/misc/Utils.java | 11 +++++++++-- app/src/main/res/values/config.xml | 6 +++++- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/me/pawlet/updater/UpdaterReceiver.java b/app/src/main/java/me/pawlet/updater/UpdaterReceiver.java index fdd154d..dc04de7 100644 --- a/app/src/main/java/me/pawlet/updater/UpdaterReceiver.java +++ b/app/src/main/java/me/pawlet/updater/UpdaterReceiver.java @@ -78,7 +78,7 @@ public class UpdaterReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { if (ACTION_INSTALL_REBOOT.equals(intent.getAction())) { PowerManager pm = context.getSystemService(PowerManager.class); - pm.reboot(Utils.usesTryboot(context) ? "tryboot" : null); + pm.reboot(Utils.getAbRebootReason(context)); } else if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context); pref.edit().remove(Constants.PREF_NEEDS_REBOOT_ID).apply(); diff --git a/app/src/main/java/me/pawlet/updater/UpdatesListAdapter.java b/app/src/main/java/me/pawlet/updater/UpdatesListAdapter.java index 81e5250..63b85e0 100644 --- a/app/src/main/java/me/pawlet/updater/UpdatesListAdapter.java +++ b/app/src/main/java/me/pawlet/updater/UpdatesListAdapter.java @@ -412,7 +412,7 @@ public class UpdatesListAdapter extends RecyclerView.Adapter { PowerManager pm = mActivity.getSystemService(PowerManager.class); - pm.reboot(Utils.usesTryboot(mActivity) ? "tryboot" : null); + pm.reboot(Utils.getAbRebootReason(mActivity)); } : null; } break; diff --git a/app/src/main/java/me/pawlet/updater/misc/Utils.java b/app/src/main/java/me/pawlet/updater/misc/Utils.java index 624b8db..6a8ca46 100644 --- a/app/src/main/java/me/pawlet/updater/misc/Utils.java +++ b/app/src/main/java/me/pawlet/updater/misc/Utils.java @@ -420,7 +420,14 @@ public class Utils { return new File(Constants.UPDATE_RECOVERY_EXEC).exists(); } - public static boolean usesTryboot(Context context) { - return context.getResources().getBoolean(R.bool.config_use_tryboot); + /** + * Reason to pass to {@link android.os.PowerManager#reboot} when booting the + * freshly-installed slot, or {@code null} for a normal reboot. Devices whose + * firmware needs an explicit slot boot set config_abRebootReason (e.g. RPi + * uses "2" to one-shot boot partition 2 = boot_b). + */ + public static String getAbRebootReason(Context context) { + String reason = context.getResources().getString(R.string.config_abRebootReason); + return (reason == null || reason.isEmpty()) ? null : reason; } } diff --git a/app/src/main/res/values/config.xml b/app/src/main/res/values/config.xml index 81eec38..7a0a0a4 100644 --- a/app/src/main/res/values/config.xml +++ b/app/src/main/res/values/config.xml @@ -5,5 +5,9 @@ --> false - false + +