Merge pull request #50 from darmiel/fix/infrared-buttons

fix[infrared]: fixed crash if button out of bounds and sending wrong signals
This commit is contained in:
MX 2022-08-27 03:06:15 +03:00 committed by GitHub
commit eb28dc2e20
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 22 additions and 0 deletions

View file

@ -83,6 +83,15 @@ ButtonPanel* button_panel_alloc() {
return button_panel; 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) { void button_panel_reserve(ButtonPanel* button_panel, size_t reserve_x, size_t reserve_y) {
furi_check(reserve_x > 0); furi_check(reserve_x > 0);
furi_check(reserve_y > 0); furi_check(reserve_y > 0);

View file

@ -35,6 +35,12 @@ void button_panel_free(ButtonPanel* button_panel);
*/ */
void button_panel_reset(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. /** Reserve space for adding items.
* *
* One does not simply use button_panel_add_item() without this function. It * One does not simply use button_panel_add_item() without this function. It

View file

@ -35,6 +35,10 @@ InfraredBruteForce* infrared_brute_force_alloc() {
return brute_force; 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) { void infrared_brute_force_free(InfraredBruteForce* brute_force) {
furi_assert(!brute_force->ff); furi_assert(!brute_force->ff);
InfraredBruteForceRecordDict_clear(brute_force->records); InfraredBruteForceRecordDict_clear(brute_force->records);

View file

@ -16,6 +16,7 @@ bool infrared_brute_force_start(
bool infrared_brute_force_is_started(InfraredBruteForce* brute_force); bool infrared_brute_force_is_started(InfraredBruteForce* brute_force);
void infrared_brute_force_stop(InfraredBruteForce* brute_force); void infrared_brute_force_stop(InfraredBruteForce* brute_force);
bool infrared_brute_force_send_next(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( void infrared_brute_force_add_record(
InfraredBruteForce* brute_force, InfraredBruteForce* brute_force,
uint32_t index, uint32_t index,

View file

@ -33,6 +33,8 @@ static void infrared_scene_universal_common_hide_popup(Infrared* infrared) {
void infrared_scene_universal_common_on_enter(void* context) { void infrared_scene_universal_common_on_enter(void* context) {
Infrared* infrared = 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)); view_stack_add_view(infrared->view_stack, button_panel_get_view(infrared->button_panel));
} }