use core::mem; use heapless::String; use crate::{ strutil::TString, time::Duration, trezorhal::random, ui::{ component::{ base::ComponentExt, text::TextStyle, Child, Component, Event, EventCtx, Label, Maybe, Never, Pad, TimerToken, }, display::{self, Font}, event::TouchEvent, geometry::{Alignment2D, Grid, Insets, Offset, Rect}, model_tt::component::{ button::{Button, ButtonContent, ButtonMsg, ButtonMsg::Clicked}, theme, }, }, }; pub enum PinKeyboardMsg { Confirmed, Cancelled, } const MAX_LENGTH: usize = 50; const MAX_VISIBLE_DOTS: usize = 14; const MAX_VISIBLE_DIGITS: usize = 16; const DIGIT_COUNT: usize = 10; // 0..10 const HEADER_PADDING_SIDE: i16 = 5; const HEADER_PADDING_BOTTOM: i16 = 12; const HEADER_PADDING: Insets = Insets::new( theme::borders().top, HEADER_PADDING_SIDE, HEADER_PADDING_BOTTOM, HEADER_PADDING_SIDE, ); pub struct PinKeyboard<'a> { allow_cancel: bool, major_prompt: Child>, minor_prompt: Child>, major_warning: Option>>, textbox: Child, textbox_pad: Pad, erase_btn: Child>, cancel_btn: Child>, confirm_btn: Child