From 9bd6d956ca3ade77ad5738c542fd3c9c5c9494dc Mon Sep 17 00:00:00 2001 From: Daniel <71837281+darmiel@users.noreply.github.com> Date: Sat, 27 Aug 2022 00:44:12 +0200 Subject: [PATCH 1/2] fix[infrared]: select first button on remote change --- applications/gui/modules/button_panel.c | 9 +++++++++ applications/gui/modules/button_panel.h | 6 ++++++ .../scenes/common/infrared_scene_universal_common.c | 1 + 3 files changed, 16 insertions(+) diff --git a/applications/gui/modules/button_panel.c b/applications/gui/modules/button_panel.c index e3ae59a367..ff52ebd8c9 100644 --- a/applications/gui/modules/button_panel.c +++ b/applications/gui/modules/button_panel.c @@ -83,6 +83,15 @@ ButtonPanel* button_panel_alloc() { return button_panel; } +void button_panel_reset_selection(ButtonPanel* button_panel) { + with_view_model( + button_panel->view, (ButtonPanelModel * model) { + model->selected_item_x = 0; + model->selected_item_y = 0; + return true; + }); +} + void button_panel_reserve(ButtonPanel* button_panel, size_t reserve_x, size_t reserve_y) { furi_check(reserve_x > 0); furi_check(reserve_y > 0); diff --git a/applications/gui/modules/button_panel.h b/applications/gui/modules/button_panel.h index 0c17e3a7c6..9c944ca463 100644 --- a/applications/gui/modules/button_panel.h +++ b/applications/gui/modules/button_panel.h @@ -35,6 +35,12 @@ void button_panel_free(ButtonPanel* button_panel); */ void button_panel_reset(ButtonPanel* button_panel); +/** Resets selected_item_x and selected_item_y. + * + * @param button_panel ButtonPanel instance + */ +void button_panel_reset_selection(ButtonPanel* button_panel); + /** Reserve space for adding items. * * One does not simply use button_panel_add_item() without this function. It diff --git a/applications/infrared/scenes/common/infrared_scene_universal_common.c b/applications/infrared/scenes/common/infrared_scene_universal_common.c index 57ac81168e..9f1eabd24c 100644 --- a/applications/infrared/scenes/common/infrared_scene_universal_common.c +++ b/applications/infrared/scenes/common/infrared_scene_universal_common.c @@ -33,6 +33,7 @@ static void infrared_scene_universal_common_hide_popup(Infrared* infrared) { void infrared_scene_universal_common_on_enter(void* context) { Infrared* infrared = context; + button_panel_reset_selection(infrared->button_panel); view_stack_add_view(infrared->view_stack, button_panel_get_view(infrared->button_panel)); } From 885bb0c730dcbdfd90439e154b86336712e76862 Mon Sep 17 00:00:00 2001 From: Daniel <71837281+darmiel@users.noreply.github.com> Date: Sat, 27 Aug 2022 01:39:06 +0200 Subject: [PATCH 2/2] fix[infrared]: clear records on remote switch --- applications/infrared/infrared_brute_force.c | 4 ++++ applications/infrared/infrared_brute_force.h | 1 + .../infrared/scenes/common/infrared_scene_universal_common.c | 1 + 3 files changed, 6 insertions(+) diff --git a/applications/infrared/infrared_brute_force.c b/applications/infrared/infrared_brute_force.c index 8dbc230127..89272de7e7 100644 --- a/applications/infrared/infrared_brute_force.c +++ b/applications/infrared/infrared_brute_force.c @@ -35,6 +35,10 @@ InfraredBruteForce* infrared_brute_force_alloc() { return brute_force; } +void infrared_brute_force_clear_records(InfraredBruteForce* brute_force) { + InfraredBruteForceRecordDict_reset(brute_force->records); +} + void infrared_brute_force_free(InfraredBruteForce* brute_force) { furi_assert(!brute_force->ff); InfraredBruteForceRecordDict_clear(brute_force->records); diff --git a/applications/infrared/infrared_brute_force.h b/applications/infrared/infrared_brute_force.h index acf0d7b6e1..fff472e792 100644 --- a/applications/infrared/infrared_brute_force.h +++ b/applications/infrared/infrared_brute_force.h @@ -16,6 +16,7 @@ bool infrared_brute_force_start( bool infrared_brute_force_is_started(InfraredBruteForce* brute_force); void infrared_brute_force_stop(InfraredBruteForce* brute_force); bool infrared_brute_force_send_next(InfraredBruteForce* brute_force); +void infrared_brute_force_clear_records(InfraredBruteForce* brute_force); void infrared_brute_force_add_record( InfraredBruteForce* brute_force, uint32_t index, diff --git a/applications/infrared/scenes/common/infrared_scene_universal_common.c b/applications/infrared/scenes/common/infrared_scene_universal_common.c index 9f1eabd24c..1072549ffe 100644 --- a/applications/infrared/scenes/common/infrared_scene_universal_common.c +++ b/applications/infrared/scenes/common/infrared_scene_universal_common.c @@ -33,6 +33,7 @@ static void infrared_scene_universal_common_hide_popup(Infrared* infrared) { void infrared_scene_universal_common_on_enter(void* context) { Infrared* infrared = context; + infrared_brute_force_clear_records(infrared->brute_force); button_panel_reset_selection(infrared->button_panel); view_stack_add_view(infrared->view_stack, button_panel_get_view(infrared->button_panel)); }