From 1a0a30a16a8071c59e265f52de60dedc54d31bd9 Mon Sep 17 00:00:00 2001 From: Tianjie Xu Date: Thu, 25 Oct 2018 15:22:07 -0700 Subject: [PATCH] Show wipe data confirmation text in recovery mode After we generate the localized confirmation text images for certain dpi, we can now load these images and display them under recovery. Devices that cannot load the images will use the backup text strings as before. Bug: 74397117 Test: check the menu with multiple locales, and check all the images locally with locale test, check the fall back strings. Change-Id: Ic31a55670026c909ec7a05cb0bb4a0fc1d5d15c7 --- recovery.cpp | 10 ++++++++-- screen_ui.cpp | 22 ++++++++++++++++++++-- screen_ui.h | 11 +++++++++-- stub_ui.h | 7 +++++++ ui.h | 7 +++++++ 5 files changed, 51 insertions(+), 6 deletions(-) diff --git a/recovery.cpp b/recovery.cpp index 7e1fa43a..de916c63 100644 --- a/recovery.cpp +++ b/recovery.cpp @@ -369,7 +369,14 @@ static bool yes_no(Device* device, const char* question1, const char* question2) } static bool ask_to_wipe_data(Device* device) { - return yes_no(device, "Wipe all user data?", " THIS CAN NOT BE UNDONE!"); + std::vector headers{ "Wipe all user data?", " THIS CAN NOT BE UNDONE!" }; + std::vector items{ " Cancel", " Factory data reset" }; + + size_t chosen_item = ui->ShowPromptWipeDataConfirmationMenu( + headers, items, + std::bind(&Device::HandleMenuKey, device, std::placeholders::_1, std::placeholders::_2)); + + return (chosen_item == 1); } // Return true on success. @@ -420,7 +427,6 @@ static InstallResult prompt_and_wipe_data(Device* device) { return INSTALL_SUCCESS; // Just reboot, no wipe; not a failure, user asked for it } - // TODO(xunchang) localize the confirmation texts also. if (ask_to_wipe_data(device)) { if (wipe_data(device)) { return INSTALL_SUCCESS; diff --git a/screen_ui.cpp b/screen_ui.cpp index 765d2fe6..57560545 100644 --- a/screen_ui.cpp +++ b/screen_ui.cpp @@ -844,9 +844,13 @@ bool ScreenRecoveryUI::InitTextParams() { return true; } -// TODO(xunchang) load localized text icons for the menu. (Init for screenRecoveryUI but -// not wearRecoveryUI). bool ScreenRecoveryUI::LoadWipeDataMenuText() { + // Ignores the errors since the member variables will stay as nullptr. + cancel_wipe_data_text_ = LoadLocalizedBitmap("cancel_wipe_data_text"); + factory_data_reset_text_ = LoadLocalizedBitmap("factory_data_reset_text"); + try_again_text_ = LoadLocalizedBitmap("try_again_text"); + wipe_data_confirmation_text_ = LoadLocalizedBitmap("wipe_data_confirmation_text"); + wipe_data_menu_header_text_ = LoadLocalizedBitmap("wipe_data_menu_header_text"); return true; } @@ -1250,6 +1254,20 @@ size_t ScreenRecoveryUI::ShowPromptWipeDataMenu(const std::vector& return ShowMenu(std::move(wipe_data_menu), true, key_handler); } +size_t ScreenRecoveryUI::ShowPromptWipeDataConfirmationMenu( + const std::vector& backup_headers, const std::vector& backup_items, + const std::function& key_handler) { + auto confirmation_menu = + CreateMenu(wipe_data_confirmation_text_.get(), + { cancel_wipe_data_text_.get(), factory_data_reset_text_.get() }, backup_headers, + backup_items, 0); + if (confirmation_menu == nullptr) { + return 0; + } + + return ShowMenu(std::move(confirmation_menu), true, key_handler); +} + bool ScreenRecoveryUI::IsTextVisible() { std::lock_guard lg(updateMutex); int visible = show_text; diff --git a/screen_ui.h b/screen_ui.h index ff245a2f..acd44c81 100644 --- a/screen_ui.h +++ b/screen_ui.h @@ -240,6 +240,11 @@ class ScreenRecoveryUI : public RecoveryUI, public DrawInterface { const std::vector& backup_items, const std::function& key_handler) override; + // Displays the localized wipe data confirmation menu. + size_t ShowPromptWipeDataConfirmationMenu( + const std::vector& backup_headers, const std::vector& backup_items, + const std::function& key_handler) override; + protected: static constexpr int kMenuIndent = 4; @@ -334,9 +339,11 @@ class ScreenRecoveryUI : public RecoveryUI, public DrawInterface { std::unique_ptr no_command_text_; // Localized text images for the wipe data menu. - std::unique_ptr wipe_data_menu_header_text_; - std::unique_ptr try_again_text_; + std::unique_ptr cancel_wipe_data_text_; std::unique_ptr factory_data_reset_text_; + std::unique_ptr try_again_text_; + std::unique_ptr wipe_data_confirmation_text_; + std::unique_ptr wipe_data_menu_header_text_; // current_icon_ points to one of the frames in intro_frames_ or loop_frames_, indexed by // current_frame_, or error_icon_. diff --git a/stub_ui.h b/stub_ui.h index ca137dff..fb1d8c7a 100644 --- a/stub_ui.h +++ b/stub_ui.h @@ -74,6 +74,13 @@ class StubRecoveryUI : public RecoveryUI { return 0; } + size_t ShowPromptWipeDataConfirmationMenu( + const std::vector& /* backup_headers */, + const std::vector& /* backup_items */, + const std::function& /* key_handle */) override { + return 0; + } + void SetTitle(const std::vector& /* lines */) override {} }; diff --git a/ui.h b/ui.h index 1e6186a1..4924fec5 100644 --- a/ui.h +++ b/ui.h @@ -169,6 +169,13 @@ class RecoveryUI { const std::vector& backup_items, const std::function& key_handler) = 0; + // Displays the localized wipe data confirmation menu with pre-generated images. Falls back to + // the text strings upon failures. The initial selection is the 0th item, which returns to the + // upper level menu. + virtual size_t ShowPromptWipeDataConfirmationMenu( + const std::vector& backup_headers, const std::vector& backup_items, + const std::function& key_handler) = 0; + // Resets the key interrupt status. void ResetKeyInterruptStatus() { key_interrupted_ = false;