From fdb7f04f31a5c51b62cb726979bd9b180e2f7602 Mon Sep 17 00:00:00 2001 From: Lukas Bielesch Date: Fri, 29 Nov 2024 19:58:59 +0100 Subject: [PATCH] chore(core): add missing parameter to set_brightness function --- core/.changelog.d/4410.fixed | 1 + .../ui/model_mercury/flow/set_brightness.rs | 11 ++++++++- core/src/apps/management/set_brightness.py | 4 ++-- tests/device_tests/test_msg_applysettings.py | 23 +++++++++++++++++-- 4 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 core/.changelog.d/4410.fixed diff --git a/core/.changelog.d/4410.fixed b/core/.changelog.d/4410.fixed new file mode 100644 index 0000000000..aff68581c5 --- /dev/null +++ b/core/.changelog.d/4410.fixed @@ -0,0 +1 @@ +Add optional value parameter in brightness setting flow. diff --git a/core/embed/rust/src/ui/model_mercury/flow/set_brightness.rs b/core/embed/rust/src/ui/model_mercury/flow/set_brightness.rs index 938a96d3a6..f3c384d775 100644 --- a/core/embed/rust/src/ui/model_mercury/flow/set_brightness.rs +++ b/core/embed/rust/src/ui/model_mercury/flow/set_brightness.rs @@ -65,7 +65,16 @@ impl FlowController for SetBrightness { static BRIGHTNESS: AtomicU8 = AtomicU8::new(0); pub fn new_set_brightness(brightness: Option) -> Result { - let brightness = brightness.unwrap_or(theme::backlight::get_backlight_normal()); + let brightness = brightness + .map(|value| { + // If brightness value is provided, set display brightness to that value + display::backlight(value as _); + BRIGHTNESS.store(value as u8, Ordering::Relaxed); + let _ = storage::set_brightness(BRIGHTNESS.load(Ordering::Relaxed)); + value + }) + .unwrap_or_else(|| theme::backlight::get_backlight_normal() as _); + let content_slider = Frame::left_aligned( TR::brightness__title.into(), NumberInputSliderDialog::new( diff --git a/core/src/apps/management/set_brightness.py b/core/src/apps/management/set_brightness.py index 0cc7dc34f3..93dbe6e35f 100644 --- a/core/src/apps/management/set_brightness.py +++ b/core/src/apps/management/set_brightness.py @@ -4,7 +4,7 @@ if TYPE_CHECKING: from trezor.messages import SetBrightness, Success -async def set_brightness(_msg: SetBrightness) -> Success: +async def set_brightness(msg: SetBrightness) -> Success: import storage.device as storage_device from trezor.messages import Success from trezor.ui.layouts import set_brightness @@ -13,5 +13,5 @@ async def set_brightness(_msg: SetBrightness) -> Success: if not storage_device.is_initialized(): raise NotInitialized("Device is not initialized") - await set_brightness() + await set_brightness(msg.value) return Success(message="Settings applied") diff --git a/tests/device_tests/test_msg_applysettings.py b/tests/device_tests/test_msg_applysettings.py index 65ea935748..30c8c1c42c 100644 --- a/tests/device_tests/test_msg_applysettings.py +++ b/tests/device_tests/test_msg_applysettings.py @@ -424,13 +424,32 @@ def test_label_too_long(client: Client): @pytest.mark.models(skip=["legacy", "safe3"]) +@pytest.mark.parametrize( + "value", + [ + pytest.param(None, id="none_default"), + pytest.param( + -1, + marks=pytest.mark.xfail(), + id="negative_value", + ), + pytest.param(0, id="0_min_value"), + pytest.param(128, id="128"), + pytest.param(255, id="255_max_value"), + pytest.param( + 256, + marks=pytest.mark.xfail(), + id="256_too_high", + ), + ], +) @pytest.mark.setup_client(pin=None) -def test_set_brightness(client: Client): +def test_set_brightness(client: Client, value: int | None): with client: assert ( device.set_brightness( client, - None, + value, ) == "Settings applied" )