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 + +