Skip to content

Commit 14bd8f2

Browse files
committed
ofw pr: dummy mode
OFW PR 1739 by nminaylov
1 parent 8ce5fae commit 14bd8f2

22 files changed

+217
-114
lines changed

applications/main/archive/helpers/archive_browser.c

+3-5
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ void archive_file_array_load(ArchiveBrowserView* browser, int8_t dir) {
270270
ArchiveFile_t* archive_get_current_file(ArchiveBrowserView* browser) {
271271
furi_assert(browser);
272272

273-
ArchiveFile_t* selected;
273+
ArchiveFile_t* selected = NULL;
274274
with_view_model(
275275
browser->view, (ArchiveBrowserViewModel * model) {
276276
selected = files_array_size(model->files) ?
@@ -284,7 +284,7 @@ ArchiveFile_t* archive_get_current_file(ArchiveBrowserView* browser) {
284284
ArchiveFile_t* archive_get_file_at(ArchiveBrowserView* browser, size_t idx) {
285285
furi_assert(browser);
286286

287-
ArchiveFile_t* selected;
287+
ArchiveFile_t* selected = NULL;
288288

289289
with_view_model(
290290
browser->view, (ArchiveBrowserViewModel * model) {
@@ -298,7 +298,7 @@ ArchiveFile_t* archive_get_file_at(ArchiveBrowserView* browser, size_t idx) {
298298
ArchiveTabEnum archive_get_tab(ArchiveBrowserView* browser) {
299299
furi_assert(browser);
300300

301-
ArchiveTabEnum tab_id;
301+
ArchiveTabEnum tab_id = 0;
302302
with_view_model(
303303
browser->view, (ArchiveBrowserViewModel * model) {
304304
tab_id = model->tab_idx;
@@ -452,8 +452,6 @@ void archive_switch_tab(ArchiveBrowserView* browser, InputKey key) {
452452
archive_file_browser_set_path(
453453
browser, browser->path, archive_get_tab_ext(tab), skip_assets);
454454
tab_empty = false; // Empty check will be performed later
455-
} else {
456-
tab_empty = true;
457455
}
458456
}
459457

applications/services/desktop/desktop.c

+35-11
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,18 @@ static void desktop_loader_callback(const void* message, void* context) {
3232
view_dispatcher_send_custom_event(desktop->view_dispatcher, DesktopGlobalAfterAppFinished);
3333
}
3434
}
35-
36-
static void desktop_lock_icon_callback(Canvas* canvas, void* context) {
35+
static void desktop_lock_icon_draw_callback(Canvas* canvas, void* context) {
3736
UNUSED(context);
3837
furi_assert(canvas);
3938
canvas_draw_icon(canvas, 0, 0, &I_Lock_8x8);
4039
}
4140

41+
static void desktop_dummy_mode_icon_draw_callback(Canvas* canvas, void* context) {
42+
UNUSED(context);
43+
furi_assert(canvas);
44+
canvas_draw_icon(canvas, 0, 0, &I_GameMode_11x8);
45+
}
46+
4247
static bool desktop_custom_event_callback(void* context, uint32_t event) {
4348
furi_assert(context);
4449
Desktop* desktop = (Desktop*)context;
@@ -52,7 +57,7 @@ static bool desktop_custom_event_callback(void* context, uint32_t event) {
5257
animation_manager_load_and_continue_animation(desktop->animation_manager);
5358
// TODO: Implement a message mechanism for loading settings and (optionally)
5459
// locking and unlocking
55-
LOAD_DESKTOP_SETTINGS(&desktop->settings);
60+
DESKTOP_SETTINGS_LOAD(&desktop->settings);
5661
desktop_auto_lock_arm(desktop);
5762
return true;
5863
case DesktopGlobalAutoLock:
@@ -127,7 +132,7 @@ void desktop_lock(Desktop* desktop) {
127132
}
128133

129134
void desktop_unlock(Desktop* desktop) {
130-
view_port_enabled_set(desktop->lock_viewport, false);
135+
view_port_enabled_set(desktop->lock_icon_viewport, false);
131136
Gui* gui = furi_record_open(RECORD_GUI);
132137
gui_set_lockdown(gui, false);
133138
furi_record_close(RECORD_GUI);
@@ -136,6 +141,13 @@ void desktop_unlock(Desktop* desktop) {
136141
desktop_auto_lock_arm(desktop);
137142
}
138143

144+
void desktop_set_dummy_mode_state(Desktop* desktop, bool enabled) {
145+
view_port_enabled_set(desktop->dummy_mode_icon_viewport, enabled);
146+
desktop_main_set_dummy_mode_state(desktop->main_view, enabled);
147+
desktop->settings.dummy_mode = enabled;
148+
DESKTOP_SETTINGS_SAVE(&desktop->settings);
149+
}
150+
139151
Desktop* desktop_alloc() {
140152
Desktop* desktop = malloc(sizeof(Desktop));
141153

@@ -212,11 +224,20 @@ Desktop* desktop_alloc() {
212224
desktop_view_slideshow_get_view(desktop->slideshow_view));
213225

214226
// Lock icon
215-
desktop->lock_viewport = view_port_alloc();
216-
view_port_set_width(desktop->lock_viewport, icon_get_width(&I_Lock_8x8));
217-
view_port_draw_callback_set(desktop->lock_viewport, desktop_lock_icon_callback, desktop);
218-
view_port_enabled_set(desktop->lock_viewport, false);
219-
gui_add_view_port(desktop->gui, desktop->lock_viewport, GuiLayerStatusBarLeft);
227+
desktop->lock_icon_viewport = view_port_alloc();
228+
view_port_set_width(desktop->lock_icon_viewport, icon_get_width(&I_Lock_8x8));
229+
view_port_draw_callback_set(
230+
desktop->lock_icon_viewport, desktop_lock_icon_draw_callback, desktop);
231+
view_port_enabled_set(desktop->lock_icon_viewport, false);
232+
gui_add_view_port(desktop->gui, desktop->lock_icon_viewport, GuiLayerStatusBarLeft);
233+
234+
// Dummy mode icon
235+
desktop->dummy_mode_icon_viewport = view_port_alloc();
236+
view_port_set_width(desktop->dummy_mode_icon_viewport, icon_get_width(&I_GameMode_11x8));
237+
view_port_draw_callback_set(
238+
desktop->dummy_mode_icon_viewport, desktop_dummy_mode_icon_draw_callback, desktop);
239+
view_port_enabled_set(desktop->dummy_mode_icon_viewport, false);
240+
gui_add_view_port(desktop->gui, desktop->dummy_mode_icon_viewport, GuiLayerStatusBarLeft);
220241

221242
// Special case: autostart application is already running
222243
desktop->loader = furi_record_open(RECORD_LOADER);
@@ -301,12 +322,15 @@ int32_t desktop_srv(void* p) {
301322
UNUSED(p);
302323
Desktop* desktop = desktop_alloc();
303324

304-
bool loaded = LOAD_DESKTOP_SETTINGS(&desktop->settings);
325+
bool loaded = DESKTOP_SETTINGS_LOAD(&desktop->settings);
305326
if(!loaded) {
306327
memset(&desktop->settings, 0, sizeof(desktop->settings));
307-
SAVE_DESKTOP_SETTINGS(&desktop->settings);
328+
DESKTOP_SETTINGS_SAVE(&desktop->settings);
308329
}
309330

331+
view_port_enabled_set(desktop->dummy_mode_icon_viewport, desktop->settings.dummy_mode);
332+
desktop_main_set_dummy_mode_state(desktop->main_view, desktop->settings.dummy_mode);
333+
310334
scene_manager_next_scene(desktop->scene_manager, DesktopSceneMain);
311335

312336
desktop_pin_lock_init(&desktop->settings);

applications/services/desktop/desktop_i.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ struct Desktop {
5757
DesktopSettings settings;
5858
DesktopViewPinInput* pin_input_view;
5959

60-
ViewPort* lock_viewport;
60+
ViewPort* lock_icon_viewport;
61+
ViewPort* dummy_mode_icon_viewport;
6162

6263
AnimationManager* animation_manager;
6364

@@ -75,3 +76,4 @@ Desktop* desktop_alloc();
7576
void desktop_free(Desktop* desktop);
7677
void desktop_lock(Desktop* desktop);
7778
void desktop_unlock(Desktop* desktop);
79+
void desktop_set_dummy_mode_state(Desktop* desktop, bool enabled);

applications/services/desktop/desktop_settings.h

+4-3
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,23 @@
88
#include <toolbox/saved_struct.h>
99
#include <storage/storage.h>
1010

11-
#define DESKTOP_SETTINGS_VER (4)
11+
#define DESKTOP_SETTINGS_VER (5)
1212

1313
#define DESKTOP_SETTINGS_PATH INT_PATH(DESKTOP_SETTINGS_FILE_NAME)
1414
#define DESKTOP_SETTINGS_MAGIC (0x17)
1515
#define PIN_MAX_LENGTH 12
1616

1717
#define DESKTOP_SETTINGS_RUN_PIN_SETUP_ARG "run_pin_setup"
1818

19-
#define SAVE_DESKTOP_SETTINGS(x) \
19+
#define DESKTOP_SETTINGS_SAVE(x) \
2020
saved_struct_save( \
2121
DESKTOP_SETTINGS_PATH, \
2222
(x), \
2323
sizeof(DesktopSettings), \
2424
DESKTOP_SETTINGS_MAGIC, \
2525
DESKTOP_SETTINGS_VER)
2626

27-
#define LOAD_DESKTOP_SETTINGS(x) \
27+
#define DESKTOP_SETTINGS_LOAD(x) \
2828
saved_struct_load( \
2929
DESKTOP_SETTINGS_PATH, \
3030
(x), \
@@ -47,4 +47,5 @@ typedef struct {
4747
uint8_t is_locked;
4848
uint32_t auto_lock_delay_ms;
4949
uint8_t displayBatteryPercentage;
50+
uint8_t dummy_mode;
5051
} DesktopSettings;

applications/services/desktop/helpers/pin_lock.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ void desktop_pin_lock(DesktopSettings* settings) {
7272
cli_session_close(cli);
7373
furi_record_close(RECORD_CLI);
7474
settings->is_locked = 1;
75-
SAVE_DESKTOP_SETTINGS(settings);
75+
DESKTOP_SETTINGS_SAVE(settings);
7676
}
7777

7878
void desktop_pin_unlock(DesktopSettings* settings) {
@@ -83,7 +83,7 @@ void desktop_pin_unlock(DesktopSettings* settings) {
8383
cli_session_open(cli, &cli_vcp);
8484
furi_record_close(RECORD_CLI);
8585
settings->is_locked = 0;
86-
SAVE_DESKTOP_SETTINGS(settings);
86+
DESKTOP_SETTINGS_SAVE(settings);
8787
}
8888

8989
void desktop_pin_lock_init(DesktopSettings* settings) {
@@ -95,7 +95,7 @@ void desktop_pin_lock_init(DesktopSettings* settings) {
9595
} else {
9696
if(desktop_pin_lock_is_locked()) {
9797
settings->is_locked = 1;
98-
SAVE_DESKTOP_SETTINGS(settings);
98+
DESKTOP_SETTINGS_SAVE(settings);
9999
}
100100
}
101101
} else {

applications/services/desktop/scenes/desktop_scene_lock_menu.c

+14-7
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,11 @@ void desktop_scene_lock_menu_callback(DesktopEvent event, void* context) {
2222
void desktop_scene_lock_menu_on_enter(void* context) {
2323
Desktop* desktop = (Desktop*)context;
2424

25-
LOAD_DESKTOP_SETTINGS(&desktop->settings);
25+
DESKTOP_SETTINGS_LOAD(&desktop->settings);
2626
scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 0);
2727
desktop_lock_menu_set_callback(desktop->lock_menu, desktop_scene_lock_menu_callback, desktop);
28-
desktop_lock_menu_pin_set(desktop->lock_menu, desktop->settings.pin_code.length > 0);
28+
desktop_lock_menu_set_pin_state(desktop->lock_menu, desktop->settings.pin_code.length > 0);
29+
desktop_lock_menu_set_dummy_mode_state(desktop->lock_menu, desktop->settings.dummy_mode);
2930
desktop_lock_menu_set_idx(desktop->lock_menu, 0);
3031

3132
view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewIdLockMenu);
@@ -39,9 +40,9 @@ bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent event) {
3940
bool check_pin_changed =
4041
scene_manager_get_scene_state(desktop->scene_manager, DesktopSceneLockMenu);
4142
if(check_pin_changed) {
42-
LOAD_DESKTOP_SETTINGS(&desktop->settings);
43+
DESKTOP_SETTINGS_LOAD(&desktop->settings);
4344
if(desktop->settings.pin_code.length > 0) {
44-
desktop_lock_menu_pin_set(desktop->lock_menu, 1);
45+
desktop_lock_menu_set_pin_state(desktop->lock_menu, true);
4546
scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 0);
4647
}
4748
}
@@ -67,15 +68,21 @@ bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent event) {
6768
}
6869
consumed = true;
6970
break;
70-
case DesktopLockMenuEventExit:
71-
scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 0);
71+
case DesktopLockMenuEventDummyModeOn:
72+
desktop_set_dummy_mode_state(desktop, true);
73+
scene_manager_search_and_switch_to_previous_scene(
74+
desktop->scene_manager, DesktopSceneMain);
75+
break;
76+
case DesktopLockMenuEventDummyModeOff:
77+
desktop_set_dummy_mode_state(desktop, false);
7278
scene_manager_search_and_switch_to_previous_scene(
7379
desktop->scene_manager, DesktopSceneMain);
74-
consumed = true;
7580
break;
7681
default:
7782
break;
7883
}
84+
} else if(event.type == SceneManagerEventTypeBack) {
85+
scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 0);
7986
}
8087
return consumed;
8188
}

applications/services/desktop/scenes/desktop_scene_locked.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,13 @@ void desktop_scene_locked_on_enter(void* context) {
4646
uint32_t state = scene_manager_get_scene_state(desktop->scene_manager, DesktopSceneLocked);
4747
if(state == SCENE_LOCKED_FIRST_ENTER) {
4848
bool pin_locked = desktop_pin_lock_is_locked();
49-
view_port_enabled_set(desktop->lock_viewport, true);
49+
view_port_enabled_set(desktop->lock_icon_viewport, true);
5050
Gui* gui = furi_record_open(RECORD_GUI);
5151
gui_set_lockdown(gui, true);
5252
furi_record_close(RECORD_GUI);
5353

5454
if(pin_locked) {
55-
LOAD_DESKTOP_SETTINGS(&desktop->settings);
55+
DESKTOP_SETTINGS_LOAD(&desktop->settings);
5656
desktop_view_locked_lock(desktop->locked_view, true);
5757
uint32_t pin_timeout = desktop_pin_lock_get_fail_timeout();
5858
if(pin_timeout > 0) {

applications/services/desktop/scenes/desktop_scene_main.c

+17-2
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ bool desktop_scene_main_on_event(void* context, SceneManagerEvent event) {
113113
}
114114

115115
case DesktopMainEventOpenFavoritePrimary:
116-
LOAD_DESKTOP_SETTINGS(&desktop->settings);
116+
DESKTOP_SETTINGS_LOAD(&desktop->settings);
117117
if(desktop->settings.favorite_primary < FLIPPER_APPS_COUNT) {
118118
LoaderStatus status = loader_start(
119119
desktop->loader, FLIPPER_APPS[desktop->settings.favorite_primary].name, NULL);
@@ -126,7 +126,7 @@ bool desktop_scene_main_on_event(void* context, SceneManagerEvent event) {
126126
consumed = true;
127127
break;
128128
case DesktopMainEventOpenFavoriteSecondary:
129-
LOAD_DESKTOP_SETTINGS(&desktop->settings);
129+
DESKTOP_SETTINGS_LOAD(&desktop->settings);
130130
if(desktop->settings.favorite_secondary < FLIPPER_APPS_COUNT) {
131131
LoaderStatus status = loader_start(
132132
desktop->loader,
@@ -157,6 +157,21 @@ bool desktop_scene_main_on_event(void* context, SceneManagerEvent event) {
157157
}
158158
consumed = true;
159159
break;
160+
case DesktopMainEventOpenPassport: {
161+
LoaderStatus status = loader_start(desktop->loader, "Passport", NULL);
162+
if(status != LoaderStatusOk) {
163+
FURI_LOG_E(TAG, "loader_start failed: %d", status);
164+
}
165+
break;
166+
}
167+
case DesktopMainEventOpenGameMenu: {
168+
LoaderStatus status = loader_start(
169+
desktop->loader, "Applications", EXT_PATH("/apps/Games/snake_game.fap"));
170+
if(status != LoaderStatusOk) {
171+
FURI_LOG_E(TAG, "loader_start failed: %d", status);
172+
}
173+
break;
174+
}
160175
case DesktopLockedEventUpdate:
161176
desktop_view_locked_update(desktop->locked_view);
162177
consumed = true;

applications/services/desktop/views/desktop_events.h

+5-2
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@ typedef enum {
77
DesktopMainEventOpenFavoriteSecondary,
88
DesktopMainEventOpenMenu,
99
DesktopMainEventOpenDebug,
10-
DesktopMainEventOpenPassport, /**< Broken, don't use it */
10+
DesktopMainEventOpenPassport,
1111
DesktopMainEventOpenPowerOff,
1212

13+
DesktopMainEventOpenGameMenu,
14+
1315
DesktopLockedEventUnlocked,
1416
DesktopLockedEventUpdate,
1517
DesktopLockedEventShowPinInput,
@@ -28,7 +30,8 @@ typedef enum {
2830

2931
DesktopLockMenuEventLock,
3032
DesktopLockMenuEventPinLock,
31-
DesktopLockMenuEventExit,
33+
DesktopLockMenuEventDummyModeOn,
34+
DesktopLockMenuEventDummyModeOff,
3235

3336
DesktopAnimationEventCheckAnimation,
3437
DesktopAnimationEventNewIdleAnimation,

0 commit comments

Comments
 (0)