gui: grey out hws with addr verif unimplemented

This commit is contained in:
edouardparis 2023-12-05 18:30:20 +01:00
parent 0ef49ed3f7
commit 3372e2f1e0
2 changed files with 75 additions and 18 deletions

View File

@ -6,6 +6,7 @@ use crate::{
app::view::message::*,
hw::{HardwareWallet, UnsupportedReason},
};
use async_hwi::DeviceKind;
pub fn hw_list_view(
i: usize,
@ -52,7 +53,6 @@ pub fn hw_list_view(
UnsupportedReason::NotPartOfWallet(fg) => {
hw::unrelated_hardware_wallet(&kind.to_string(), version.as_ref(), fg)
}
_ => hw::unsupported_hardware_wallet(&kind.to_string(), version.as_ref()),
},
HardwareWallet::Locked {
@ -111,7 +111,6 @@ pub fn hw_list_view_for_registration(
UnsupportedReason::NotPartOfWallet(fg) => {
hw::unrelated_hardware_wallet(&kind.to_string(), version.as_ref(), fg)
}
_ => hw::unsupported_hardware_wallet(&kind.to_string(), version.as_ref()),
},
HardwareWallet::Locked {
@ -134,7 +133,7 @@ pub fn hw_list_view_verify_address(
hw: &HardwareWallet,
chosen: bool,
) -> Element<Message> {
let mut bttn = Button::new(match hw {
let (content, selectable) = match hw {
HardwareWallet::Supported {
kind,
version,
@ -143,9 +142,32 @@ pub fn hw_list_view_verify_address(
..
} => {
if chosen {
hw::processing_hardware_wallet(kind, version.as_ref(), fingerprint, alias.as_ref())
(
hw::processing_hardware_wallet(
kind,
version.as_ref(),
fingerprint,
alias.as_ref(),
),
false,
)
} else {
hw::supported_hardware_wallet(kind, version.as_ref(), fingerprint, alias.as_ref())
match kind {
DeviceKind::Specter | DeviceKind::SpecterSimulator => {
(hw::unimplemented_method_hardware_wallet(
&kind.to_string(),
version.as_ref(),
fingerprint,
"Liana cannot request the device to display the address. \n The verification must be done manually with the device control."
), false)
}
_ => (hw::supported_hardware_wallet(
kind,
version.as_ref(),
fingerprint,
alias.as_ref(),
), true),
}
}
}
HardwareWallet::Unsupported {
@ -153,20 +175,26 @@ pub fn hw_list_view_verify_address(
kind,
reason,
..
} => match reason {
UnsupportedReason::NotPartOfWallet(fg) => {
hw::unrelated_hardware_wallet(&kind.to_string(), version.as_ref(), fg)
}
_ => hw::unsupported_hardware_wallet(&kind.to_string(), version.as_ref()),
},
} => (
match reason {
UnsupportedReason::NotPartOfWallet(fg) => {
hw::unrelated_hardware_wallet(&kind.to_string(), version.as_ref(), fg)
}
_ => hw::unsupported_hardware_wallet(&kind.to_string(), version.as_ref()),
},
false,
),
HardwareWallet::Locked {
kind, pairing_code, ..
} => hw::locked_hardware_wallet(kind, pairing_code.as_ref()),
})
.style(theme::Button::Border)
.width(Length::Fill);
if !chosen && hw.is_supported() {
} => (
hw::locked_hardware_wallet(kind, pairing_code.as_ref()),
false,
),
};
let mut bttn = Button::new(content)
.style(theme::Button::Border)
.width(Length::Fill);
if selectable && hw.is_supported() {
bttn = bttn.on_press(Message::SelectHardwareWallet(i));
}
Container::new(bttn)

View File

@ -87,6 +87,35 @@ pub fn unregistered_hardware_wallet<'a, T: 'a, K: Display, V: Display, F: Displa
.padding(10)
}
pub fn unimplemented_method_hardware_wallet<'a, T: 'a, K: Display, V: Display, F: Display>(
kind: K,
version: Option<V>,
fingerprint: F,
message: &'static str,
) -> Container<'a, T> {
container(
tooltip::Tooltip::new(
container(
column(vec![
text::p1_regular(format!("#{}", fingerprint)).into(),
Row::new()
.spacing(5)
.push(text::caption(kind.to_string()))
.push_maybe(version.map(|v| text::caption(v.to_string())))
.into(),
])
.width(Length::Fill),
)
.width(Length::Fill)
.padding(10),
message,
tooltip::Position::Bottom,
)
.style(theme::Container::Card(theme::Card::Simple)),
)
.width(Length::Fill)
}
pub fn unrelated_hardware_wallet<'a, T: 'a, K: Display, V: Display, F: Display>(
kind: K,
version: Option<V>,
@ -107,7 +136,7 @@ pub fn unrelated_hardware_wallet<'a, T: 'a, K: Display, V: Display, F: Display>(
)
.width(Length::Fill)
.padding(10),
"The signing device is not part of the wallet setup",
"This signer does not have a key in this wallet.",
tooltip::Position::Bottom,
)
.style(theme::Container::Card(theme::Card::Simple)),