diff options
author | Georgii Surkov <37121527+gsurkov@users.noreply.github.com> | 2022-08-05 18:38:20 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-05 18:38:20 +0300 |
commit | d147190d6173f427bbedce988cb28eff22ca692e (patch) | |
tree | 635d20f7df79e6823e967c77b9369a6c70e3df50 /applications | |
parent | 55b4ff8e0c23ba64a3c82b8f7736b20d2022f295 (diff) |
[FL-2717] Fix unexpected behaviour when opening a remote from outside (#1538)
* Fix unexpected behaviour when opening remote from outside
* Same fix for editing button name
* Exit application correctly if remote was deleted
* Remove duplicate function from ibutton
* Use COUNT_OF macro
Co-authored-by: あく <alleteam@gmail.com>
Diffstat (limited to 'applications')
10 files changed, 20 insertions, 32 deletions
diff --git a/applications/ibutton/ibutton.c b/applications/ibutton/ibutton.c index 304c057a..b30a4c61 100644 --- a/applications/ibutton/ibutton.c +++ b/applications/ibutton/ibutton.c @@ -305,22 +305,6 @@ void ibutton_text_store_clear(iButton* ibutton) { memset(ibutton->text_store, 0, IBUTTON_TEXT_STORE_SIZE); } -void ibutton_switch_to_previous_scene_one_of( - iButton* ibutton, - const uint32_t* scene_ids, - size_t scene_ids_size) { - furi_assert(scene_ids_size); - SceneManager* scene_manager = ibutton->scene_manager; - - for(size_t i = 0; i < scene_ids_size; ++i) { - const uint32_t scene_id = scene_ids[i]; - if(scene_manager_has_previous_scene(scene_manager, scene_id)) { - scene_manager_search_and_switch_to_previous_scene(scene_manager, scene_id); - return; - } - } -} - void ibutton_notification_message(iButton* ibutton, uint32_t message) { furi_assert(message < sizeof(ibutton_notification_sequences) / sizeof(NotificationSequence*)); notification_message(ibutton->notifications, ibutton_notification_sequences[message]); diff --git a/applications/ibutton/ibutton_i.h b/applications/ibutton/ibutton_i.h index 9d4354d0..fd11b8c1 100644 --- a/applications/ibutton/ibutton_i.h +++ b/applications/ibutton/ibutton_i.h @@ -83,8 +83,4 @@ bool ibutton_save_key(iButton* ibutton, const char* key_name); bool ibutton_delete_key(iButton* ibutton); void ibutton_text_store_set(iButton* ibutton, const char* text, ...); void ibutton_text_store_clear(iButton* ibutton); -void ibutton_switch_to_previous_scene_one_of( - iButton* ibutton, - const uint32_t* scene_ids, - size_t scene_ids_size); void ibutton_notification_message(iButton* ibutton, uint32_t message); diff --git a/applications/ibutton/scenes/ibutton_scene_save_name.c b/applications/ibutton/scenes/ibutton_scene_save_name.c index 6caf5d2d..be640387 100644 --- a/applications/ibutton/scenes/ibutton_scene_save_name.c +++ b/applications/ibutton/scenes/ibutton_scene_save_name.c @@ -61,8 +61,8 @@ bool ibutton_scene_save_name_on_event(void* context, SceneManagerEvent event) { } else { const uint32_t possible_scenes[] = { iButtonSceneReadKeyMenu, iButtonSceneSavedKeyMenu, iButtonSceneAddType}; - ibutton_switch_to_previous_scene_one_of( - ibutton, possible_scenes, sizeof(possible_scenes) / sizeof(uint32_t)); + scene_manager_search_and_switch_to_previous_scene_one_of( + ibutton->scene_manager, possible_scenes, COUNT_OF(possible_scenes)); } } } diff --git a/applications/ibutton/scenes/ibutton_scene_save_success.c b/applications/ibutton/scenes/ibutton_scene_save_success.c index dffda6a0..6c24a897 100644 --- a/applications/ibutton/scenes/ibutton_scene_save_success.c +++ b/applications/ibutton/scenes/ibutton_scene_save_success.c @@ -31,8 +31,8 @@ bool ibutton_scene_save_success_on_event(void* context, SceneManagerEvent event) if(event.event == iButtonCustomEventBack) { const uint32_t possible_scenes[] = { iButtonSceneReadKeyMenu, iButtonSceneSavedKeyMenu, iButtonSceneAddType}; - ibutton_switch_to_previous_scene_one_of( - ibutton, possible_scenes, sizeof(possible_scenes) / sizeof(uint32_t)); + scene_manager_search_and_switch_to_previous_scene_one_of( + ibutton->scene_manager, possible_scenes, COUNT_OF(possible_scenes)); } } diff --git a/applications/ibutton/scenes/ibutton_scene_write_success.c b/applications/ibutton/scenes/ibutton_scene_write_success.c index 6abafbb3..3acb1dea 100644 --- a/applications/ibutton/scenes/ibutton_scene_write_success.c +++ b/applications/ibutton/scenes/ibutton_scene_write_success.c @@ -31,8 +31,8 @@ bool ibutton_scene_write_success_on_event(void* context, SceneManagerEvent event consumed = true; if(event.event == iButtonCustomEventBack) { const uint32_t possible_scenes[] = {iButtonSceneReadKeyMenu, iButtonSceneStart}; - ibutton_switch_to_previous_scene_one_of( - ibutton, possible_scenes, sizeof(possible_scenes) / sizeof(uint32_t)); + scene_manager_search_and_switch_to_previous_scene_one_of( + ibutton->scene_manager, possible_scenes, COUNT_OF(possible_scenes)); } } diff --git a/applications/infrared/scenes/infrared_scene_edit_delete.c b/applications/infrared/scenes/infrared_scene_edit_delete.c index e7985148..4dfc054f 100644 --- a/applications/infrared/scenes/infrared_scene_edit_delete.c +++ b/applications/infrared/scenes/infrared_scene_edit_delete.c @@ -97,7 +97,7 @@ bool infrared_scene_edit_delete_on_event(void* context, SceneManagerEvent event) } else { const uint32_t possible_scenes[] = {InfraredSceneRemoteList, InfraredSceneStart}; scene_manager_search_and_switch_to_previous_scene_one_of( - scene_manager, possible_scenes, sizeof(possible_scenes) / sizeof(uint32_t)); + scene_manager, possible_scenes, COUNT_OF(possible_scenes)); } consumed = true; } diff --git a/applications/infrared/scenes/infrared_scene_edit_delete_done.c b/applications/infrared/scenes/infrared_scene_edit_delete_done.c index 4502abbd..49a299d2 100644 --- a/applications/infrared/scenes/infrared_scene_edit_delete_done.c +++ b/applications/infrared/scenes/infrared_scene_edit_delete_done.c @@ -28,8 +28,10 @@ bool infrared_scene_edit_delete_done_on_event(void* context, SceneManagerEvent e scene_manager, InfraredSceneRemote); } else if(edit_target == InfraredEditTargetRemote) { const uint32_t possible_scenes[] = {InfraredSceneStart, InfraredSceneRemoteList}; - scene_manager_search_and_switch_to_previous_scene_one_of( - scene_manager, possible_scenes, sizeof(possible_scenes) / sizeof(uint32_t)); + if(!scene_manager_search_and_switch_to_previous_scene_one_of( + scene_manager, possible_scenes, COUNT_OF(possible_scenes))) { + view_dispatcher_stop(infrared->view_dispatcher); + } } else { furi_assert(0); } diff --git a/applications/infrared/scenes/infrared_scene_edit_rename_done.c b/applications/infrared/scenes/infrared_scene_edit_rename_done.c index 54b18ab6..6c7096e1 100644 --- a/applications/infrared/scenes/infrared_scene_edit_rename_done.c +++ b/applications/infrared/scenes/infrared_scene_edit_rename_done.c @@ -21,7 +21,10 @@ bool infrared_scene_edit_rename_done_on_event(void* context, SceneManagerEvent e if(event.type == SceneManagerEventTypeCustom) { if(event.event == InfraredCustomEventTypePopupClosed) { - scene_manager_next_scene(infrared->scene_manager, InfraredSceneRemote); + if(!scene_manager_search_and_switch_to_previous_scene( + infrared->scene_manager, InfraredSceneRemote)) { + scene_manager_next_scene(infrared->scene_manager, InfraredSceneRemote); + } consumed = true; } } diff --git a/applications/infrared/scenes/infrared_scene_learn_done.c b/applications/infrared/scenes/infrared_scene_learn_done.c index eb6cced8..7d357171 100644 --- a/applications/infrared/scenes/infrared_scene_learn_done.c +++ b/applications/infrared/scenes/infrared_scene_learn_done.c @@ -29,7 +29,10 @@ bool infrared_scene_learn_done_on_event(void* context, SceneManagerEvent event) if(event.type == SceneManagerEventTypeCustom) { if(event.event == InfraredCustomEventTypePopupClosed) { - scene_manager_next_scene(infrared->scene_manager, InfraredSceneRemote); + if(!scene_manager_search_and_switch_to_previous_scene( + infrared->scene_manager, InfraredSceneRemote)) { + scene_manager_next_scene(infrared->scene_manager, InfraredSceneRemote); + } consumed = true; } } diff --git a/applications/infrared/scenes/infrared_scene_remote.c b/applications/infrared/scenes/infrared_scene_remote.c index 3cd5a9aa..bcac5881 100644 --- a/applications/infrared/scenes/infrared_scene_remote.c +++ b/applications/infrared/scenes/infrared_scene_remote.c @@ -78,7 +78,7 @@ bool infrared_scene_remote_on_event(void* context, SceneManagerEvent event) { if(event.type == SceneManagerEventTypeBack) { const uint32_t possible_scenes[] = {InfraredSceneRemoteList, InfraredSceneStart}; consumed = scene_manager_search_and_switch_to_previous_scene_one_of( - scene_manager, possible_scenes, sizeof(possible_scenes) / sizeof(uint32_t)); + scene_manager, possible_scenes, COUNT_OF(possible_scenes)); } else if(event.type == SceneManagerEventTypeCustom) { const uint16_t custom_type = infrared_custom_event_get_type(event.event); const int16_t button_index = infrared_custom_event_get_value(event.event); |