mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-19 12:58:13 +00:00
fix(core): add missing tap to confirm screens to mercury
[no changelog]
This commit is contained in:
parent
b567d15732
commit
09fc0ebf3e
@ -328,6 +328,7 @@ async def handle_UnlockPath(msg: UnlockPath) -> protobuf.MessageType:
|
||||
title="Coinjoin",
|
||||
description=TR.coinjoin__access_account,
|
||||
verb=TR.buttons__access,
|
||||
prompt_screen=True,
|
||||
)
|
||||
|
||||
wire_types = (MessageType.GetAddress, MessageType.GetPublicKey, MessageType.SignTx)
|
||||
|
@ -155,6 +155,7 @@ async def _require_confirm_change_passphrase(use: bool) -> None:
|
||||
description=description,
|
||||
verb=verb,
|
||||
br_code=BRT_PROTECT_CALL,
|
||||
prompt_screen=True,
|
||||
)
|
||||
|
||||
|
||||
@ -171,6 +172,7 @@ async def _require_confirm_change_passphrase_source(
|
||||
TR.passphrase__title_source,
|
||||
description=description,
|
||||
br_code=BRT_PROTECT_CALL,
|
||||
prompt_screen=True,
|
||||
)
|
||||
|
||||
|
||||
@ -192,6 +194,7 @@ async def _require_confirm_change_display_rotation(rotation: int) -> None:
|
||||
description=TR.rotation__change_template,
|
||||
description_param=label,
|
||||
br_code=BRT_PROTECT_CALL,
|
||||
prompt_screen=True,
|
||||
)
|
||||
|
||||
|
||||
@ -211,6 +214,7 @@ async def _require_confirm_change_autolock_delay(delay_ms: int) -> None:
|
||||
description=TR.auto_lock__change_template,
|
||||
description_param=format_duration_ms(delay_ms, unit_plurals),
|
||||
br_code=BRT_PROTECT_CALL,
|
||||
prompt_screen=True,
|
||||
)
|
||||
|
||||
|
||||
@ -223,6 +227,7 @@ async def _require_confirm_safety_checks(level: SafetyCheckLevel) -> None:
|
||||
TR.safety_checks__title,
|
||||
description=TR.safety_checks__enforce_strict,
|
||||
br_code=BRT_PROTECT_CALL,
|
||||
prompt_screen=True,
|
||||
)
|
||||
elif level in (SafetyCheckLevel.PromptAlways, SafetyCheckLevel.PromptTemporarily):
|
||||
description = (
|
||||
@ -239,6 +244,7 @@ async def _require_confirm_safety_checks(level: SafetyCheckLevel) -> None:
|
||||
verb=TR.buttons__hold_to_confirm,
|
||||
reverse=True,
|
||||
br_code=BRT_PROTECT_CALL,
|
||||
prompt_screen=True,
|
||||
)
|
||||
else:
|
||||
raise ValueError # enum value out of range
|
||||
@ -253,6 +259,7 @@ async def _require_confirm_experimental_features(enable: bool) -> None:
|
||||
TR.experimental_mode__enable,
|
||||
reverse=True,
|
||||
br_code=BRT_PROTECT_CALL,
|
||||
prompt_screen=True,
|
||||
)
|
||||
|
||||
|
||||
@ -263,6 +270,7 @@ async def _require_confirm_hide_passphrase_from_host(enable: bool) -> None:
|
||||
TR.passphrase__title_hide,
|
||||
description=TR.passphrase__hide,
|
||||
br_code=BRT_PROTECT_CALL,
|
||||
prompt_screen=True,
|
||||
)
|
||||
|
||||
|
||||
@ -275,4 +283,5 @@ if utils.USE_HAPTIC:
|
||||
TR.haptic_feedback__enable if enable else TR.haptic_feedback__disable,
|
||||
subtitle=TR.haptic_feedback__subtitle,
|
||||
br_code=BRT_PROTECT_CALL,
|
||||
prompt_screen=True,
|
||||
)
|
||||
|
@ -25,6 +25,7 @@ async def authenticate_device(msg: AuthenticateDevice) -> AuthenticityProof:
|
||||
TR.authenticate__header,
|
||||
description=TR.authenticate__confirm_template.format(utils.MODEL_FULL_NAME),
|
||||
verb=TR.buttons__allow,
|
||||
prompt_screen=True,
|
||||
)
|
||||
|
||||
header = b"AuthenticateDevice:"
|
||||
|
@ -169,6 +169,7 @@ async def _require_confirm_change_language(
|
||||
description=TR.language__change_to_template.format(lang),
|
||||
verb="OK", # going for an international word, so it does not need translations
|
||||
br_code=ButtonRequestType.ProtectCall,
|
||||
prompt_screen=True,
|
||||
)
|
||||
|
||||
|
||||
|
@ -68,6 +68,7 @@ def _require_confirm_action(
|
||||
TR.wipe_code__title_settings,
|
||||
description=TR.wipe_code__turn_off,
|
||||
verb=TR.buttons__turn_off,
|
||||
prompt_screen=True,
|
||||
)
|
||||
|
||||
if not msg.remove and has_wipe_code:
|
||||
|
@ -20,6 +20,7 @@ async def get_next_u2f_counter(msg: GetNextU2FCounter) -> NextU2FCounter:
|
||||
TR.u2f__title_get,
|
||||
description=TR.u2f__get,
|
||||
br_code=ButtonRequestType.ProtectCall,
|
||||
prompt_screen=True,
|
||||
)
|
||||
|
||||
return NextU2FCounter(u2f_counter=storage_device.next_u2f_counter())
|
||||
|
@ -83,6 +83,7 @@ async def reboot_to_bootloader(msg: RebootToBootloader) -> NoReturn:
|
||||
TR.reboot_to_bootloader__title,
|
||||
TR.reboot_to_bootloader__restart,
|
||||
verb=TR.buttons__restart,
|
||||
prompt_screen=True,
|
||||
)
|
||||
boot_command = BootCommand.STOP_AND_WAIT
|
||||
boot_args = None
|
||||
|
@ -171,4 +171,6 @@ def require_confirm_sd_protect(msg: SdProtect) -> Awaitable[None]:
|
||||
else:
|
||||
raise ProcessError("Unknown operation")
|
||||
|
||||
return confirm_action("set_sd", TR.sd_card__title, description=text)
|
||||
return confirm_action(
|
||||
"set_sd", TR.sd_card__title, description=text, prompt_screen=True
|
||||
)
|
||||
|
@ -23,6 +23,7 @@ async def set_u2f_counter(msg: SetU2FCounter) -> Success:
|
||||
description_param=str(msg.u2f_counter),
|
||||
verb=TR.buttons__set,
|
||||
br_code=ButtonRequestType.ProtectCall,
|
||||
prompt_screen=True,
|
||||
)
|
||||
|
||||
storage_device.set_u2f_counter(msg.u2f_counter)
|
||||
|
@ -36,7 +36,13 @@ async def cipher_key_value(msg: CipherKeyValue) -> CipheredKeyValue:
|
||||
title = TR.misc__decrypt_value
|
||||
verb = TR.buttons__confirm
|
||||
|
||||
await confirm_action("cipher_key_value", title, description=msg.key, verb=verb)
|
||||
await confirm_action(
|
||||
"cipher_key_value",
|
||||
title,
|
||||
description=msg.key,
|
||||
verb=verb,
|
||||
prompt_screen=True,
|
||||
)
|
||||
|
||||
node = keychain.derive(msg.address_n)
|
||||
|
||||
|
@ -17,6 +17,7 @@ async def get_entropy(msg: GetEntropy) -> Entropy:
|
||||
TR.entropy__send,
|
||||
TR.words__know_what_your_doing,
|
||||
br_code=ButtonRequestType.ProtectCall,
|
||||
prompt_screen=True,
|
||||
)
|
||||
|
||||
size = min(msg.size, 1024)
|
||||
|
@ -65,6 +65,7 @@ async def require_confirm_watchkey() -> None:
|
||||
TR.monero__confirm_export,
|
||||
description=TR.monero__wanna_export_watchkey,
|
||||
br_code=BRT_SignTx,
|
||||
prompt_screen=True,
|
||||
)
|
||||
|
||||
|
||||
@ -74,6 +75,7 @@ async def require_confirm_keyimage_sync() -> None:
|
||||
TR.monero__confirm_ki_sync,
|
||||
description=TR.monero__wanna_sync_key_images,
|
||||
br_code=BRT_SignTx,
|
||||
prompt_screen=True,
|
||||
)
|
||||
|
||||
|
||||
@ -83,6 +85,7 @@ async def require_confirm_live_refresh() -> None:
|
||||
TR.monero__confirm_refresh,
|
||||
description=TR.monero__wanna_start_refresh,
|
||||
br_code=BRT_SignTx,
|
||||
prompt_screen=True,
|
||||
)
|
||||
|
||||
|
||||
@ -95,6 +98,7 @@ async def require_confirm_tx_key(export_key: bool = False) -> None:
|
||||
TR.monero__confirm_export,
|
||||
description=description,
|
||||
br_code=BRT_SignTx,
|
||||
prompt_screen=True,
|
||||
)
|
||||
|
||||
|
||||
|
@ -89,6 +89,7 @@ async def require_confirm_memo(memo_type: StellarMemoType, memo_text: str) -> No
|
||||
TR.stellar__no_memo_set,
|
||||
TR.stellar__exchanges_require_memo,
|
||||
br_code=ButtonRequestType.ConfirmOutput,
|
||||
prompt_screen=True,
|
||||
)
|
||||
|
||||
await layouts.confirm_blob(
|
||||
|
@ -84,6 +84,7 @@ async def confirm_fido_reset() -> bool:
|
||||
action=TR.fido__erase_credentials,
|
||||
description=TR.words__really_wanna,
|
||||
reverse=True,
|
||||
prompt_screen=True,
|
||||
)
|
||||
)
|
||||
return (await confirm) is trezorui2.CONFIRMED
|
||||
|
@ -56,6 +56,17 @@ def go_next(debug: "DebugLink", wait: bool = False) -> "LayoutContent" | None:
|
||||
raise RuntimeError("Unknown model")
|
||||
|
||||
|
||||
def tap_to_confirm(debug: "DebugLink", wait: bool = False) -> "LayoutContent" | None:
|
||||
if debug.model in (models.T2T1,):
|
||||
return debug.read_layout() # type: ignore
|
||||
elif debug.model in (models.T2B1,):
|
||||
return debug.read_layout() # type: ignore
|
||||
elif debug.model in (models.T3T1,):
|
||||
return debug.click(buttons.TAP_TO_CONFIRM, wait=wait)
|
||||
else:
|
||||
raise RuntimeError("Unknown model")
|
||||
|
||||
|
||||
def go_back(
|
||||
debug: "DebugLink", wait: bool = False, r_middle: bool = False
|
||||
) -> "LayoutContent" | None:
|
||||
|
@ -29,7 +29,7 @@ from .. import translations as TR
|
||||
from ..device_tests.bitcoin.payment_req import make_coinjoin_request
|
||||
from ..tx_cache import TxCache
|
||||
from . import recovery
|
||||
from .common import go_next, unlock_gesture
|
||||
from .common import go_next, tap_to_confirm, unlock_gesture
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from trezorlib.debuglink import DebugLink, LayoutContent
|
||||
@ -70,6 +70,8 @@ def set_autolock_delay(device_handler: "BackgroundDeviceHandler", delay_ms: int)
|
||||
)
|
||||
|
||||
layout = go_next(debug, wait=True)
|
||||
if debug.model in (models.T3T1,):
|
||||
layout = tap_to_confirm(debug, wait=True)
|
||||
assert layout.main_component() == "Homescreen"
|
||||
assert device_handler.result() == "Settings applied"
|
||||
|
||||
|
@ -74,6 +74,7 @@ class Situation(Enum):
|
||||
PIN_SETUP = 2
|
||||
PIN_CHANGE = 3
|
||||
WIPE_CODE_SETUP = 4
|
||||
PIN_INPUT_CANCEL = 5
|
||||
|
||||
|
||||
@contextmanager
|
||||
@ -88,10 +89,16 @@ def prepare(
|
||||
# without reseeding "again", the results are still random.
|
||||
debug.reseed(0)
|
||||
|
||||
tap = False
|
||||
|
||||
# Setup according to the wanted situation
|
||||
if situation == Situation.PIN_INPUT:
|
||||
# Any action triggering the PIN dialogue
|
||||
device_handler.run(device.apply_settings, auto_lock_delay_ms=300_000) # type: ignore
|
||||
tap = True
|
||||
if situation == Situation.PIN_INPUT_CANCEL:
|
||||
# Any action triggering the PIN dialogue
|
||||
device_handler.run(device.apply_settings, auto_lock_delay_ms=300_000) # type: ignore
|
||||
elif situation == Situation.PIN_SETUP:
|
||||
# Set new PIN
|
||||
device_handler.run(device.change_pin) # type: ignore
|
||||
@ -130,7 +137,13 @@ def prepare(
|
||||
debug.wait_layout()
|
||||
_assert_pin_entry(debug)
|
||||
yield debug
|
||||
go_next(debug)
|
||||
|
||||
if debug.model in (models.T3T1,) and tap:
|
||||
go_next(debug, wait=True)
|
||||
debug.click(buttons.TAP_TO_CONFIRM)
|
||||
else:
|
||||
go_next(debug)
|
||||
|
||||
device_handler.result()
|
||||
|
||||
|
||||
@ -290,7 +303,7 @@ def test_pin_incorrect(device_handler: "BackgroundDeviceHandler"):
|
||||
@pytest.mark.skip_t2b1("TODO: will we support cancelling on T2B1?")
|
||||
@pytest.mark.setup_client(pin=PIN4)
|
||||
def test_pin_cancel(device_handler: "BackgroundDeviceHandler"):
|
||||
with PIN_CANCELLED, prepare(device_handler) as debug:
|
||||
with PIN_CANCELLED, prepare(device_handler, Situation.PIN_INPUT_CANCEL) as debug:
|
||||
_input_pin(debug, PIN4)
|
||||
_see_pin(debug)
|
||||
_delete_pin(debug, len(PIN4))
|
||||
|
Loading…
Reference in New Issue
Block a user