Jelajahi Sumber

[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
あく 4 tahun lalu
induk
melakukan
ec18c1a92a

+ 2 - 1
applications/applications.mk

@@ -171,7 +171,8 @@ endif
 SRV_DESKTOP ?= 0
 ifeq ($(SRV_DESKTOP), 1)
 CFLAGS		+= -DSRV_DESKTOP
-SRV_LOADER	= 1
+SRV_DOLPHIN	= 1
+SRV_STORAGE	= 1
 SRV_GUI		= 1
 endif
 

+ 11 - 6
applications/desktop/desktop.c

@@ -1,5 +1,4 @@
 #include "desktop_i.h"
-#include "applications/dolphin/dolphin.h"
 
 static void desktop_lock_icon_callback(Canvas* canvas, void* context) {
     furi_assert(canvas);
@@ -104,16 +103,22 @@ void desktop_free(Desktop* 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) {
     Desktop* desktop = desktop_alloc();
-    Dolphin* dolphin = furi_record_open("dolphin");
 
-    if(dolphin_load(dolphin)) {
-        scene_manager_next_scene(desktop->scene_manager, DesktopSceneMain);
-    } else {
+    scene_manager_next_scene(desktop->scene_manager, DesktopSceneMain);
+
+    if(desktop_is_first_start()) {
         scene_manager_next_scene(desktop->scene_manager, DesktopSceneFirstStart);
     }
-    furi_record_close("dolphin");
 
     if(!furi_hal_version_do_i_belong_here()) {
         scene_manager_next_scene(desktop->scene_manager, DesktopSceneHwMismatch);

+ 5 - 2
applications/desktop/desktop_i.h

@@ -1,13 +1,15 @@
 #pragma once
 
+#include "desktop.h"
+
 #include <furi.h>
 #include <furi-hal.h>
+
 #include <gui/gui.h>
 #include <gui/view_dispatcher.h>
 #include <gui/scene_manager.h>
 #include <assets_icons.h>
-
-#include "desktop.h"
+#include <storage/storage.h>
 
 #include "views/desktop_main.h"
 #include "views/desktop_first_start.h"
@@ -15,6 +17,7 @@
 #include "views/desktop_lock_menu.h"
 #include "views/desktop_locked.h"
 #include "views/desktop_debug.h"
+
 #include "scenes/desktop_scene.h"
 
 #include "desktop/desktop_settings/desktop_settings.h"

+ 5 - 5
applications/desktop/scenes/desktop_scene_debug.c

@@ -1,14 +1,14 @@
 #include "../desktop_i.h"
 #include "../views/desktop_debug.h"
-#include "applications/dolphin/dolphin.h"
-#include "applications/dolphin/helpers/dolphin_deed.h"
+#include <dolphin/dolphin.h>
+#include <dolphin/helpers/dolphin_deed.h>
 
 void desktop_scene_debug_callback(DesktopDebugEvent event, void* context) {
     Desktop* desktop = (Desktop*)context;
     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_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);
 }
 
-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;
     Dolphin* dolphin = furi_record_open("dolphin");
     bool consumed = false;
@@ -56,7 +56,7 @@ const bool desktop_scene_debug_on_event(void* context, SceneManagerEvent event)
     return consumed;
 }
 
-const void desktop_scene_debug_on_exit(void* context) {
+void desktop_scene_debug_on_exit(void* context) {
     Desktop* desktop = (Desktop*)context;
     desktop_debug_reset_screen_idx(desktop->debug_view);
 }

+ 8 - 9
applications/desktop/scenes/desktop_scene_first_start.c

@@ -1,13 +1,12 @@
 #include "../desktop_i.h"
 #include "../views/desktop_first_start.h"
-#include "applications/dolphin/dolphin.h"
 
 void desktop_scene_first_start_callback(DesktopFirstStartEvent event, void* context) {
     Desktop* desktop = (Desktop*)context;
     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;
     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);
 }
 
-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;
     bool consumed = false;
+    Storage* storage = NULL;
 
     if(event.type == SceneManagerEventTypeCustom) {
         switch(event.event) {
         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;
             break;
 
@@ -35,9 +38,5 @@ const bool desktop_scene_first_start_on_event(void* context, SceneManagerEvent e
     return consumed;
 }
 
-const 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");
+void desktop_scene_first_start_on_exit(void* context) {
 }

+ 3 - 3
applications/desktop/scenes/desktop_scene_hw_mismatch.c

@@ -6,7 +6,7 @@ void desktop_scene_hw_mismatch_callback(DesktopHwMismatchEvent event, void* cont
     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_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);
 }
 
-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;
     bool consumed = false;
 
@@ -32,6 +32,6 @@ const bool desktop_scene_hw_mismatch_on_event(void* context, SceneManagerEvent e
     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;
 }

+ 3 - 3
applications/desktop/scenes/desktop_scene_lock_menu.c

@@ -6,14 +6,14 @@ void desktop_scene_lock_menu_callback(DesktopLockMenuEvent event, void* context)
     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_lock_menu_set_callback(desktop->lock_menu, desktop_scene_lock_menu_callback, desktop);
     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;
     bool consumed = false;
 
@@ -36,7 +36,7 @@ const bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent eve
     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_lock_menu_reset_idx(desktop->lock_menu);
 }

+ 3 - 3
applications/desktop/scenes/desktop_scene_locked.c

@@ -6,7 +6,7 @@ void desktop_scene_locked_callback(DesktopLockedEvent event, void* context) {
     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;
     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);
 }
 
-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;
 
     bool consumed = false;
@@ -43,7 +43,7 @@ const bool desktop_scene_locked_on_event(void* context, SceneManagerEvent event)
     return consumed;
 }
 
-const void desktop_scene_locked_on_exit(void* context) {
+void desktop_scene_locked_on_exit(void* context) {
     Desktop* desktop = (Desktop*)context;
     DesktopLockedView* locked_view = desktop->locked_view;
     desktop_locked_reset_counter(desktop->locked_view);

+ 3 - 3
applications/desktop/scenes/desktop_scene_main.c

@@ -27,7 +27,7 @@ void desktop_scene_main_callback(DesktopMainEvent event, void* context) {
     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;
     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);
 }
 
-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;
     bool consumed = false;
 
@@ -81,7 +81,7 @@ const bool desktop_scene_main_on_event(void* context, SceneManagerEvent event) {
     return consumed;
 }
 
-const void desktop_scene_main_on_exit(void* context) {
+void desktop_scene_main_on_exit(void* context) {
     Desktop* desktop = (Desktop*)context;
     scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneMain, MAIN_VIEW_DEFAULT);
     desktop_main_reset_hint(desktop->main_view);

+ 2 - 2
applications/subghz/scenes/subghz_scene_show_only_rx.c

@@ -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);
 }
 
-const void subghz_scene_show_only_rx_on_enter(void* context) {
+void subghz_scene_show_only_rx_on_enter(void* context) {
     SubGhz* subghz = context;
 
     // Setup view
@@ -38,7 +38,7 @@ const bool subghz_scene_show_only_rx_on_event(void* context, SceneManagerEvent e
     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;
 
     // Clear view