[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>
This commit is contained in:
		
							parent
							
								
									55b4ff8e0c
								
							
						
					
					
						commit
						d147190d61
					
				| @ -305,22 +305,6 @@ void ibutton_text_store_clear(iButton* ibutton) { | |||||||
|     memset(ibutton->text_store, 0, IBUTTON_TEXT_STORE_SIZE); |     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) { | void ibutton_notification_message(iButton* ibutton, uint32_t message) { | ||||||
|     furi_assert(message < sizeof(ibutton_notification_sequences) / sizeof(NotificationSequence*)); |     furi_assert(message < sizeof(ibutton_notification_sequences) / sizeof(NotificationSequence*)); | ||||||
|     notification_message(ibutton->notifications, ibutton_notification_sequences[message]); |     notification_message(ibutton->notifications, ibutton_notification_sequences[message]); | ||||||
|  | |||||||
| @ -83,8 +83,4 @@ bool ibutton_save_key(iButton* ibutton, const char* key_name); | |||||||
| bool ibutton_delete_key(iButton* ibutton); | bool ibutton_delete_key(iButton* ibutton); | ||||||
| void ibutton_text_store_set(iButton* ibutton, const char* text, ...); | void ibutton_text_store_set(iButton* ibutton, const char* text, ...); | ||||||
| void ibutton_text_store_clear(iButton* ibutton); | 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); | void ibutton_notification_message(iButton* ibutton, uint32_t message); | ||||||
|  | |||||||
| @ -61,8 +61,8 @@ bool ibutton_scene_save_name_on_event(void* context, SceneManagerEvent event) { | |||||||
|             } else { |             } else { | ||||||
|                 const uint32_t possible_scenes[] = { |                 const uint32_t possible_scenes[] = { | ||||||
|                     iButtonSceneReadKeyMenu, iButtonSceneSavedKeyMenu, iButtonSceneAddType}; |                     iButtonSceneReadKeyMenu, iButtonSceneSavedKeyMenu, iButtonSceneAddType}; | ||||||
|                 ibutton_switch_to_previous_scene_one_of( |                 scene_manager_search_and_switch_to_previous_scene_one_of( | ||||||
|                     ibutton, possible_scenes, sizeof(possible_scenes) / sizeof(uint32_t)); |                     ibutton->scene_manager, possible_scenes, COUNT_OF(possible_scenes)); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -31,8 +31,8 @@ bool ibutton_scene_save_success_on_event(void* context, SceneManagerEvent event) | |||||||
|         if(event.event == iButtonCustomEventBack) { |         if(event.event == iButtonCustomEventBack) { | ||||||
|             const uint32_t possible_scenes[] = { |             const uint32_t possible_scenes[] = { | ||||||
|                 iButtonSceneReadKeyMenu, iButtonSceneSavedKeyMenu, iButtonSceneAddType}; |                 iButtonSceneReadKeyMenu, iButtonSceneSavedKeyMenu, iButtonSceneAddType}; | ||||||
|             ibutton_switch_to_previous_scene_one_of( |             scene_manager_search_and_switch_to_previous_scene_one_of( | ||||||
|                 ibutton, possible_scenes, sizeof(possible_scenes) / sizeof(uint32_t)); |                 ibutton->scene_manager, possible_scenes, COUNT_OF(possible_scenes)); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -31,8 +31,8 @@ bool ibutton_scene_write_success_on_event(void* context, SceneManagerEvent event | |||||||
|         consumed = true; |         consumed = true; | ||||||
|         if(event.event == iButtonCustomEventBack) { |         if(event.event == iButtonCustomEventBack) { | ||||||
|             const uint32_t possible_scenes[] = {iButtonSceneReadKeyMenu, iButtonSceneStart}; |             const uint32_t possible_scenes[] = {iButtonSceneReadKeyMenu, iButtonSceneStart}; | ||||||
|             ibutton_switch_to_previous_scene_one_of( |             scene_manager_search_and_switch_to_previous_scene_one_of( | ||||||
|                 ibutton, possible_scenes, sizeof(possible_scenes) / sizeof(uint32_t)); |                 ibutton->scene_manager, possible_scenes, COUNT_OF(possible_scenes)); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -97,7 +97,7 @@ bool infrared_scene_edit_delete_on_event(void* context, SceneManagerEvent event) | |||||||
|             } else { |             } else { | ||||||
|                 const uint32_t possible_scenes[] = {InfraredSceneRemoteList, InfraredSceneStart}; |                 const uint32_t possible_scenes[] = {InfraredSceneRemoteList, InfraredSceneStart}; | ||||||
|                 scene_manager_search_and_switch_to_previous_scene_one_of( |                 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; |             consumed = true; | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -28,8 +28,10 @@ bool infrared_scene_edit_delete_done_on_event(void* context, SceneManagerEvent e | |||||||
|                     scene_manager, InfraredSceneRemote); |                     scene_manager, InfraredSceneRemote); | ||||||
|             } else if(edit_target == InfraredEditTargetRemote) { |             } else if(edit_target == InfraredEditTargetRemote) { | ||||||
|                 const uint32_t possible_scenes[] = {InfraredSceneStart, InfraredSceneRemoteList}; |                 const uint32_t possible_scenes[] = {InfraredSceneStart, InfraredSceneRemoteList}; | ||||||
|                 scene_manager_search_and_switch_to_previous_scene_one_of( |                 if(!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))) { | ||||||
|  |                     view_dispatcher_stop(infrared->view_dispatcher); | ||||||
|  |                 } | ||||||
|             } else { |             } else { | ||||||
|                 furi_assert(0); |                 furi_assert(0); | ||||||
|             } |             } | ||||||
|  | |||||||
| @ -21,7 +21,10 @@ bool infrared_scene_edit_rename_done_on_event(void* context, SceneManagerEvent e | |||||||
| 
 | 
 | ||||||
|     if(event.type == SceneManagerEventTypeCustom) { |     if(event.type == SceneManagerEventTypeCustom) { | ||||||
|         if(event.event == InfraredCustomEventTypePopupClosed) { |         if(event.event == InfraredCustomEventTypePopupClosed) { | ||||||
|  |             if(!scene_manager_search_and_switch_to_previous_scene( | ||||||
|  |                    infrared->scene_manager, InfraredSceneRemote)) { | ||||||
|                 scene_manager_next_scene(infrared->scene_manager, InfraredSceneRemote); |                 scene_manager_next_scene(infrared->scene_manager, InfraredSceneRemote); | ||||||
|  |             } | ||||||
|             consumed = true; |             consumed = true; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -29,7 +29,10 @@ bool infrared_scene_learn_done_on_event(void* context, SceneManagerEvent event) | |||||||
| 
 | 
 | ||||||
|     if(event.type == SceneManagerEventTypeCustom) { |     if(event.type == SceneManagerEventTypeCustom) { | ||||||
|         if(event.event == InfraredCustomEventTypePopupClosed) { |         if(event.event == InfraredCustomEventTypePopupClosed) { | ||||||
|  |             if(!scene_manager_search_and_switch_to_previous_scene( | ||||||
|  |                    infrared->scene_manager, InfraredSceneRemote)) { | ||||||
|                 scene_manager_next_scene(infrared->scene_manager, InfraredSceneRemote); |                 scene_manager_next_scene(infrared->scene_manager, InfraredSceneRemote); | ||||||
|  |             } | ||||||
|             consumed = true; |             consumed = true; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -78,7 +78,7 @@ bool infrared_scene_remote_on_event(void* context, SceneManagerEvent event) { | |||||||
|     if(event.type == SceneManagerEventTypeBack) { |     if(event.type == SceneManagerEventTypeBack) { | ||||||
|         const uint32_t possible_scenes[] = {InfraredSceneRemoteList, InfraredSceneStart}; |         const uint32_t possible_scenes[] = {InfraredSceneRemoteList, InfraredSceneStart}; | ||||||
|         consumed = scene_manager_search_and_switch_to_previous_scene_one_of( |         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) { |     } else if(event.type == SceneManagerEventTypeCustom) { | ||||||
|         const uint16_t custom_type = infrared_custom_event_get_type(event.event); |         const uint16_t custom_type = infrared_custom_event_get_type(event.event); | ||||||
|         const int16_t button_index = infrared_custom_event_get_value(event.event); |         const int16_t button_index = infrared_custom_event_get_value(event.event); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Georgii Surkov
						Georgii Surkov