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
This commit is contained in:
Tianjie Xu 2018-10-25 15:22:07 -07:00
parent ceab300864
commit 1a0a30a16a
5 changed files with 51 additions and 6 deletions

View file

@ -369,7 +369,14 @@ static bool yes_no(Device* device, const char* question1, const char* question2)
} }
static bool ask_to_wipe_data(Device* device) { static bool ask_to_wipe_data(Device* device) {
return yes_no(device, "Wipe all user data?", " THIS CAN NOT BE UNDONE!"); std::vector<std::string> headers{ "Wipe all user data?", " THIS CAN NOT BE UNDONE!" };
std::vector<std::string> 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. // 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 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 (ask_to_wipe_data(device)) {
if (wipe_data(device)) { if (wipe_data(device)) {
return INSTALL_SUCCESS; return INSTALL_SUCCESS;

View file

@ -844,9 +844,13 @@ bool ScreenRecoveryUI::InitTextParams() {
return true; return true;
} }
// TODO(xunchang) load localized text icons for the menu. (Init for screenRecoveryUI but
// not wearRecoveryUI).
bool ScreenRecoveryUI::LoadWipeDataMenuText() { 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; return true;
} }
@ -1250,6 +1254,20 @@ size_t ScreenRecoveryUI::ShowPromptWipeDataMenu(const std::vector<std::string>&
return ShowMenu(std::move(wipe_data_menu), true, key_handler); return ShowMenu(std::move(wipe_data_menu), true, key_handler);
} }
size_t ScreenRecoveryUI::ShowPromptWipeDataConfirmationMenu(
const std::vector<std::string>& backup_headers, const std::vector<std::string>& backup_items,
const std::function<int(int, bool)>& 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() { bool ScreenRecoveryUI::IsTextVisible() {
std::lock_guard<std::mutex> lg(updateMutex); std::lock_guard<std::mutex> lg(updateMutex);
int visible = show_text; int visible = show_text;

View file

@ -240,6 +240,11 @@ class ScreenRecoveryUI : public RecoveryUI, public DrawInterface {
const std::vector<std::string>& backup_items, const std::vector<std::string>& backup_items,
const std::function<int(int, bool)>& key_handler) override; const std::function<int(int, bool)>& key_handler) override;
// Displays the localized wipe data confirmation menu.
size_t ShowPromptWipeDataConfirmationMenu(
const std::vector<std::string>& backup_headers, const std::vector<std::string>& backup_items,
const std::function<int(int, bool)>& key_handler) override;
protected: protected:
static constexpr int kMenuIndent = 4; static constexpr int kMenuIndent = 4;
@ -334,9 +339,11 @@ class ScreenRecoveryUI : public RecoveryUI, public DrawInterface {
std::unique_ptr<GRSurface> no_command_text_; std::unique_ptr<GRSurface> no_command_text_;
// Localized text images for the wipe data menu. // Localized text images for the wipe data menu.
std::unique_ptr<GRSurface> wipe_data_menu_header_text_; std::unique_ptr<GRSurface> cancel_wipe_data_text_;
std::unique_ptr<GRSurface> try_again_text_;
std::unique_ptr<GRSurface> factory_data_reset_text_; std::unique_ptr<GRSurface> factory_data_reset_text_;
std::unique_ptr<GRSurface> try_again_text_;
std::unique_ptr<GRSurface> wipe_data_confirmation_text_;
std::unique_ptr<GRSurface> wipe_data_menu_header_text_;
// current_icon_ points to one of the frames in intro_frames_ or loop_frames_, indexed by // current_icon_ points to one of the frames in intro_frames_ or loop_frames_, indexed by
// current_frame_, or error_icon_. // current_frame_, or error_icon_.

View file

@ -74,6 +74,13 @@ class StubRecoveryUI : public RecoveryUI {
return 0; return 0;
} }
size_t ShowPromptWipeDataConfirmationMenu(
const std::vector<std::string>& /* backup_headers */,
const std::vector<std::string>& /* backup_items */,
const std::function<int(int, bool)>& /* key_handle */) override {
return 0;
}
void SetTitle(const std::vector<std::string>& /* lines */) override {} void SetTitle(const std::vector<std::string>& /* lines */) override {}
}; };

7
ui.h
View file

@ -169,6 +169,13 @@ class RecoveryUI {
const std::vector<std::string>& backup_items, const std::vector<std::string>& backup_items,
const std::function<int(int, bool)>& key_handler) = 0; const std::function<int(int, bool)>& 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<std::string>& backup_headers, const std::vector<std::string>& backup_items,
const std::function<int(int, bool)>& key_handler) = 0;
// Resets the key interrupt status. // Resets the key interrupt status.
void ResetKeyInterruptStatus() { void ResetKeyInterruptStatus() {
key_interrupted_ = false; key_interrupted_ = false;