diff options
author | Steve Kondik <shade@chemlab.org> | 2013-12-09 00:33:52 -0800 |
---|---|---|
committer | Tom Marshall <tdm@cyngn.com> | 2015-11-20 15:46:40 -0800 |
commit | 06d6208a29c845983832351c6a651329ecb30a9f (patch) | |
tree | f67ddc1944768628735f0bdbd7fb0cfb194aac56 /recovery.cpp | |
parent | c00a32f061458e996d1acaa147736a7ed055ce73 (diff) | |
download | bootable_recovery-06d6208a29c845983832351c6a651329ecb30a9f.zip bootable_recovery-06d6208a29c845983832351c6a651329ecb30a9f.tar.gz bootable_recovery-06d6208a29c845983832351c6a651329ecb30a9f.tar.bz2 |
Add back and home key handling.
Change-Id: I5abac0f1b59d480b859f77ce16126f13fccd440b
Diffstat (limited to 'recovery.cpp')
-rw-r--r-- | recovery.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/recovery.cpp b/recovery.cpp index 5288dab..b7641aa 100644 --- a/recovery.cpp +++ b/recovery.cpp @@ -600,7 +600,7 @@ get_menu_selection(const char* const * headers, const char* const * items, int selected = initial_selection; int chosen_item = -1; - while (chosen_item < 0) { + while (chosen_item < 0 && chosen_item != Device::kGoBack) { int key = ui->WaitKey(); int visible = ui->IsTextVisible(); @@ -612,6 +612,8 @@ get_menu_selection(const char* const * headers, const char* const * items, ui->EndMenu(); return 0; // XXX fixme } + } else if (key == -2) { // we are returning from ui_cancel_wait_key(): trigger a GO_BACK + return Device::kGoBack; } int action = device->HandleMenuKey(key, visible); @@ -629,6 +631,9 @@ get_menu_selection(const char* const * headers, const char* const * items, break; case Device::kNoAction: break; + case Device::kGoBack: + chosen_item = Device::kGoBack; + break; } } else if (!menu_only) { chosen_item = action; @@ -864,6 +869,8 @@ static int apply_from_sdcard(Device* device, bool* wipe_cache) { return status; } +int ui_root_menu = 0; + // Return REBOOT, SHUTDOWN, or REBOOT_BOOTLOADER. Returning NO_ACTION // means to take the default, which is to reboot or shutdown depending // on if the --shutdown_after flag was passed to recovery. @@ -871,6 +878,7 @@ static Device::BuiltinAction prompt_and_wait(Device* device, int status) { for (;;) { finish_recovery(NULL); + ui_root_menu = 1; switch (status) { case INSTALL_SUCCESS: case INSTALL_NONE: @@ -885,6 +893,7 @@ prompt_and_wait(Device* device, int status) { ui->SetProgressType(RecoveryUI::EMPTY); int chosen_item = get_menu_selection(nullptr, device->GetMenuItems(), 0, 0, device); + ui_root_menu = 0; // device-specific code may take some action here. It may // return one of the core actions handled in the switch |