Merge "Making rebootPromptAndWipeUserData a SystemApi" into main
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index 5413c66..e87bc50 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -11160,6 +11160,7 @@
method @RequiresPermission(android.Manifest.permission.RECOVERY) public static void processPackage(android.content.Context, java.io.File, android.os.RecoverySystem.ProgressListener) throws java.io.IOException;
method @Deprecated @RequiresPermission(android.Manifest.permission.RECOVERY) public static void rebootAndApply(@NonNull android.content.Context, @NonNull String, @NonNull String) throws java.io.IOException;
method @RequiresPermission(anyOf={android.Manifest.permission.RECOVERY, android.Manifest.permission.REBOOT}) public static int rebootAndApply(@NonNull android.content.Context, @NonNull String, boolean) throws java.io.IOException;
+ method @FlaggedApi("android.crashrecovery.flags.enable_crashrecovery") @RequiresPermission(android.Manifest.permission.RECOVERY) public static void rebootPromptAndWipeUserData(@NonNull android.content.Context, @NonNull String) throws java.io.IOException;
method @RequiresPermission(allOf={android.Manifest.permission.RECOVERY, android.Manifest.permission.REBOOT}) public static void rebootWipeAb(android.content.Context, java.io.File, String) throws java.io.IOException;
method @RequiresPermission(android.Manifest.permission.RECOVERY) public static void scheduleUpdateOnBoot(android.content.Context, java.io.File) throws java.io.IOException;
method @Deprecated public static boolean verifyPackageCompatibility(java.io.File) throws java.io.IOException;
diff --git a/core/java/android/os/RecoverySystem.java b/core/java/android/os/RecoverySystem.java
index bb74a3e..398140d 100644
--- a/core/java/android/os/RecoverySystem.java
+++ b/core/java/android/os/RecoverySystem.java
@@ -18,6 +18,7 @@
import static android.view.Display.DEFAULT_DISPLAY;
+import android.annotation.FlaggedApi;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -1170,11 +1171,27 @@
return removedSubsCount.get() == subscriptionInfos.size();
}
- /** {@hide} */
- public static void rebootPromptAndWipeUserData(Context context, String reason)
+ /**
+ * Reboot into recovery and prompt for wiping the device.
+ *
+ * This is used as last resort in case the device is not recoverable using
+ * other recovery steps. This first checks if fs-checkpoint is available, in
+ * which case we commit the checkpoint, otherwise it performs the reboot in
+ * recovery mode and shows user prompt for wiping the device.
+ *
+ * @param context the context to use.
+ * @param reason the reason to wipe.
+ *
+ * @throws IOException if something goes wrong.
+ *
+ * @hide
+ */
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.RECOVERY)
+ @FlaggedApi(android.crashrecovery.flags.Flags.FLAG_ENABLE_CRASHRECOVERY)
+ public static void rebootPromptAndWipeUserData(@NonNull Context context, @NonNull String reason)
throws IOException {
boolean checkpointing = false;
- boolean needReboot = false;
IVold vold = null;
try {
vold = IVold.Stub.asInterface(ServiceManager.checkService("vold"));