[FL-2548] Infrared: show error if no SD card/databases (#1337)
* Add Database error scene * More general popup callback name
This commit is contained in:
		
							parent
							
								
									eb31fed0e2
								
							
						
					
					
						commit
						92f763e553
					
				| @ -8,7 +8,9 @@ static const NotificationSequence* infrared_notification_sequences[] = { | |||||||
|     &sequence_set_only_green_255, |     &sequence_set_only_green_255, | ||||||
|     &sequence_reset_green, |     &sequence_reset_green, | ||||||
|     &sequence_blink_cyan_10, |     &sequence_blink_cyan_10, | ||||||
|     &sequence_blink_magenta_10}; |     &sequence_blink_magenta_10, | ||||||
|  |     &sequence_solid_yellow, | ||||||
|  |     &sequence_reset_rgb}; | ||||||
| 
 | 
 | ||||||
| static void infrared_make_app_folder(Infrared* infrared) { | static void infrared_make_app_folder(Infrared* infrared) { | ||||||
|     if(!storage_simply_mkdir(infrared->storage, INFRARED_APP_FOLDER)) { |     if(!storage_simply_mkdir(infrared->storage, INFRARED_APP_FOLDER)) { | ||||||
| @ -360,11 +362,11 @@ void infrared_text_input_callback(void* context) { | |||||||
|         infrared->view_dispatcher, InfraredCustomEventTypeTextEditDone); |         infrared->view_dispatcher, InfraredCustomEventTypeTextEditDone); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void infrared_popup_timeout_callback(void* context) { | void infrared_popup_closed_callback(void* context) { | ||||||
|     furi_assert(context); |     furi_assert(context); | ||||||
|     Infrared* infrared = context; |     Infrared* infrared = context; | ||||||
|     view_dispatcher_send_custom_event( |     view_dispatcher_send_custom_event( | ||||||
|         infrared->view_dispatcher, InfraredCustomEventTypePopupTimeout); |         infrared->view_dispatcher, InfraredCustomEventTypePopupClosed); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int32_t infrared_app(void* p) { | int32_t infrared_app(void* p) { | ||||||
|  | |||||||
| @ -11,7 +11,7 @@ enum InfraredCustomEventType { | |||||||
|     InfraredCustomEventTypeTransmitStopped, |     InfraredCustomEventTypeTransmitStopped, | ||||||
|     InfraredCustomEventTypeSignalReceived, |     InfraredCustomEventTypeSignalReceived, | ||||||
|     InfraredCustomEventTypeTextEditDone, |     InfraredCustomEventTypeTextEditDone, | ||||||
|     InfraredCustomEventTypePopupTimeout, |     InfraredCustomEventTypePopupClosed, | ||||||
|     InfraredCustomEventTypeButtonSelected, |     InfraredCustomEventTypeButtonSelected, | ||||||
|     InfraredCustomEventTypeBackPressed, |     InfraredCustomEventTypeBackPressed, | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -113,6 +113,8 @@ typedef enum { | |||||||
|     InfraredNotificationMessageGreenOff, |     InfraredNotificationMessageGreenOff, | ||||||
|     InfraredNotificationMessageBlinkRead, |     InfraredNotificationMessageBlinkRead, | ||||||
|     InfraredNotificationMessageBlinkSend, |     InfraredNotificationMessageBlinkSend, | ||||||
|  |     InfraredNotificationMessageYellowOn, | ||||||
|  |     InfraredNotificationMessageYellowOff, | ||||||
| } InfraredNotificationMessage; | } InfraredNotificationMessage; | ||||||
| 
 | 
 | ||||||
| bool infrared_add_remote_with_button(Infrared* infrared, const char* name, InfraredSignal* signal); | bool infrared_add_remote_with_button(Infrared* infrared, const char* name, InfraredSignal* signal); | ||||||
| @ -129,4 +131,4 @@ void infrared_show_loading_popup(Infrared* infrared, bool show); | |||||||
| void infrared_signal_sent_callback(void* context); | void infrared_signal_sent_callback(void* context); | ||||||
| void infrared_signal_received_callback(void* context, InfraredWorkerSignal* received_signal); | void infrared_signal_received_callback(void* context, InfraredWorkerSignal* received_signal); | ||||||
| void infrared_text_input_callback(void* context); | void infrared_text_input_callback(void* context); | ||||||
| void infrared_popup_timeout_callback(void* context); | void infrared_popup_closed_callback(void* context); | ||||||
|  | |||||||
| @ -15,3 +15,4 @@ ADD_SCENE(infrared, remote_list, RemoteList) | |||||||
| ADD_SCENE(infrared, universal, Universal) | ADD_SCENE(infrared, universal, Universal) | ||||||
| ADD_SCENE(infrared, universal_tv, UniversalTV) | ADD_SCENE(infrared, universal_tv, UniversalTV) | ||||||
| ADD_SCENE(infrared, debug, Debug) | ADD_SCENE(infrared, debug, Debug) | ||||||
|  | ADD_SCENE(infrared, error_databases, ErrorDatabases) | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ void infrared_scene_edit_delete_done_on_enter(void* context) { | |||||||
|     popup_set_icon(popup, 0, 2, &I_DolphinMafia_115x62); |     popup_set_icon(popup, 0, 2, &I_DolphinMafia_115x62); | ||||||
|     popup_set_header(popup, "Deleted", 83, 19, AlignLeft, AlignBottom); |     popup_set_header(popup, "Deleted", 83, 19, AlignLeft, AlignBottom); | ||||||
| 
 | 
 | ||||||
|     popup_set_callback(popup, infrared_popup_timeout_callback); |     popup_set_callback(popup, infrared_popup_closed_callback); | ||||||
|     popup_set_context(popup, context); |     popup_set_context(popup, context); | ||||||
|     popup_set_timeout(popup, 1500); |     popup_set_timeout(popup, 1500); | ||||||
|     popup_enable_timeout(popup); |     popup_enable_timeout(popup); | ||||||
| @ -21,7 +21,7 @@ bool infrared_scene_edit_delete_done_on_event(void* context, SceneManagerEvent e | |||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
| 
 | 
 | ||||||
|     if(event.type == SceneManagerEventTypeCustom) { |     if(event.type == SceneManagerEventTypeCustom) { | ||||||
|         if(event.event == InfraredCustomEventTypePopupTimeout) { |         if(event.event == InfraredCustomEventTypePopupClosed) { | ||||||
|             const InfraredEditTarget edit_target = infrared->app_state.edit_target; |             const InfraredEditTarget edit_target = infrared->app_state.edit_target; | ||||||
|             if(edit_target == InfraredEditTargetButton) { |             if(edit_target == InfraredEditTargetButton) { | ||||||
|                 scene_manager_search_and_switch_to_previous_scene( |                 scene_manager_search_and_switch_to_previous_scene( | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ void infrared_scene_edit_rename_done_on_enter(void* context) { | |||||||
|     popup_set_icon(popup, 32, 5, &I_DolphinNice_96x59); |     popup_set_icon(popup, 32, 5, &I_DolphinNice_96x59); | ||||||
|     popup_set_header(popup, "Saved!", 5, 7, AlignLeft, AlignTop); |     popup_set_header(popup, "Saved!", 5, 7, AlignLeft, AlignTop); | ||||||
| 
 | 
 | ||||||
|     popup_set_callback(popup, infrared_popup_timeout_callback); |     popup_set_callback(popup, infrared_popup_closed_callback); | ||||||
|     popup_set_context(popup, context); |     popup_set_context(popup, context); | ||||||
|     popup_set_timeout(popup, 1500); |     popup_set_timeout(popup, 1500); | ||||||
|     popup_enable_timeout(popup); |     popup_enable_timeout(popup); | ||||||
| @ -20,7 +20,7 @@ bool infrared_scene_edit_rename_done_on_event(void* context, SceneManagerEvent e | |||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
| 
 | 
 | ||||||
|     if(event.type == SceneManagerEventTypeCustom) { |     if(event.type == SceneManagerEventTypeCustom) { | ||||||
|         if(event.event == InfraredCustomEventTypePopupTimeout) { |         if(event.event == InfraredCustomEventTypePopupClosed) { | ||||||
|             scene_manager_next_scene(infrared->scene_manager, InfraredSceneRemote); |             scene_manager_next_scene(infrared->scene_manager, InfraredSceneRemote); | ||||||
|             consumed = true; |             consumed = true; | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -0,0 +1,37 @@ | |||||||
|  | #include "../infrared_i.h" | ||||||
|  | 
 | ||||||
|  | void infrared_scene_error_databases_on_enter(void* context) { | ||||||
|  |     Infrared* infrared = context; | ||||||
|  |     Popup* popup = infrared->popup; | ||||||
|  | 
 | ||||||
|  |     popup_set_icon(popup, 5, 11, &I_SDQuestion_35x43); | ||||||
|  |     popup_set_text( | ||||||
|  |         popup, "Function requires\nSD card with fresh\ndatabases.", 47, 17, AlignLeft, AlignTop); | ||||||
|  | 
 | ||||||
|  |     popup_set_context(popup, context); | ||||||
|  |     popup_set_callback(popup, infrared_popup_closed_callback); | ||||||
|  | 
 | ||||||
|  |     infrared_play_notification_message(infrared, InfraredNotificationMessageYellowOn); | ||||||
|  |     view_dispatcher_switch_to_view(infrared->view_dispatcher, InfraredViewPopup); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool infrared_scene_error_databases_on_event(void* context, SceneManagerEvent event) { | ||||||
|  |     Infrared* infrared = context; | ||||||
|  |     bool consumed = false; | ||||||
|  | 
 | ||||||
|  |     if(event.type == SceneManagerEventTypeCustom) { | ||||||
|  |         if(event.event == InfraredCustomEventTypePopupClosed) { | ||||||
|  |             scene_manager_search_and_switch_to_previous_scene( | ||||||
|  |                 infrared->scene_manager, InfraredSceneUniversal); | ||||||
|  |             consumed = true; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return consumed; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void infrared_scene_error_databases_on_exit(void* context) { | ||||||
|  |     Infrared* infrared = context; | ||||||
|  |     popup_reset(infrared->popup); | ||||||
|  |     infrared_play_notification_message(infrared, InfraredNotificationMessageYellowOff); | ||||||
|  | } | ||||||
| @ -15,7 +15,7 @@ void infrared_scene_learn_done_on_enter(void* context) { | |||||||
|         popup_set_header(popup, "Saved!", 5, 7, AlignLeft, AlignTop); |         popup_set_header(popup, "Saved!", 5, 7, AlignLeft, AlignTop); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     popup_set_callback(popup, infrared_popup_timeout_callback); |     popup_set_callback(popup, infrared_popup_closed_callback); | ||||||
|     popup_set_context(popup, context); |     popup_set_context(popup, context); | ||||||
|     popup_set_timeout(popup, 1500); |     popup_set_timeout(popup, 1500); | ||||||
|     popup_enable_timeout(popup); |     popup_enable_timeout(popup); | ||||||
| @ -28,7 +28,7 @@ bool infrared_scene_learn_done_on_event(void* context, SceneManagerEvent event) | |||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
| 
 | 
 | ||||||
|     if(event.type == SceneManagerEventTypeCustom) { |     if(event.type == SceneManagerEventTypeCustom) { | ||||||
|         if(event.event == InfraredCustomEventTypePopupTimeout) { |         if(event.event == InfraredCustomEventTypePopupClosed) { | ||||||
|             scene_manager_next_scene(infrared->scene_manager, InfraredSceneRemote); |             scene_manager_next_scene(infrared->scene_manager, InfraredSceneRemote); | ||||||
|             consumed = true; |             consumed = true; | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -98,7 +98,7 @@ void infrared_scene_universal_tv_on_enter(void* context) { | |||||||
|     infrared_show_loading_popup(infrared, false); |     infrared_show_loading_popup(infrared, false); | ||||||
| 
 | 
 | ||||||
|     if(!success) { |     if(!success) { | ||||||
|         scene_manager_previous_scene(infrared->scene_manager); |         scene_manager_next_scene(infrared->scene_manager, InfraredSceneErrorDatabases); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -335,6 +335,15 @@ const NotificationSequence sequence_set_blue_255 = { | |||||||
|     NULL, |     NULL, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | // Solid colors
 | ||||||
|  | const NotificationSequence sequence_solid_yellow = { | ||||||
|  |     &message_red_255, | ||||||
|  |     &message_green_255, | ||||||
|  |     &message_blue_0, | ||||||
|  |     &message_do_not_reset, | ||||||
|  |     NULL, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| // Blink
 | // Blink
 | ||||||
| const NotificationSequence sequence_blink_blue_10 = { | const NotificationSequence sequence_blink_blue_10 = { | ||||||
|     &message_blue_255, |     &message_blue_255, | ||||||
|  | |||||||
| @ -103,6 +103,9 @@ extern const NotificationSequence sequence_set_red_255; | |||||||
| extern const NotificationSequence sequence_set_green_255; | extern const NotificationSequence sequence_set_green_255; | ||||||
| extern const NotificationSequence sequence_set_blue_255; | extern const NotificationSequence sequence_set_blue_255; | ||||||
| 
 | 
 | ||||||
|  | // Solid colors
 | ||||||
|  | extern const NotificationSequence sequence_solid_yellow; | ||||||
|  | 
 | ||||||
| // Blink
 | // Blink
 | ||||||
| extern const NotificationSequence sequence_blink_blue_10; | extern const NotificationSequence sequence_blink_blue_10; | ||||||
| extern const NotificationSequence sequence_blink_red_10; | extern const NotificationSequence sequence_blink_red_10; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Georgii Surkov
						Georgii Surkov