summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2018-09-13 05:10:13 +0200
committerandroid-build-team Robot <android-build-team-robot@google.com>2018-09-13 05:10:13 +0200
commit0f2d5ce7ca3d40059200f2d8202c0a1c0a9a1dce (patch)
treea89715473b29f44bc5a26c23bcc5dfc1b7907b87
parentSnap for 5004953 from 466f59f7c127a4d12cc90ee234f53cc1522e2402 to qt-release (diff)
parentMerge "Allow switch to fastbootd when userdata wipe is required" am: 16147d1bd6 am: 20b29bbbbd (diff)
downloadandroid_bootable_recovery-0f2d5ce7ca3d40059200f2d8202c0a1c0a9a1dce.tar
android_bootable_recovery-0f2d5ce7ca3d40059200f2d8202c0a1c0a9a1dce.tar.gz
android_bootable_recovery-0f2d5ce7ca3d40059200f2d8202c0a1c0a9a1dce.tar.bz2
android_bootable_recovery-0f2d5ce7ca3d40059200f2d8202c0a1c0a9a1dce.tar.lz
android_bootable_recovery-0f2d5ce7ca3d40059200f2d8202c0a1c0a9a1dce.tar.xz
android_bootable_recovery-0f2d5ce7ca3d40059200f2d8202c0a1c0a9a1dce.tar.zst
android_bootable_recovery-0f2d5ce7ca3d40059200f2d8202c0a1c0a9a1dce.zip
-rw-r--r--install.h11
-rw-r--r--recovery.cpp18
2 files changed, 20 insertions, 9 deletions
diff --git a/install.h b/install.h
index 0f6670a35..1d3d0cd27 100644
--- a/install.h
+++ b/install.h
@@ -23,8 +23,15 @@
#include <ziparchive/zip_archive.h>
-enum { INSTALL_SUCCESS, INSTALL_ERROR, INSTALL_CORRUPT, INSTALL_NONE, INSTALL_SKIPPED,
- INSTALL_RETRY };
+enum InstallResult {
+ INSTALL_SUCCESS,
+ INSTALL_ERROR,
+ INSTALL_CORRUPT,
+ INSTALL_NONE,
+ INSTALL_SKIPPED,
+ INSTALL_RETRY,
+ INSTALL_KEY_INTERRUPTED
+};
// Installs the given update package. If INSTALL_SUCCESS is returned and *wipe_cache is true on
// exit, caller should wipe the cache partition.
diff --git a/recovery.cpp b/recovery.cpp
index 5934b61d7..6248cf70f 100644
--- a/recovery.cpp
+++ b/recovery.cpp
@@ -394,7 +394,7 @@ static bool wipe_data(Device* device) {
return success;
}
-static bool prompt_and_wipe_data(Device* device) {
+static InstallResult prompt_and_wipe_data(Device* device) {
// Use a single string and let ScreenRecoveryUI handles the wrapping.
std::vector<std::string> headers{
"Can't load Android system. Your data may be corrupt. "
@@ -415,13 +415,17 @@ static bool prompt_and_wipe_data(Device* device) {
// If ShowMenu() returned RecoveryUI::KeyError::INTERRUPTED, WaitKey() was interrupted.
if (chosen_item == static_cast<size_t>(RecoveryUI::KeyError::INTERRUPTED)) {
- return false;
+ return INSTALL_KEY_INTERRUPTED;
}
if (chosen_item != 1) {
- return true; // Just reboot, no wipe; not a failure, user asked for it
+ return INSTALL_SUCCESS; // Just reboot, no wipe; not a failure, user asked for it
}
if (ask_to_wipe_data(device)) {
- return wipe_data(device);
+ if (wipe_data(device)) {
+ return INSTALL_SUCCESS;
+ } else {
+ return INSTALL_ERROR;
+ }
}
}
}
@@ -1194,10 +1198,10 @@ Device::BuiltinAction start_recovery(Device* device, const std::vector<std::stri
} else if (should_prompt_and_wipe_data) {
ui->ShowText(true);
ui->SetBackground(RecoveryUI::ERROR);
- if (!prompt_and_wipe_data(device)) {
- status = INSTALL_ERROR;
+ status = prompt_and_wipe_data(device);
+ if (status != INSTALL_KEY_INTERRUPTED) {
+ ui->ShowText(false);
}
- ui->ShowText(false);
} else if (should_wipe_cache) {
if (!wipe_cache(false, device)) {
status = INSTALL_ERROR;