Skip to content

Commit

Permalink
[FL-2692, FL-2604, FL-2632] New first start sequence (#1456)
Browse files Browse the repository at this point in the history
* desktop: restored automatic power off & manual power off on slideshow view; assets: added frames for new first start sequence; docs: added info on slideshow compilation
* desktop: restarting long timer on OK button release

Co-authored-by: あく <[email protected]>
  • Loading branch information
hedger and skotopes authored Jul 26, 2022
1 parent 056446d commit 3fa5e18
Show file tree
Hide file tree
Showing 10 changed files with 49 additions and 1 deletion.
8 changes: 8 additions & 0 deletions applications/desktop/scenes/desktop_scene_slideshow.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include "../desktop_i.h"
#include "../views/desktop_view_slideshow.h"
#include "../views/desktop_events.h"
#include <power/power_service/power.h>

void desktop_scene_slideshow_callback(DesktopEvent event, void* context) {
Desktop* desktop = (Desktop*)context;
Expand All @@ -22,6 +23,7 @@ bool desktop_scene_slideshow_on_event(void* context, SceneManagerEvent event) {
Desktop* desktop = (Desktop*)context;
bool consumed = false;
Storage* storage = NULL;
Power* power = NULL;

if(event.type == SceneManagerEventTypeCustom) {
switch(event.event) {
Expand All @@ -32,6 +34,12 @@ bool desktop_scene_slideshow_on_event(void* context, SceneManagerEvent event) {
scene_manager_previous_scene(desktop->scene_manager);
consumed = true;
break;
case DesktopSlideshowPoweroff:
power = furi_record_open(RECORD_POWER);
power_off(power);
furi_record_close(RECORD_POWER);
consumed = true;
break;

default:
break;
Expand Down
1 change: 1 addition & 0 deletions applications/desktop/views/desktop_events.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ typedef enum {
DesktopAnimationEventInteractAnimation,

DesktopSlideshowCompleted,
DesktopSlideshowPoweroff,

// Global events
DesktopGlobalBeforeAppStarted,
Expand Down
28 changes: 27 additions & 1 deletion applications/desktop/views/desktop_view_slideshow.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,19 @@
#include <furi_hal.h>
#include <gui/elements.h>

#include "../desktop_i.h"
#include "desktop_view_slideshow.h"
#include "../desktop_i.h"
#include "../helpers/slideshow.h"
#include "../helpers/slideshow_filename.h"

#define DESKTOP_SLIDESHOW_POWEROFF_SHORT 5000
#define DESKTOP_SLIDESHOW_POWEROFF_LONG (60 * 60 * 1000)

struct DesktopSlideshowView {
View* view;
DesktopSlideshowViewCallback callback;
void* context;
FuriTimer* timer;
};

typedef struct {
Expand Down Expand Up @@ -51,14 +55,32 @@ static bool desktop_view_slideshow_input(InputEvent* event, void* context) {
instance->callback(DesktopSlideshowCompleted, instance->context);
}
view_commit_model(instance->view, true);
} else if(event->key == InputKeyOk) {
if(event->type == InputTypePress) {
furi_timer_start(instance->timer, DESKTOP_SLIDESHOW_POWEROFF_SHORT);
} else if(event->type == InputTypeRelease) {
furi_timer_stop(instance->timer);
furi_timer_start(instance->timer, DESKTOP_SLIDESHOW_POWEROFF_LONG);
}
}

return true;
}

static void desktop_first_start_timer_callback(void* context) {
DesktopSlideshowView* instance = context;
instance->callback(DesktopSlideshowPoweroff, instance->context);
}

static void desktop_view_slideshow_enter(void* context) {
DesktopSlideshowView* instance = context;

furi_assert(instance->timer == NULL);
instance->timer =
furi_timer_alloc(desktop_first_start_timer_callback, FuriTimerTypeOnce, instance);

furi_timer_start(instance->timer, DESKTOP_SLIDESHOW_POWEROFF_LONG);

DesktopSlideshowViewModel* model = view_get_model(instance->view);
model->slideshow = slideshow_alloc();
if(!slideshow_load(model->slideshow, SLIDESHOW_FS_PATH)) {
Expand All @@ -70,6 +92,10 @@ static void desktop_view_slideshow_enter(void* context) {
static void desktop_view_slideshow_exit(void* context) {
DesktopSlideshowView* instance = context;

furi_timer_stop(instance->timer);
furi_timer_free(instance->timer);
instance->timer = NULL;

DesktopSlideshowViewModel* model = view_get_model(instance->view);
slideshow_free(model->slideshow);
view_commit_model(instance->view, false);
Expand Down
Binary file added assets/slideshow/first_start/frame_00.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/slideshow/first_start/frame_01.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/slideshow/first_start/frame_02.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/slideshow/first_start/frame_03.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/slideshow/first_start/frame_04.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/slideshow/first_start/frame_05.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 13 additions & 0 deletions scripts/ReadMe.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,16 @@ Run in the root folder of the repo:
```bash
python scripts/storage.py -p <flipper_cli_port> send assets/resources /ext
```


# Slideshow creation

Put fullscreen slideshow frames in .png format into `assets/slideshow/my_show` folder, named frame_xx.png, where xx is zero-padded frame number, starting with #0.

Then run

```bash
python scripts/slideshow.py -i assets/slideshow/my_show/ -o assets/slideshow/my_show/.slideshow
```

Upload generated .slideshow file to Flipper's internal storage and restart it.

0 comments on commit 3fa5e18

Please sign in to comment.