[FL-1781] Desktop: change first start logic, show only if factory provisioned. (#727)
* Desktop: change first start logic, show only if factory provisioned. * Desktop: code cleanup, correct first start scene position in scene stack. * Desktop: Remove unused include
This commit is contained in:
		
							parent
							
								
									61c8f3325a
								
							
						
					
					
						commit
						ec18c1a92a
					
				| @ -171,7 +171,8 @@ endif | |||||||
| SRV_DESKTOP ?= 0 | SRV_DESKTOP ?= 0 | ||||||
| ifeq ($(SRV_DESKTOP), 1) | ifeq ($(SRV_DESKTOP), 1) | ||||||
| CFLAGS		+= -DSRV_DESKTOP | CFLAGS		+= -DSRV_DESKTOP | ||||||
| SRV_LOADER	= 1 | SRV_DOLPHIN	= 1 | ||||||
|  | SRV_STORAGE	= 1 | ||||||
| SRV_GUI		= 1 | SRV_GUI		= 1 | ||||||
| endif | endif | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,5 +1,4 @@ | |||||||
| #include "desktop_i.h" | #include "desktop_i.h" | ||||||
| #include "applications/dolphin/dolphin.h" |  | ||||||
| 
 | 
 | ||||||
| static void desktop_lock_icon_callback(Canvas* canvas, void* context) { | static void desktop_lock_icon_callback(Canvas* canvas, void* context) { | ||||||
|     furi_assert(canvas); |     furi_assert(canvas); | ||||||
| @ -104,16 +103,22 @@ void desktop_free(Desktop* desktop) { | |||||||
|     free(desktop); |     free(desktop); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static bool desktop_is_first_start() { | ||||||
|  |     Storage* storage = furi_record_open("storage"); | ||||||
|  |     bool exists = storage_common_stat(storage, "/int/first_start", NULL) == FSE_OK; | ||||||
|  |     furi_record_close("storage"); | ||||||
|  | 
 | ||||||
|  |     return exists; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| int32_t desktop_srv(void* p) { | int32_t desktop_srv(void* p) { | ||||||
|     Desktop* desktop = desktop_alloc(); |     Desktop* desktop = desktop_alloc(); | ||||||
|     Dolphin* dolphin = furi_record_open("dolphin"); |  | ||||||
| 
 | 
 | ||||||
|     if(dolphin_load(dolphin)) { |  | ||||||
|     scene_manager_next_scene(desktop->scene_manager, DesktopSceneMain); |     scene_manager_next_scene(desktop->scene_manager, DesktopSceneMain); | ||||||
|     } else { | 
 | ||||||
|  |     if(desktop_is_first_start()) { | ||||||
|         scene_manager_next_scene(desktop->scene_manager, DesktopSceneFirstStart); |         scene_manager_next_scene(desktop->scene_manager, DesktopSceneFirstStart); | ||||||
|     } |     } | ||||||
|     furi_record_close("dolphin"); |  | ||||||
| 
 | 
 | ||||||
|     if(!furi_hal_version_do_i_belong_here()) { |     if(!furi_hal_version_do_i_belong_here()) { | ||||||
|         scene_manager_next_scene(desktop->scene_manager, DesktopSceneHwMismatch); |         scene_manager_next_scene(desktop->scene_manager, DesktopSceneHwMismatch); | ||||||
|  | |||||||
| @ -1,13 +1,15 @@ | |||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
|  | #include "desktop.h" | ||||||
|  | 
 | ||||||
| #include <furi.h> | #include <furi.h> | ||||||
| #include <furi-hal.h> | #include <furi-hal.h> | ||||||
|  | 
 | ||||||
| #include <gui/gui.h> | #include <gui/gui.h> | ||||||
| #include <gui/view_dispatcher.h> | #include <gui/view_dispatcher.h> | ||||||
| #include <gui/scene_manager.h> | #include <gui/scene_manager.h> | ||||||
| #include <assets_icons.h> | #include <assets_icons.h> | ||||||
| 
 | #include <storage/storage.h> | ||||||
| #include "desktop.h" |  | ||||||
| 
 | 
 | ||||||
| #include "views/desktop_main.h" | #include "views/desktop_main.h" | ||||||
| #include "views/desktop_first_start.h" | #include "views/desktop_first_start.h" | ||||||
| @ -15,6 +17,7 @@ | |||||||
| #include "views/desktop_lock_menu.h" | #include "views/desktop_lock_menu.h" | ||||||
| #include "views/desktop_locked.h" | #include "views/desktop_locked.h" | ||||||
| #include "views/desktop_debug.h" | #include "views/desktop_debug.h" | ||||||
|  | 
 | ||||||
| #include "scenes/desktop_scene.h" | #include "scenes/desktop_scene.h" | ||||||
| 
 | 
 | ||||||
| #include "desktop/desktop_settings/desktop_settings.h" | #include "desktop/desktop_settings/desktop_settings.h" | ||||||
|  | |||||||
| @ -1,14 +1,14 @@ | |||||||
| #include "../desktop_i.h" | #include "../desktop_i.h" | ||||||
| #include "../views/desktop_debug.h" | #include "../views/desktop_debug.h" | ||||||
| #include "applications/dolphin/dolphin.h" | #include <dolphin/dolphin.h> | ||||||
| #include "applications/dolphin/helpers/dolphin_deed.h" | #include <dolphin/helpers/dolphin_deed.h> | ||||||
| 
 | 
 | ||||||
| void desktop_scene_debug_callback(DesktopDebugEvent event, void* context) { | void desktop_scene_debug_callback(DesktopDebugEvent event, void* context) { | ||||||
|     Desktop* desktop = (Desktop*)context; |     Desktop* desktop = (Desktop*)context; | ||||||
|     view_dispatcher_send_custom_event(desktop->view_dispatcher, event); |     view_dispatcher_send_custom_event(desktop->view_dispatcher, event); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const void desktop_scene_debug_on_enter(void* context) { | void desktop_scene_debug_on_enter(void* context) { | ||||||
|     Desktop* desktop = (Desktop*)context; |     Desktop* desktop = (Desktop*)context; | ||||||
| 
 | 
 | ||||||
|     desktop_debug_get_dolphin_data(desktop->debug_view); |     desktop_debug_get_dolphin_data(desktop->debug_view); | ||||||
| @ -17,7 +17,7 @@ const void desktop_scene_debug_on_enter(void* context) { | |||||||
|     view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewDebug); |     view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewDebug); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const bool desktop_scene_debug_on_event(void* context, SceneManagerEvent event) { | bool desktop_scene_debug_on_event(void* context, SceneManagerEvent event) { | ||||||
|     Desktop* desktop = (Desktop*)context; |     Desktop* desktop = (Desktop*)context; | ||||||
|     Dolphin* dolphin = furi_record_open("dolphin"); |     Dolphin* dolphin = furi_record_open("dolphin"); | ||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
| @ -56,7 +56,7 @@ const bool desktop_scene_debug_on_event(void* context, SceneManagerEvent event) | |||||||
|     return consumed; |     return consumed; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const void desktop_scene_debug_on_exit(void* context) { | void desktop_scene_debug_on_exit(void* context) { | ||||||
|     Desktop* desktop = (Desktop*)context; |     Desktop* desktop = (Desktop*)context; | ||||||
|     desktop_debug_reset_screen_idx(desktop->debug_view); |     desktop_debug_reset_screen_idx(desktop->debug_view); | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,13 +1,12 @@ | |||||||
| #include "../desktop_i.h" | #include "../desktop_i.h" | ||||||
| #include "../views/desktop_first_start.h" | #include "../views/desktop_first_start.h" | ||||||
| #include "applications/dolphin/dolphin.h" |  | ||||||
| 
 | 
 | ||||||
| void desktop_scene_first_start_callback(DesktopFirstStartEvent event, void* context) { | void desktop_scene_first_start_callback(DesktopFirstStartEvent event, void* context) { | ||||||
|     Desktop* desktop = (Desktop*)context; |     Desktop* desktop = (Desktop*)context; | ||||||
|     view_dispatcher_send_custom_event(desktop->view_dispatcher, event); |     view_dispatcher_send_custom_event(desktop->view_dispatcher, event); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const void desktop_scene_first_start_on_enter(void* context) { | void desktop_scene_first_start_on_enter(void* context) { | ||||||
|     Desktop* desktop = (Desktop*)context; |     Desktop* desktop = (Desktop*)context; | ||||||
|     DesktopFirstStartView* first_start_view = desktop->first_start_view; |     DesktopFirstStartView* first_start_view = desktop->first_start_view; | ||||||
| 
 | 
 | ||||||
| @ -17,14 +16,18 @@ const void desktop_scene_first_start_on_enter(void* context) { | |||||||
|     view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewFirstStart); |     view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewFirstStart); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const bool desktop_scene_first_start_on_event(void* context, SceneManagerEvent event) { | bool desktop_scene_first_start_on_event(void* context, SceneManagerEvent event) { | ||||||
|     Desktop* desktop = (Desktop*)context; |     Desktop* desktop = (Desktop*)context; | ||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
|  |     Storage* storage = NULL; | ||||||
| 
 | 
 | ||||||
|     if(event.type == SceneManagerEventTypeCustom) { |     if(event.type == SceneManagerEventTypeCustom) { | ||||||
|         switch(event.event) { |         switch(event.event) { | ||||||
|         case DesktopFirstStartCompleted: |         case DesktopFirstStartCompleted: | ||||||
|             scene_manager_next_scene(desktop->scene_manager, DesktopSceneMain); |             storage = furi_record_open("storage"); | ||||||
|  |             storage_common_remove(storage, "/int/first_start"); | ||||||
|  |             furi_record_close("storage"); | ||||||
|  |             scene_manager_previous_scene(desktop->scene_manager); | ||||||
|             consumed = true; |             consumed = true; | ||||||
|             break; |             break; | ||||||
| 
 | 
 | ||||||
| @ -35,9 +38,5 @@ const bool desktop_scene_first_start_on_event(void* context, SceneManagerEvent e | |||||||
|     return consumed; |     return consumed; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const void desktop_scene_first_start_on_exit(void* context) { | void desktop_scene_first_start_on_exit(void* context) { | ||||||
|     // Desktop* desktop = (Desktop*)context;
 |  | ||||||
|     Dolphin* dolphin = furi_record_open("dolphin"); |  | ||||||
|     dolphin_save(dolphin); |  | ||||||
|     furi_record_close("dolphin"); |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -6,7 +6,7 @@ void desktop_scene_hw_mismatch_callback(DesktopHwMismatchEvent event, void* cont | |||||||
|     view_dispatcher_send_custom_event(desktop->view_dispatcher, event); |     view_dispatcher_send_custom_event(desktop->view_dispatcher, event); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const void desktop_scene_hw_mismatch_on_enter(void* context) { | void desktop_scene_hw_mismatch_on_enter(void* context) { | ||||||
|     Desktop* desktop = (Desktop*)context; |     Desktop* desktop = (Desktop*)context; | ||||||
| 
 | 
 | ||||||
|     desktop_hw_mismatch_set_callback( |     desktop_hw_mismatch_set_callback( | ||||||
| @ -14,7 +14,7 @@ const void desktop_scene_hw_mismatch_on_enter(void* context) { | |||||||
|     view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewHwMismatch); |     view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewHwMismatch); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const bool desktop_scene_hw_mismatch_on_event(void* context, SceneManagerEvent event) { | bool desktop_scene_hw_mismatch_on_event(void* context, SceneManagerEvent event) { | ||||||
|     Desktop* desktop = (Desktop*)context; |     Desktop* desktop = (Desktop*)context; | ||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
| 
 | 
 | ||||||
| @ -32,6 +32,6 @@ const bool desktop_scene_hw_mismatch_on_event(void* context, SceneManagerEvent e | |||||||
|     return consumed; |     return consumed; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const void desktop_scene_hw_mismatch_on_exit(void* context) { | void desktop_scene_hw_mismatch_on_exit(void* context) { | ||||||
|     // Desktop* desktop = (Desktop*)context;
 |     // Desktop* desktop = (Desktop*)context;
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -6,14 +6,14 @@ void desktop_scene_lock_menu_callback(DesktopLockMenuEvent event, void* context) | |||||||
|     view_dispatcher_send_custom_event(desktop->view_dispatcher, event); |     view_dispatcher_send_custom_event(desktop->view_dispatcher, event); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const void desktop_scene_lock_menu_on_enter(void* context) { | void desktop_scene_lock_menu_on_enter(void* context) { | ||||||
|     Desktop* desktop = (Desktop*)context; |     Desktop* desktop = (Desktop*)context; | ||||||
| 
 | 
 | ||||||
|     desktop_lock_menu_set_callback(desktop->lock_menu, desktop_scene_lock_menu_callback, desktop); |     desktop_lock_menu_set_callback(desktop->lock_menu, desktop_scene_lock_menu_callback, desktop); | ||||||
|     view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewLockMenu); |     view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewLockMenu); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent event) { | bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent event) { | ||||||
|     Desktop* desktop = (Desktop*)context; |     Desktop* desktop = (Desktop*)context; | ||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
| 
 | 
 | ||||||
| @ -36,7 +36,7 @@ const bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent eve | |||||||
|     return consumed; |     return consumed; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const void desktop_scene_lock_menu_on_exit(void* context) { | void desktop_scene_lock_menu_on_exit(void* context) { | ||||||
|     Desktop* desktop = (Desktop*)context; |     Desktop* desktop = (Desktop*)context; | ||||||
|     desktop_lock_menu_reset_idx(desktop->lock_menu); |     desktop_lock_menu_reset_idx(desktop->lock_menu); | ||||||
| } | } | ||||||
|  | |||||||
| @ -6,7 +6,7 @@ void desktop_scene_locked_callback(DesktopLockedEvent event, void* context) { | |||||||
|     view_dispatcher_send_custom_event(desktop->view_dispatcher, event); |     view_dispatcher_send_custom_event(desktop->view_dispatcher, event); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const void desktop_scene_locked_on_enter(void* context) { | void desktop_scene_locked_on_enter(void* context) { | ||||||
|     Desktop* desktop = (Desktop*)context; |     Desktop* desktop = (Desktop*)context; | ||||||
|     DesktopLockedView* locked_view = desktop->locked_view; |     DesktopLockedView* locked_view = desktop->locked_view; | ||||||
| 
 | 
 | ||||||
| @ -20,7 +20,7 @@ const void desktop_scene_locked_on_enter(void* context) { | |||||||
|     view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewLocked); |     view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewLocked); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const bool desktop_scene_locked_on_event(void* context, SceneManagerEvent event) { | bool desktop_scene_locked_on_event(void* context, SceneManagerEvent event) { | ||||||
|     Desktop* desktop = (Desktop*)context; |     Desktop* desktop = (Desktop*)context; | ||||||
| 
 | 
 | ||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
| @ -43,7 +43,7 @@ const bool desktop_scene_locked_on_event(void* context, SceneManagerEvent event) | |||||||
|     return consumed; |     return consumed; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const void desktop_scene_locked_on_exit(void* context) { | void desktop_scene_locked_on_exit(void* context) { | ||||||
|     Desktop* desktop = (Desktop*)context; |     Desktop* desktop = (Desktop*)context; | ||||||
|     DesktopLockedView* locked_view = desktop->locked_view; |     DesktopLockedView* locked_view = desktop->locked_view; | ||||||
|     desktop_locked_reset_counter(desktop->locked_view); |     desktop_locked_reset_counter(desktop->locked_view); | ||||||
|  | |||||||
| @ -27,7 +27,7 @@ void desktop_scene_main_callback(DesktopMainEvent event, void* context) { | |||||||
|     view_dispatcher_send_custom_event(desktop->view_dispatcher, event); |     view_dispatcher_send_custom_event(desktop->view_dispatcher, event); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const void desktop_scene_main_on_enter(void* context) { | void desktop_scene_main_on_enter(void* context) { | ||||||
|     Desktop* desktop = (Desktop*)context; |     Desktop* desktop = (Desktop*)context; | ||||||
|     DesktopMainView* main_view = desktop->main_view; |     DesktopMainView* main_view = desktop->main_view; | ||||||
| 
 | 
 | ||||||
| @ -42,7 +42,7 @@ const void desktop_scene_main_on_enter(void* context) { | |||||||
|     view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewMain); |     view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewMain); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const bool desktop_scene_main_on_event(void* context, SceneManagerEvent event) { | bool desktop_scene_main_on_event(void* context, SceneManagerEvent event) { | ||||||
|     Desktop* desktop = (Desktop*)context; |     Desktop* desktop = (Desktop*)context; | ||||||
|     bool consumed = false; |     bool consumed = false; | ||||||
| 
 | 
 | ||||||
| @ -81,7 +81,7 @@ const bool desktop_scene_main_on_event(void* context, SceneManagerEvent event) { | |||||||
|     return consumed; |     return consumed; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const void desktop_scene_main_on_exit(void* context) { | void desktop_scene_main_on_exit(void* context) { | ||||||
|     Desktop* desktop = (Desktop*)context; |     Desktop* desktop = (Desktop*)context; | ||||||
|     scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneMain, MAIN_VIEW_DEFAULT); |     scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneMain, MAIN_VIEW_DEFAULT); | ||||||
|     desktop_main_reset_hint(desktop->main_view); |     desktop_main_reset_hint(desktop->main_view); | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ void subghz_scene_show_only_rx_popup_callback(void* context) { | |||||||
|     view_dispatcher_send_custom_event(subghz->view_dispatcher, SCENE_NO_MAN_CUSTOM_EVENT); |     view_dispatcher_send_custom_event(subghz->view_dispatcher, SCENE_NO_MAN_CUSTOM_EVENT); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const void subghz_scene_show_only_rx_on_enter(void* context) { | void subghz_scene_show_only_rx_on_enter(void* context) { | ||||||
|     SubGhz* subghz = context; |     SubGhz* subghz = context; | ||||||
| 
 | 
 | ||||||
|     // Setup view
 |     // Setup view
 | ||||||
| @ -38,7 +38,7 @@ const bool subghz_scene_show_only_rx_on_event(void* context, SceneManagerEvent e | |||||||
|     return false; |     return false; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| const void subghz_scene_show_only_rx_on_exit(void* context) { | void subghz_scene_show_only_rx_on_exit(void* context) { | ||||||
|     SubGhz* subghz = context; |     SubGhz* subghz = context; | ||||||
| 
 | 
 | ||||||
|     // Clear view
 |     // Clear view
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 あく
						あく