[FL-3479] Desktop: more favorites, configurable dummy mode (#2972)

* Desktop: more favorite app shortcuts
* Making PVS happy
* Desktop settings submenu fix

Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
Nikolay Minaylov 2023-08-23 15:26:47 +03:00 committed by GitHub
parent dc7517e5fd
commit 15f92f765d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 244 additions and 97 deletions

View File

@ -128,8 +128,8 @@ static bool bubble_animation_input_callback(InputEvent* event, void* context) {
if(event->key == InputKeyRight) { if(event->key == InputKeyRight) {
/* Right button reserved for animation activation, so consume */ /* Right button reserved for animation activation, so consume */
consumed = true;
if(event->type == InputTypeShort) { if(event->type == InputTypeShort) {
consumed = true;
if(animation_view->interact_callback) { if(animation_view->interact_callback) {
animation_view->interact_callback(animation_view->interact_callback_context); animation_view->interact_callback(animation_view->interact_callback_context);
} }

View File

@ -65,8 +65,8 @@ static bool one_shot_view_input(InputEvent* event, void* context) {
if(!consumed) { if(!consumed) {
if(event->key == InputKeyRight) { if(event->key == InputKeyRight) {
/* Right button reserved for animation activation, so consume */ /* Right button reserved for animation activation, so consume */
consumed = true;
if(event->type == InputTypeShort) { if(event->type == InputTypeShort) {
consumed = true;
if(view->interact_callback) { if(view->interact_callback) {
view->interact_callback(view->interact_callback_context); view->interact_callback(view->interact_callback_context);
} }

View File

@ -223,7 +223,6 @@ void desktop_lock(Desktop* desktop) {
scene_manager_set_scene_state( scene_manager_set_scene_state(
desktop->scene_manager, DesktopSceneLocked, SCENE_LOCKED_FIRST_ENTER); desktop->scene_manager, DesktopSceneLocked, SCENE_LOCKED_FIRST_ENTER);
scene_manager_next_scene(desktop->scene_manager, DesktopSceneLocked); scene_manager_next_scene(desktop->scene_manager, DesktopSceneLocked);
notification_message(desktop->notification, &sequence_display_backlight_off_delay_1000);
DesktopStatus status = {.locked = true}; DesktopStatus status = {.locked = true};
furi_pubsub_publish(desktop->status_pubsub, &status); furi_pubsub_publish(desktop->status_pubsub, &status);

View File

@ -8,7 +8,7 @@
#include <toolbox/saved_struct.h> #include <toolbox/saved_struct.h>
#include <storage/storage.h> #include <storage/storage.h>
#define DESKTOP_SETTINGS_VER (9) #define DESKTOP_SETTINGS_VER (10)
#define DESKTOP_SETTINGS_PATH INT_PATH(DESKTOP_SETTINGS_FILE_NAME) #define DESKTOP_SETTINGS_PATH INT_PATH(DESKTOP_SETTINGS_FILE_NAME)
#define DESKTOP_SETTINGS_MAGIC (0x17) #define DESKTOP_SETTINGS_MAGIC (0x17)
@ -36,6 +36,22 @@
#define MIN_PIN_SIZE 4 #define MIN_PIN_SIZE 4
#define MAX_APP_LENGTH 128 #define MAX_APP_LENGTH 128
typedef enum {
FavoriteAppLeftShort = 0,
FavoriteAppLeftLong,
FavoriteAppRightShort,
FavoriteAppRightLong,
FavoriteAppNumber,
} FavoriteAppShortcut;
typedef enum {
DummyAppLeft = 0,
DummyAppRight,
DummyAppDown,
DummyAppOk,
DummyAppNumber,
} DummyAppShortcut;
typedef struct { typedef struct {
InputKey data[MAX_PIN_SIZE]; InputKey data[MAX_PIN_SIZE];
uint8_t length; uint8_t length;
@ -46,10 +62,10 @@ typedef struct {
} FavoriteApp; } FavoriteApp;
typedef struct { typedef struct {
FavoriteApp favorite_primary;
FavoriteApp favorite_secondary;
PinCode pin_code; PinCode pin_code;
uint32_t auto_lock_delay_ms; uint32_t auto_lock_delay_ms;
uint8_t dummy_mode; uint8_t dummy_mode;
uint8_t display_clock; uint8_t display_clock;
FavoriteApp favorite_apps[FavoriteAppNumber];
FavoriteApp dummy_apps[DummyAppNumber];
} DesktopSettings; } DesktopSettings;

View File

@ -87,6 +87,10 @@ bool desktop_scene_locked_on_event(void* context, SceneManagerEvent event) {
desktop_unlock(desktop); desktop_unlock(desktop);
consumed = true; consumed = true;
break; break;
case DesktopLockedEventDoorsClosed:
notification_message(desktop->notification, &sequence_display_backlight_off);
consumed = true;
break;
case DesktopLockedEventUpdate: case DesktopLockedEventUpdate:
if(desktop_view_locked_is_locked_hint_visible(desktop->locked_view)) { if(desktop_view_locked_is_locked_hint_visible(desktop->locked_view)) {
notification_message(desktop->notification, &sequence_display_backlight_off); notification_message(desktop->notification, &sequence_display_backlight_off);

View File

@ -12,10 +12,6 @@
#define TAG "DesktopSrv" #define TAG "DesktopSrv"
#define MUSIC_PLAYER_APP EXT_PATH("/apps/Media/music_player.fap")
#define SNAKE_GAME_APP EXT_PATH("/apps/Games/snake_game.fap")
#define CLOCK_APP EXT_PATH("/apps/Tools/clock.fap")
static void desktop_scene_main_new_idle_animation_callback(void* context) { static void desktop_scene_main_new_idle_animation_callback(void* context) {
furi_assert(context); furi_assert(context);
Desktop* desktop = context; Desktop* desktop = context;
@ -65,8 +61,15 @@ static void
} }
#endif #endif
static void desktop_scene_main_open_app_or_profile(Desktop* desktop, const char* path) { static void desktop_scene_main_open_app_or_profile(Desktop* desktop, FavoriteApp* application) {
if(loader_start_with_gui_error(desktop->loader, path, NULL) != LoaderStatusOk) { bool load_ok = false;
if(strlen(application->name_or_path) > 0) {
if(loader_start(desktop->loader, application->name_or_path, NULL, NULL) ==
LoaderStatusOk) {
load_ok = true;
}
}
if(!load_ok) {
loader_start(desktop->loader, "Passport", NULL, NULL); loader_start(desktop->loader, "Passport", NULL, NULL);
} }
} }
@ -115,6 +118,11 @@ bool desktop_scene_main_on_event(void* context, SceneManagerEvent event) {
consumed = true; consumed = true;
} break; } break;
case DesktopMainEventLock:
desktop_lock(desktop);
consumed = true;
break;
case DesktopMainEventOpenLockMenu: case DesktopMainEventOpenLockMenu:
scene_manager_next_scene(desktop->scene_manager, DesktopSceneLockMenu); scene_manager_next_scene(desktop->scene_manager, DesktopSceneLockMenu);
consumed = true; consumed = true;
@ -138,16 +146,31 @@ bool desktop_scene_main_on_event(void* context, SceneManagerEvent event) {
break; break;
} }
case DesktopMainEventOpenFavoritePrimary: case DesktopMainEventOpenFavoriteLeftShort:
DESKTOP_SETTINGS_LOAD(&desktop->settings); DESKTOP_SETTINGS_LOAD(&desktop->settings);
desktop_scene_main_start_favorite(desktop, &desktop->settings.favorite_primary); desktop_scene_main_start_favorite(
desktop, &desktop->settings.favorite_apps[FavoriteAppLeftShort]);
consumed = true; consumed = true;
break; break;
case DesktopMainEventOpenFavoriteSecondary: case DesktopMainEventOpenFavoriteLeftLong:
DESKTOP_SETTINGS_LOAD(&desktop->settings); DESKTOP_SETTINGS_LOAD(&desktop->settings);
desktop_scene_main_start_favorite(desktop, &desktop->settings.favorite_secondary); desktop_scene_main_start_favorite(
desktop, &desktop->settings.favorite_apps[FavoriteAppLeftLong]);
consumed = true; consumed = true;
break; break;
case DesktopMainEventOpenFavoriteRightShort:
DESKTOP_SETTINGS_LOAD(&desktop->settings);
desktop_scene_main_start_favorite(
desktop, &desktop->settings.favorite_apps[FavoriteAppRightShort]);
consumed = true;
break;
case DesktopMainEventOpenFavoriteRightLong:
DESKTOP_SETTINGS_LOAD(&desktop->settings);
desktop_scene_main_start_favorite(
desktop, &desktop->settings.favorite_apps[FavoriteAppRightLong]);
consumed = true;
break;
case DesktopAnimationEventCheckAnimation: case DesktopAnimationEventCheckAnimation:
animation_manager_check_blocking_process(desktop->animation_manager); animation_manager_check_blocking_process(desktop->animation_manager);
consumed = true; consumed = true;
@ -158,26 +181,31 @@ bool desktop_scene_main_on_event(void* context, SceneManagerEvent event) {
break; break;
case DesktopAnimationEventInteractAnimation: case DesktopAnimationEventInteractAnimation:
if(!animation_manager_interact_process(desktop->animation_manager)) { if(!animation_manager_interact_process(desktop->animation_manager)) {
loader_start(desktop->loader, "Passport", NULL, NULL); DESKTOP_SETTINGS_LOAD(&desktop->settings);
if(!desktop->settings.dummy_mode) {
desktop_scene_main_open_app_or_profile(
desktop, &desktop->settings.favorite_apps[FavoriteAppRightShort]);
} else {
desktop_scene_main_open_app_or_profile(
desktop, &desktop->settings.dummy_apps[DummyAppRight]);
}
} }
consumed = true; consumed = true;
break; break;
case DesktopMainEventOpenPassport: {
loader_start(desktop->loader, "Passport", NULL, NULL); case DesktopDummyEventOpenLeft:
desktop_scene_main_open_app_or_profile(
desktop, &desktop->settings.dummy_apps[DummyAppLeft]);
break; break;
} case DesktopDummyEventOpenDown:
case DesktopMainEventOpenGame: { desktop_scene_main_open_app_or_profile(
desktop_scene_main_open_app_or_profile(desktop, SNAKE_GAME_APP); desktop, &desktop->settings.dummy_apps[DummyAppDown]);
break; break;
} case DesktopDummyEventOpenOk:
case DesktopMainEventOpenClock: { desktop_scene_main_open_app_or_profile(
desktop_scene_main_open_app_or_profile(desktop, CLOCK_APP); desktop, &desktop->settings.dummy_apps[DummyAppOk]);
break; break;
}
case DesktopMainEventOpenMusicPlayer: {
desktop_scene_main_open_app_or_profile(desktop, MUSIC_PLAYER_APP);
break;
}
case DesktopLockedEventUpdate: case DesktopLockedEventUpdate:
desktop_view_locked_update(desktop->locked_view); desktop_view_locked_update(desktop->locked_view);
consumed = true; consumed = true;

View File

@ -1,22 +1,25 @@
#pragma once #pragma once
typedef enum { typedef enum {
DesktopMainEventLock,
DesktopMainEventOpenLockMenu, DesktopMainEventOpenLockMenu,
DesktopMainEventOpenArchive, DesktopMainEventOpenArchive,
DesktopMainEventOpenFavoritePrimary, DesktopMainEventOpenFavoriteLeftShort,
DesktopMainEventOpenFavoriteSecondary, DesktopMainEventOpenFavoriteLeftLong,
DesktopMainEventOpenFavoriteRightShort,
DesktopMainEventOpenFavoriteRightLong,
DesktopMainEventOpenMenu, DesktopMainEventOpenMenu,
DesktopMainEventOpenDebug, DesktopMainEventOpenDebug,
DesktopMainEventOpenPassport,
DesktopMainEventOpenPowerOff, DesktopMainEventOpenPowerOff,
DesktopMainEventOpenGame, DesktopDummyEventOpenLeft,
DesktopMainEventOpenClock, DesktopDummyEventOpenDown,
DesktopMainEventOpenMusicPlayer, DesktopDummyEventOpenOk,
DesktopLockedEventUnlocked, DesktopLockedEventUnlocked,
DesktopLockedEventUpdate, DesktopLockedEventUpdate,
DesktopLockedEventShowPinInput, DesktopLockedEventShowPinInput,
DesktopLockedEventDoorsClosed,
DesktopPinInputEventResetWrongPinLabel, DesktopPinInputEventResetWrongPinLabel,
DesktopPinInputEventUnlocked, DesktopPinInputEventUnlocked,

View File

@ -99,6 +99,7 @@ void desktop_view_locked_update(DesktopViewLocked* locked_view) {
if(view_state == DesktopViewLockedStateDoorsClosing && if(view_state == DesktopViewLockedStateDoorsClosing &&
!desktop_view_locked_doors_move(model)) { !desktop_view_locked_doors_move(model)) {
locked_view->callback(DesktopLockedEventDoorsClosed, locked_view->context);
model->view_state = DesktopViewLockedStateLocked; model->view_state = DesktopViewLockedStateLocked;
} else if(view_state == DesktopViewLockedStateLockedHintShown) { } else if(view_state == DesktopViewLockedStateLockedHintShown) {
model->view_state = DesktopViewLockedStateLocked; model->view_state = DesktopViewLockedStateLocked;

View File

@ -59,28 +59,32 @@ bool desktop_main_input_callback(InputEvent* event, void* context) {
} else if(event->key == InputKeyDown) { } else if(event->key == InputKeyDown) {
main_view->callback(DesktopMainEventOpenArchive, main_view->context); main_view->callback(DesktopMainEventOpenArchive, main_view->context);
} else if(event->key == InputKeyLeft) { } else if(event->key == InputKeyLeft) {
main_view->callback(DesktopMainEventOpenFavoritePrimary, main_view->context); main_view->callback(DesktopMainEventOpenFavoriteLeftShort, main_view->context);
} }
// Right key is handled by animation manager // Right key short is handled by animation manager
} else if(event->type == InputTypeLong) { } else if(event->type == InputTypeLong) {
if(event->key == InputKeyDown) { if(event->key == InputKeyUp) {
main_view->callback(DesktopMainEventLock, main_view->context);
} else if(event->key == InputKeyDown) {
main_view->callback(DesktopMainEventOpenDebug, main_view->context); main_view->callback(DesktopMainEventOpenDebug, main_view->context);
} else if(event->key == InputKeyLeft) { } else if(event->key == InputKeyLeft) {
main_view->callback(DesktopMainEventOpenFavoriteSecondary, main_view->context); main_view->callback(DesktopMainEventOpenFavoriteLeftLong, main_view->context);
} else if(event->key == InputKeyRight) {
main_view->callback(DesktopMainEventOpenFavoriteRightLong, main_view->context);
} }
} }
} else { } else {
if(event->type == InputTypeShort) { if(event->type == InputTypeShort) {
if(event->key == InputKeyOk) { if(event->key == InputKeyOk) {
main_view->callback(DesktopMainEventOpenGame, main_view->context); main_view->callback(DesktopDummyEventOpenOk, main_view->context);
} else if(event->key == InputKeyUp) { } else if(event->key == InputKeyUp) {
main_view->callback(DesktopMainEventOpenLockMenu, main_view->context); main_view->callback(DesktopMainEventOpenLockMenu, main_view->context);
} else if(event->key == InputKeyDown) { } else if(event->key == InputKeyDown) {
main_view->callback(DesktopMainEventOpenMusicPlayer, main_view->context); main_view->callback(DesktopDummyEventOpenDown, main_view->context);
} else if(event->key == InputKeyLeft) { } else if(event->key == InputKeyLeft) {
main_view->callback(DesktopMainEventOpenClock, main_view->context); main_view->callback(DesktopDummyEventOpenLeft, main_view->context);
} }
// Right key is handled by animation manager // Right key short is handled by animation manager
} }
} }

View File

@ -1,17 +1,19 @@
#include "../desktop_settings_app.h" #include "../desktop_settings_app.h"
#include "applications.h" #include "applications.h"
#include "desktop_settings_scene.h" #include "desktop_settings_scene.h"
#include "desktop_settings_scene_i.h"
#include <flipper_application/flipper_application.h> #include <flipper_application/flipper_application.h>
#include <storage/storage.h> #include <storage/storage.h>
#include <dialogs/dialogs.h> #include <dialogs/dialogs.h>
#define APPS_COUNT (FLIPPER_APPS_COUNT + FLIPPER_EXTERNAL_APPS_COUNT) #define APPS_COUNT (FLIPPER_APPS_COUNT + FLIPPER_EXTERNAL_APPS_COUNT)
#define EXTERNAL_BROWSER_NAME ("Apps") #define DEFAULT_INDEX (0)
#define EXTERNAL_BROWSER_INDEX (APPS_COUNT + 1) #define EXTERNAL_BROWSER_NAME ("Apps Menu (Default)")
#define PASSPORT_NAME ("Passport (Default)")
#define EXTERNAL_APPLICATION_INDEX (1)
#define EXTERNAL_APPLICATION_NAME ("[Select App]") #define EXTERNAL_APPLICATION_NAME ("[Select App]")
#define EXTERNAL_APPLICATION_INDEX (APPS_COUNT + 2)
#define PRESELECTED_SPECIAL 0xffffffff #define PRESELECTED_SPECIAL 0xffffffff
@ -55,28 +57,32 @@ void desktop_settings_scene_favorite_on_enter(void* context) {
Submenu* submenu = app->submenu; Submenu* submenu = app->submenu;
submenu_reset(submenu); submenu_reset(submenu);
uint32_t primary_favorite = uint32_t favorite_id =
scene_manager_get_scene_state(app->scene_manager, DesktopSettingsAppSceneFavorite); scene_manager_get_scene_state(app->scene_manager, DesktopSettingsAppSceneFavorite);
uint32_t pre_select_item = PRESELECTED_SPECIAL; uint32_t pre_select_item = PRESELECTED_SPECIAL;
FavoriteApp* curr_favorite_app = primary_favorite ? &app->settings.favorite_primary : FavoriteApp* curr_favorite_app = NULL;
&app->settings.favorite_secondary; bool is_dummy_app = false;
bool default_passport = false;
for(size_t i = 0; i < APPS_COUNT; i++) { if((favorite_id & SCENE_STATE_SET_DUMMY_APP) == 0) {
const char* name = favorite_fap_get_app_name(i); furi_assert(favorite_id < FavoriteAppNumber);
curr_favorite_app = &app->settings.favorite_apps[favorite_id];
submenu_add_item(submenu, name, i, desktop_settings_scene_favorite_submenu_callback, app); if(favorite_id == FavoriteAppRightShort) {
default_passport = true;
// Select favorite item in submenu
if(!strcmp(name, curr_favorite_app->name_or_path)) {
pre_select_item = i;
} }
} else {
favorite_id &= ~(SCENE_STATE_SET_DUMMY_APP);
furi_assert(favorite_id < DummyAppNumber);
curr_favorite_app = &app->settings.dummy_apps[favorite_id];
is_dummy_app = true;
default_passport = true;
} }
// Special case: Application browser // Special case: Application browser
submenu_add_item( submenu_add_item(
submenu, submenu,
EXTERNAL_BROWSER_NAME, default_passport ? (PASSPORT_NAME) : (EXTERNAL_BROWSER_NAME),
EXTERNAL_BROWSER_INDEX, DEFAULT_INDEX,
desktop_settings_scene_favorite_submenu_callback, desktop_settings_scene_favorite_submenu_callback,
app); app);
@ -88,16 +94,29 @@ void desktop_settings_scene_favorite_on_enter(void* context) {
desktop_settings_scene_favorite_submenu_callback, desktop_settings_scene_favorite_submenu_callback,
app); app);
if(!is_dummy_app) {
for(size_t i = 0; i < APPS_COUNT; i++) {
const char* name = favorite_fap_get_app_name(i);
submenu_add_item(
submenu, name, i + 2, desktop_settings_scene_favorite_submenu_callback, app);
// Select favorite item in submenu
if(!strcmp(name, curr_favorite_app->name_or_path)) {
pre_select_item = i + 2;
}
}
}
if(pre_select_item == PRESELECTED_SPECIAL) { if(pre_select_item == PRESELECTED_SPECIAL) {
if(curr_favorite_app->name_or_path[0] == '\0') { if(curr_favorite_app->name_or_path[0] == '\0') {
pre_select_item = EXTERNAL_BROWSER_INDEX; pre_select_item = DEFAULT_INDEX;
} else { } else {
pre_select_item = EXTERNAL_APPLICATION_INDEX; pre_select_item = EXTERNAL_APPLICATION_INDEX;
} }
} }
submenu_set_header( submenu_set_header(submenu, is_dummy_app ? ("Dummy Mode app:") : ("Favorite app:"));
submenu, primary_favorite ? "Primary favorite app:" : "Secondary favorite app:");
submenu_set_selected_item(submenu, pre_select_item); // If set during loop, visual glitch. submenu_set_selected_item(submenu, pre_select_item); // If set during loop, visual glitch.
view_dispatcher_switch_to_view(app->view_dispatcher, DesktopSettingsAppViewMenu); view_dispatcher_switch_to_view(app->view_dispatcher, DesktopSettingsAppViewMenu);
@ -108,13 +127,20 @@ bool desktop_settings_scene_favorite_on_event(void* context, SceneManagerEvent e
bool consumed = false; bool consumed = false;
FuriString* temp_path = furi_string_alloc_set_str(EXT_PATH("apps")); FuriString* temp_path = furi_string_alloc_set_str(EXT_PATH("apps"));
uint32_t primary_favorite = uint32_t favorite_id =
scene_manager_get_scene_state(app->scene_manager, DesktopSettingsAppSceneFavorite); scene_manager_get_scene_state(app->scene_manager, DesktopSettingsAppSceneFavorite);
FavoriteApp* curr_favorite_app = primary_favorite ? &app->settings.favorite_primary : FavoriteApp* curr_favorite_app = NULL;
&app->settings.favorite_secondary; if((favorite_id & SCENE_STATE_SET_DUMMY_APP) == 0) {
furi_assert(favorite_id < FavoriteAppNumber);
curr_favorite_app = &app->settings.favorite_apps[favorite_id];
} else {
favorite_id &= ~(SCENE_STATE_SET_DUMMY_APP);
furi_assert(favorite_id < DummyAppNumber);
curr_favorite_app = &app->settings.dummy_apps[favorite_id];
}
if(event.type == SceneManagerEventTypeCustom) { if(event.type == SceneManagerEventTypeCustom) {
if(event.event == EXTERNAL_BROWSER_INDEX) { if(event.event == DEFAULT_INDEX) {
curr_favorite_app->name_or_path[0] = '\0'; curr_favorite_app->name_or_path[0] = '\0';
consumed = true; consumed = true;
} else if(event.event == EXTERNAL_APPLICATION_INDEX) { } else if(event.event == EXTERNAL_APPLICATION_INDEX) {
@ -142,7 +168,8 @@ bool desktop_settings_scene_favorite_on_event(void* context, SceneManagerEvent e
consumed = true; consumed = true;
} }
} else { } else {
const char* name = favorite_fap_get_app_name(event.event); size_t app_index = event.event - 2;
const char* name = favorite_fap_get_app_name(app_index);
if(name) strncpy(curr_favorite_app->name_or_path, name, MAX_APP_LENGTH); if(name) strncpy(curr_favorite_app->name_or_path, name, MAX_APP_LENGTH);
consumed = true; consumed = true;
} }

View File

@ -5,3 +5,6 @@
#define SCENE_STATE_PIN_ERROR_MISMATCH (0) #define SCENE_STATE_PIN_ERROR_MISMATCH (0)
#define SCENE_STATE_PIN_ERROR_WRONG (1) #define SCENE_STATE_PIN_ERROR_WRONG (1)
#define SCENE_STATE_SET_FAVORITE_APP (0)
#define SCENE_STATE_SET_DUMMY_APP (1 << 8)

View File

@ -3,15 +3,24 @@
#include "../desktop_settings_app.h" #include "../desktop_settings_app.h"
#include "desktop_settings_scene.h" #include "desktop_settings_scene.h"
#include "desktop_settings_scene_i.h"
#define SCENE_EVENT_SELECT_FAVORITE_PRIMARY 0 typedef enum {
#define SCENE_EVENT_SELECT_FAVORITE_SECONDARY 1 DesktopSettingsPinSetup = 0,
#define SCENE_EVENT_SELECT_PIN_SETUP 2 DesktopSettingsAutoLockDelay,
#define SCENE_EVENT_SELECT_AUTO_LOCK_DELAY 3 DesktopSettingsClockDisplay,
#define SCENE_EVENT_SELECT_CLOCK_DISPLAY 4 DesktopSettingsFavoriteLeftShort,
DesktopSettingsFavoriteLeftLong,
DesktopSettingsFavoriteRightShort,
DesktopSettingsFavoriteRightLong,
DesktopSettingsDummyLeft,
DesktopSettingsDummyRight,
DesktopSettingsDummyDown,
DesktopSettingsDummyOk,
} DesktopSettingsEntry;
#define AUTO_LOCK_DELAY_COUNT 6 #define AUTO_LOCK_DELAY_COUNT 6
const char* const auto_lock_delay_text[AUTO_LOCK_DELAY_COUNT] = { static const char* const auto_lock_delay_text[AUTO_LOCK_DELAY_COUNT] = {
"OFF", "OFF",
"30s", "30s",
"60s", "60s",
@ -19,8 +28,7 @@ const char* const auto_lock_delay_text[AUTO_LOCK_DELAY_COUNT] = {
"5min", "5min",
"10min", "10min",
}; };
static const uint32_t auto_lock_delay_value[AUTO_LOCK_DELAY_COUNT] =
const uint32_t auto_lock_delay_value[AUTO_LOCK_DELAY_COUNT] =
{0, 30000, 60000, 120000, 300000, 600000}; {0, 30000, 60000, 120000, 300000, 600000};
#define CLOCK_ENABLE_COUNT 2 #define CLOCK_ENABLE_COUNT 2
@ -59,10 +67,6 @@ void desktop_settings_scene_start_on_enter(void* context) {
VariableItem* item; VariableItem* item;
uint8_t value_index; uint8_t value_index;
variable_item_list_add(variable_item_list, "Primary Favorite App", 1, NULL, NULL);
variable_item_list_add(variable_item_list, "Secondary Favorite App", 1, NULL, NULL);
variable_item_list_add(variable_item_list, "PIN Setup", 1, NULL, NULL); variable_item_list_add(variable_item_list, "PIN Setup", 1, NULL, NULL);
item = variable_item_list_add( item = variable_item_list_add(
@ -72,8 +76,6 @@ void desktop_settings_scene_start_on_enter(void* context) {
desktop_settings_scene_start_auto_lock_delay_changed, desktop_settings_scene_start_auto_lock_delay_changed,
app); app);
variable_item_list_set_enter_callback(
variable_item_list, desktop_settings_scene_start_var_list_enter_callback, app);
value_index = value_index_uint32( value_index = value_index_uint32(
app->settings.auto_lock_delay_ms, auto_lock_delay_value, AUTO_LOCK_DELAY_COUNT); app->settings.auto_lock_delay_ms, auto_lock_delay_value, AUTO_LOCK_DELAY_COUNT);
variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_index(item, value_index);
@ -91,6 +93,19 @@ void desktop_settings_scene_start_on_enter(void* context) {
variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_index(item, value_index);
variable_item_set_current_value_text(item, clock_enable_text[value_index]); variable_item_set_current_value_text(item, clock_enable_text[value_index]);
variable_item_list_add(variable_item_list, "Favorite App - Left Short", 1, NULL, NULL);
variable_item_list_add(variable_item_list, "Favorite App - Left Long", 1, NULL, NULL);
variable_item_list_add(variable_item_list, "Favorite App - Right Short", 1, NULL, NULL);
variable_item_list_add(variable_item_list, "Favorite App - Right Long", 1, NULL, NULL);
variable_item_list_add(variable_item_list, "Dummy Mode App - Left", 1, NULL, NULL);
variable_item_list_add(variable_item_list, "Dummy Mode App - Right", 1, NULL, NULL);
variable_item_list_add(variable_item_list, "Dummy Mode App - Down", 1, NULL, NULL);
variable_item_list_add(variable_item_list, "Dummy Mode App - Ok", 1, NULL, NULL);
variable_item_list_set_enter_callback(
variable_item_list, desktop_settings_scene_start_var_list_enter_callback, app);
view_dispatcher_switch_to_view(app->view_dispatcher, DesktopSettingsAppViewVarItemList); view_dispatcher_switch_to_view(app->view_dispatcher, DesktopSettingsAppViewVarItemList);
} }
@ -100,25 +115,72 @@ bool desktop_settings_scene_start_on_event(void* context, SceneManagerEvent even
if(event.type == SceneManagerEventTypeCustom) { if(event.type == SceneManagerEventTypeCustom) {
switch(event.event) { switch(event.event) {
case SCENE_EVENT_SELECT_FAVORITE_PRIMARY: case DesktopSettingsPinSetup:
scene_manager_set_scene_state(app->scene_manager, DesktopSettingsAppSceneFavorite, 1);
scene_manager_next_scene(app->scene_manager, DesktopSettingsAppSceneFavorite);
consumed = true;
break;
case SCENE_EVENT_SELECT_FAVORITE_SECONDARY:
scene_manager_set_scene_state(app->scene_manager, DesktopSettingsAppSceneFavorite, 0);
scene_manager_next_scene(app->scene_manager, DesktopSettingsAppSceneFavorite);
consumed = true;
break;
case SCENE_EVENT_SELECT_PIN_SETUP:
scene_manager_next_scene(app->scene_manager, DesktopSettingsAppScenePinMenu); scene_manager_next_scene(app->scene_manager, DesktopSettingsAppScenePinMenu);
consumed = true;
break; break;
case SCENE_EVENT_SELECT_AUTO_LOCK_DELAY:
case SCENE_EVENT_SELECT_CLOCK_DISPLAY: case DesktopSettingsFavoriteLeftShort:
consumed = true; scene_manager_set_scene_state(
app->scene_manager,
DesktopSettingsAppSceneFavorite,
SCENE_STATE_SET_FAVORITE_APP | FavoriteAppLeftShort);
scene_manager_next_scene(app->scene_manager, DesktopSettingsAppSceneFavorite);
break;
case DesktopSettingsFavoriteLeftLong:
scene_manager_set_scene_state(
app->scene_manager,
DesktopSettingsAppSceneFavorite,
SCENE_STATE_SET_FAVORITE_APP | FavoriteAppLeftLong);
scene_manager_next_scene(app->scene_manager, DesktopSettingsAppSceneFavorite);
break;
case DesktopSettingsFavoriteRightShort:
scene_manager_set_scene_state(
app->scene_manager,
DesktopSettingsAppSceneFavorite,
SCENE_STATE_SET_FAVORITE_APP | FavoriteAppRightShort);
scene_manager_next_scene(app->scene_manager, DesktopSettingsAppSceneFavorite);
break;
case DesktopSettingsFavoriteRightLong:
scene_manager_set_scene_state(
app->scene_manager,
DesktopSettingsAppSceneFavorite,
SCENE_STATE_SET_FAVORITE_APP | FavoriteAppRightLong);
scene_manager_next_scene(app->scene_manager, DesktopSettingsAppSceneFavorite);
break;
case DesktopSettingsDummyLeft:
scene_manager_set_scene_state(
app->scene_manager,
DesktopSettingsAppSceneFavorite,
SCENE_STATE_SET_DUMMY_APP | DummyAppLeft);
scene_manager_next_scene(app->scene_manager, DesktopSettingsAppSceneFavorite);
break;
case DesktopSettingsDummyRight:
scene_manager_set_scene_state(
app->scene_manager,
DesktopSettingsAppSceneFavorite,
SCENE_STATE_SET_DUMMY_APP | DummyAppRight);
scene_manager_next_scene(app->scene_manager, DesktopSettingsAppSceneFavorite);
break;
case DesktopSettingsDummyDown:
scene_manager_set_scene_state(
app->scene_manager,
DesktopSettingsAppSceneFavorite,
SCENE_STATE_SET_DUMMY_APP | DummyAppDown);
scene_manager_next_scene(app->scene_manager, DesktopSettingsAppSceneFavorite);
break;
case DesktopSettingsDummyOk:
scene_manager_set_scene_state(
app->scene_manager,
DesktopSettingsAppSceneFavorite,
SCENE_STATE_SET_DUMMY_APP | DummyAppOk);
scene_manager_next_scene(app->scene_manager, DesktopSettingsAppSceneFavorite);
break;
default:
break; break;
} }
consumed = true;
} }
return consumed; return consumed;
} }