Domain name UI implementation
This commit is contained in:
17
src_bagl/ui_domain_name.c
Normal file
17
src_bagl/ui_domain_name.c
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
#ifdef HAVE_DOMAIN_NAME
|
||||||
|
|
||||||
|
#include "ux.h"
|
||||||
|
#include "domain_name.h"
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
// clang-format off
|
||||||
|
UX_STEP_NOCB(
|
||||||
|
ux_domain_name_step,
|
||||||
|
bnnn_paging,
|
||||||
|
{
|
||||||
|
.title = "Domain",
|
||||||
|
.text = g_domain_name
|
||||||
|
});
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
#endif // HAVE_DOMAIN_NAME
|
||||||
12
src_bagl/ui_domain_name.h
Normal file
12
src_bagl/ui_domain_name.h
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
#ifdef HAVE_DOMAIN_NAME
|
||||||
|
|
||||||
|
#ifndef UI_DOMAIN_NAME_H_
|
||||||
|
#define UI_DOMAIN_NAME_H_
|
||||||
|
|
||||||
|
#include "ux.h"
|
||||||
|
|
||||||
|
extern const ux_flow_step_t ux_domain_name_step;
|
||||||
|
|
||||||
|
#endif // UI_DOMAIN_NAME_H_
|
||||||
|
|
||||||
|
#endif // HAVE_DOMAIN_NAME
|
||||||
@@ -7,13 +7,26 @@
|
|||||||
#define DISABLED_STR "Disabled"
|
#define DISABLED_STR "Disabled"
|
||||||
#define BUF_INCREMENT (MAX(strlen(ENABLED_STR), strlen(DISABLED_STR)) + 1)
|
#define BUF_INCREMENT (MAX(strlen(ENABLED_STR), strlen(DISABLED_STR)) + 1)
|
||||||
|
|
||||||
void display_settings(const ux_flow_step_t* const start_step);
|
// Reuse the strings.common.fullAmount buffer for settings displaying.
|
||||||
void switch_settings_blind_signing(void);
|
// No risk of collision as this buffer is unused in the settings menu
|
||||||
void switch_settings_display_data(void);
|
#define SETTING_BLIND_SIGNING_STATE (strings.common.fullAmount)
|
||||||
void switch_settings_display_nonce(void);
|
#define SETTING_DISPLAY_DATA_STATE (strings.common.fullAmount + (BUF_INCREMENT * 1))
|
||||||
|
#define SETTING_DISPLAY_NONCE_STATE (strings.common.fullAmount + (BUF_INCREMENT * 2))
|
||||||
|
#define SETTING_VERBOSE_EIP712_STATE (strings.common.fullAmount + (BUF_INCREMENT * 3))
|
||||||
|
#define SETTING_VERBOSE_DOMAIN_NAME_STATE (strings.common.fullAmount + (BUF_INCREMENT * 4))
|
||||||
|
|
||||||
|
#define BOOL_TO_STATE_STR(b) (b ? ENABLED_STR : DISABLED_STR)
|
||||||
|
|
||||||
|
static void display_settings(const ux_flow_step_t* const start_step);
|
||||||
|
static void switch_settings_blind_signing(void);
|
||||||
|
static void switch_settings_display_data(void);
|
||||||
|
static void switch_settings_display_nonce(void);
|
||||||
#ifdef HAVE_EIP712_FULL_SUPPORT
|
#ifdef HAVE_EIP712_FULL_SUPPORT
|
||||||
void switch_settings_verbose_eip712(void);
|
static void switch_settings_verbose_eip712(void);
|
||||||
#endif // HAVE_EIP712_FULL_SUPPORT
|
#endif // HAVE_EIP712_FULL_SUPPORT
|
||||||
|
#ifdef HAVE_DOMAIN_NAME
|
||||||
|
static void switch_settings_verbose_domain_name(void);
|
||||||
|
#endif // HAVE_DOMAIN_NAME
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// clang-format off
|
// clang-format off
|
||||||
@@ -75,7 +88,7 @@ UX_STEP_CB(
|
|||||||
"Transaction",
|
"Transaction",
|
||||||
"blind signing",
|
"blind signing",
|
||||||
#endif
|
#endif
|
||||||
strings.common.fullAddress
|
SETTING_BLIND_SIGNING_STATE
|
||||||
});
|
});
|
||||||
|
|
||||||
UX_STEP_CB(
|
UX_STEP_CB(
|
||||||
@@ -95,7 +108,7 @@ UX_STEP_CB(
|
|||||||
"Show contract data",
|
"Show contract data",
|
||||||
"details",
|
"details",
|
||||||
#endif
|
#endif
|
||||||
strings.common.fullAddress + BUF_INCREMENT
|
SETTING_DISPLAY_DATA_STATE
|
||||||
});
|
});
|
||||||
|
|
||||||
UX_STEP_CB(
|
UX_STEP_CB(
|
||||||
@@ -115,7 +128,7 @@ UX_STEP_CB(
|
|||||||
"Show account nonce",
|
"Show account nonce",
|
||||||
"in transactions",
|
"in transactions",
|
||||||
#endif
|
#endif
|
||||||
strings.common.fullAddress + (BUF_INCREMENT * 2)
|
SETTING_DISPLAY_NONCE_STATE
|
||||||
});
|
});
|
||||||
|
|
||||||
#ifdef HAVE_EIP712_FULL_SUPPORT
|
#ifdef HAVE_EIP712_FULL_SUPPORT
|
||||||
@@ -127,10 +140,23 @@ UX_STEP_CB(
|
|||||||
"Verbose EIP-712",
|
"Verbose EIP-712",
|
||||||
"Ignore filtering &",
|
"Ignore filtering &",
|
||||||
"display raw content",
|
"display raw content",
|
||||||
strings.common.fullAddress + (BUF_INCREMENT * 3)
|
SETTING_VERBOSE_EIP712_STATE
|
||||||
});
|
});
|
||||||
#endif // HAVE_EIP712_FULL_SUPPORT
|
#endif // HAVE_EIP712_FULL_SUPPORT
|
||||||
|
|
||||||
|
#ifdef HAVE_DOMAIN_NAME
|
||||||
|
UX_STEP_CB(
|
||||||
|
ux_settings_flow_verbose_domain_name_step,
|
||||||
|
bnnn,
|
||||||
|
switch_settings_verbose_domain_name(),
|
||||||
|
{
|
||||||
|
"Verbose domains",
|
||||||
|
"Show",
|
||||||
|
"resolved address",
|
||||||
|
SETTING_VERBOSE_DOMAIN_NAME_STATE
|
||||||
|
});
|
||||||
|
#endif // HAVE_DOMAIN_NAME
|
||||||
|
|
||||||
|
|
||||||
UX_STEP_CB(
|
UX_STEP_CB(
|
||||||
ux_settings_flow_back_step,
|
ux_settings_flow_back_step,
|
||||||
@@ -149,54 +175,61 @@ UX_FLOW(ux_settings_flow,
|
|||||||
#ifdef HAVE_EIP712_FULL_SUPPORT
|
#ifdef HAVE_EIP712_FULL_SUPPORT
|
||||||
&ux_settings_flow_verbose_eip712_step,
|
&ux_settings_flow_verbose_eip712_step,
|
||||||
#endif // HAVE_EIP712_FULL_SUPPORT
|
#endif // HAVE_EIP712_FULL_SUPPORT
|
||||||
|
#ifdef HAVE_DOMAIN_NAME
|
||||||
|
&ux_settings_flow_verbose_domain_name_step,
|
||||||
|
#endif // HAVE_DOMAIN_NAME
|
||||||
&ux_settings_flow_back_step);
|
&ux_settings_flow_back_step);
|
||||||
|
|
||||||
void display_settings(const ux_flow_step_t* const start_step) {
|
static void display_settings(const ux_flow_step_t* const start_step) {
|
||||||
bool settings[] = {N_storage.dataAllowed,
|
strlcpy(SETTING_BLIND_SIGNING_STATE, BOOL_TO_STATE_STR(N_storage.dataAllowed), BUF_INCREMENT);
|
||||||
N_storage.contractDetails,
|
strlcpy(SETTING_DISPLAY_DATA_STATE,
|
||||||
N_storage.displayNonce,
|
BOOL_TO_STATE_STR(N_storage.contractDetails),
|
||||||
|
BUF_INCREMENT);
|
||||||
|
strlcpy(SETTING_DISPLAY_NONCE_STATE, BOOL_TO_STATE_STR(N_storage.displayNonce), BUF_INCREMENT);
|
||||||
#ifdef HAVE_EIP712_FULL_SUPPORT
|
#ifdef HAVE_EIP712_FULL_SUPPORT
|
||||||
N_storage.verbose_eip712
|
strlcpy(SETTING_VERBOSE_EIP712_STATE,
|
||||||
|
BOOL_TO_STATE_STR(N_storage.verbose_eip712),
|
||||||
|
BUF_INCREMENT);
|
||||||
#endif // HAVE_EIP712_FULL_SUPPORT
|
#endif // HAVE_EIP712_FULL_SUPPORT
|
||||||
};
|
#ifdef HAVE_DOMAIN_NAME
|
||||||
uint8_t offset = 0;
|
strlcpy(SETTING_VERBOSE_DOMAIN_NAME_STATE,
|
||||||
|
BOOL_TO_STATE_STR(N_storage.verbose_domain_name),
|
||||||
for (unsigned int i = 0; i < ARRAY_SIZE(settings); ++i) {
|
BUF_INCREMENT);
|
||||||
strlcpy(strings.common.fullAddress + offset,
|
#endif // HAVE_DOMAIN_NAME
|
||||||
(settings[i] ? ENABLED_STR : DISABLED_STR),
|
|
||||||
sizeof(strings.common.fullAddress) - offset);
|
|
||||||
offset += BUF_INCREMENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
ux_flow_init(0, ux_settings_flow, start_step);
|
ux_flow_init(0, ux_settings_flow, start_step);
|
||||||
}
|
}
|
||||||
|
|
||||||
void switch_settings_blind_signing(void) {
|
static void toggle_setting(volatile bool* setting, const ux_flow_step_t* ui_step) {
|
||||||
uint8_t value = (N_storage.dataAllowed ? 0 : 1);
|
bool value = !*setting;
|
||||||
nvm_write((void*) &N_storage.dataAllowed, (void*) &value, sizeof(uint8_t));
|
nvm_write((void*) setting, (void*) &value, sizeof(value));
|
||||||
display_settings(&ux_settings_flow_blind_signing_step);
|
display_settings(ui_step);
|
||||||
}
|
}
|
||||||
|
|
||||||
void switch_settings_display_data(void) {
|
static void switch_settings_blind_signing(void) {
|
||||||
uint8_t value = (N_storage.contractDetails ? 0 : 1);
|
toggle_setting(&N_storage.dataAllowed, &ux_settings_flow_blind_signing_step);
|
||||||
nvm_write((void*) &N_storage.contractDetails, (void*) &value, sizeof(uint8_t));
|
|
||||||
display_settings(&ux_settings_flow_display_data_step);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void switch_settings_display_nonce(void) {
|
static void switch_settings_display_data(void) {
|
||||||
uint8_t value = (N_storage.displayNonce ? 0 : 1);
|
toggle_setting(&N_storage.contractDetails, &ux_settings_flow_display_data_step);
|
||||||
nvm_write((void*) &N_storage.displayNonce, (void*) &value, sizeof(uint8_t));
|
}
|
||||||
display_settings(&ux_settings_flow_display_nonce_step);
|
|
||||||
|
static void switch_settings_display_nonce(void) {
|
||||||
|
toggle_setting(&N_storage.displayNonce, &ux_settings_flow_display_nonce_step);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_EIP712_FULL_SUPPORT
|
#ifdef HAVE_EIP712_FULL_SUPPORT
|
||||||
void switch_settings_verbose_eip712(void) {
|
static void switch_settings_verbose_eip712(void) {
|
||||||
bool value = !N_storage.verbose_eip712;
|
toggle_setting(&N_storage.verbose_eip712, &ux_settings_flow_verbose_eip712_step);
|
||||||
nvm_write((void*) &N_storage.verbose_eip712, (void*) &value, sizeof(value));
|
|
||||||
display_settings(&ux_settings_flow_verbose_eip712_step);
|
|
||||||
}
|
}
|
||||||
#endif // HAVE_EIP712_FULL_SUPPORT
|
#endif // HAVE_EIP712_FULL_SUPPORT
|
||||||
|
|
||||||
|
#ifdef HAVE_DOMAIN_NAME
|
||||||
|
static void switch_settings_verbose_domain_name(void) {
|
||||||
|
toggle_setting(&N_storage.verbose_domain_name, &ux_settings_flow_verbose_domain_name_step);
|
||||||
|
}
|
||||||
|
#endif // HAVE_DOMAIN_NAME
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// clang-format off
|
// clang-format off
|
||||||
#ifdef TARGET_NANOS
|
#ifdef TARGET_NANOS
|
||||||
|
|||||||
@@ -8,6 +8,8 @@
|
|||||||
#include "ui_plugin.h"
|
#include "ui_plugin.h"
|
||||||
#include "common_ui.h"
|
#include "common_ui.h"
|
||||||
#include "plugins.h"
|
#include "plugins.h"
|
||||||
|
#include "domain_name.h"
|
||||||
|
#include "ui_domain_name.h"
|
||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
UX_STEP_NOCB(
|
UX_STEP_NOCB(
|
||||||
@@ -217,7 +219,19 @@ void ux_approve_tx(bool fromPlugin) {
|
|||||||
} else {
|
} else {
|
||||||
// We're in a regular transaction, just show the amount and the address
|
// We're in a regular transaction, just show the amount and the address
|
||||||
ux_approval_tx_flow[step++] = &ux_approval_amount_step;
|
ux_approval_tx_flow[step++] = &ux_approval_amount_step;
|
||||||
ux_approval_tx_flow[step++] = &ux_approval_address_step;
|
#ifdef HAVE_DOMAIN_NAME
|
||||||
|
uint64_t chain_id = get_chain_id();
|
||||||
|
if (has_domain_name(&chain_id, tmpContent.txContent.destination)) {
|
||||||
|
ux_approval_tx_flow[step++] = &ux_domain_name_step;
|
||||||
|
if (N_storage.verbose_domain_name) {
|
||||||
|
ux_approval_tx_flow[step++] = &ux_approval_address_step;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
#endif // HAVE_DOMAIN_NAME
|
||||||
|
ux_approval_tx_flow[step++] = &ux_approval_address_step;
|
||||||
|
#ifdef HAVE_DOMAIN_NAME
|
||||||
|
}
|
||||||
|
#endif // HAVE_DOMAIN_NAME
|
||||||
}
|
}
|
||||||
|
|
||||||
if (N_storage.displayNonce) {
|
if (N_storage.displayNonce) {
|
||||||
@@ -235,4 +249,4 @@ void ux_approve_tx(bool fromPlugin) {
|
|||||||
ux_approval_tx_flow[step++] = FLOW_END_STEP;
|
ux_approval_tx_flow[step++] = FLOW_END_STEP;
|
||||||
|
|
||||||
ux_flow_init(0, ux_approval_tx_flow, NULL);
|
ux_flow_init(0, ux_approval_tx_flow, NULL);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user