From ebaae5f57bf8cbb02e0e05da93a8123487de8b40 Mon Sep 17 00:00:00 2001 From: Alexis Grojean Date: Wed, 21 Aug 2024 12:30:34 +0200 Subject: [PATCH] Add choice screen to ask user to confirm tx in generic review example. --- .../examples/nbgl_generic_review.rs | 38 ++++++++++++++---- .../icons/Important_Circle_64px.png | Bin 0 -> 6993 bytes 2 files changed, 30 insertions(+), 8 deletions(-) create mode 100755 ledger_device_sdk/icons/Important_Circle_64px.png diff --git a/ledger_device_sdk/examples/nbgl_generic_review.rs b/ledger_device_sdk/examples/nbgl_generic_review.rs index 548f96a8..d10864ff 100644 --- a/ledger_device_sdk/examples/nbgl_generic_review.rs +++ b/ledger_device_sdk/examples/nbgl_generic_review.rs @@ -8,11 +8,13 @@ use include_gif::include_gif; use ledger_device_sdk::io::*; use ledger_device_sdk::nbgl::{ init_comm, CenteredInfo, CenteredInfoStyle, Field, InfoButton, InfoLongPress, InfosList, - NbglGenericReview, NbglGlyph, NbglPageContent, NbglStatus, TagValueConfirm, TagValueList, + NbglGenericReview, NbglGlyph, NbglPageContent, NbglStatus, NbglChoice, TagValueConfirm, TagValueList, TuneIndex, }; use ledger_secure_sdk_sys::*; +use core::ops::Not; + #[panic_handler] fn panic(_: &core::panic::PanicInfo) -> ! { exit_app(1); @@ -87,11 +89,31 @@ extern "C" fn sample_main() { .add_content(NbglPageContent::TagValueConfirm(tag_value_confirm)) .add_content(NbglPageContent::InfosList(infos_list)); - let success = review.show("Reject Example"); - let status_text = if success { - "Example confirmed" - } else { - "Example rejected" - }; - NbglStatus::new().text(status_text).show(success); + const IMPORTANT: NbglGlyph = + NbglGlyph::from_include(include_gif!("icons/Important_Circle_64px.png", NBGL)); + + let mut show_tx = true; + let mut status_text = "Example rejected"; + while show_tx { + let confirm = review.show("Reject Example"); + if confirm { + status_text = "Example confirmed"; + show_tx = false; + } else { + show_tx = NbglChoice::new() + .glyph(&IMPORTANT) + .show( + "Reject transaction?", + "", + "Yes, reject", + "Go back to transaction", + ) + // not() is used to invert the boolean value returned + // by the choice (since we want to return to showing the + // transaction if the user selects "Go back to transaction" + // which returns false). + .not(); + } + } + NbglStatus::new().text(status_text).show(status_text == "Example confirmed"); } diff --git a/ledger_device_sdk/icons/Important_Circle_64px.png b/ledger_device_sdk/icons/Important_Circle_64px.png new file mode 100755 index 0000000000000000000000000000000000000000..40e9c22fe68023358b13da0cd8a88628de4536c2 GIT binary patch literal 6993 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 jMLiY