diff options
Diffstat (limited to 'applications/desktop/views/desktop_view_slideshow.c')
-rw-r--r-- | applications/desktop/views/desktop_view_slideshow.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/applications/desktop/views/desktop_view_slideshow.c b/applications/desktop/views/desktop_view_slideshow.c index 943206e1..26ae95ea 100644 --- a/applications/desktop/views/desktop_view_slideshow.c +++ b/applications/desktop/views/desktop_view_slideshow.c @@ -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 { @@ -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)) { @@ -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); |