[FL-2748] disabled automatic poweroff for single-frame slideshows #1621
This commit is contained in:
		| @@ -94,6 +94,10 @@ bool slideshow_is_loaded(Slideshow* slideshow) { | |||||||
|     return slideshow->loaded; |     return slideshow->loaded; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | bool slideshow_is_one_page(Slideshow* slideshow) { | ||||||
|  |     return slideshow->loaded && (slideshow->icon.frame_count == 1); | ||||||
|  | } | ||||||
|  |  | ||||||
| bool slideshow_advance(Slideshow* slideshow) { | bool slideshow_advance(Slideshow* slideshow) { | ||||||
|     uint8_t next_frame = slideshow->current_frame + 1; |     uint8_t next_frame = slideshow->current_frame + 1; | ||||||
|     if(next_frame < slideshow->icon.frame_count) { |     if(next_frame < slideshow->icon.frame_count) { | ||||||
|   | |||||||
| @@ -9,6 +9,7 @@ Slideshow* slideshow_alloc(); | |||||||
| void slideshow_free(Slideshow* slideshow); | void slideshow_free(Slideshow* slideshow); | ||||||
| bool slideshow_load(Slideshow* slideshow, const char* fspath); | bool slideshow_load(Slideshow* slideshow, const char* fspath); | ||||||
| bool slideshow_is_loaded(Slideshow* slideshow); | bool slideshow_is_loaded(Slideshow* slideshow); | ||||||
|  | bool slideshow_is_one_page(Slideshow* slideshow); | ||||||
| void slideshow_goback(Slideshow* slideshow); | void slideshow_goback(Slideshow* slideshow); | ||||||
| bool slideshow_advance(Slideshow* slideshow); | bool slideshow_advance(Slideshow* slideshow); | ||||||
| void slideshow_draw(Slideshow* slideshow, Canvas* canvas, uint8_t x, uint8_t y); | void slideshow_draw(Slideshow* slideshow, Canvas* canvas, uint8_t x, uint8_t y); | ||||||
|   | |||||||
| @@ -35,8 +35,9 @@ static bool desktop_view_slideshow_input(InputEvent* event, void* context) { | |||||||
|     furi_assert(event); |     furi_assert(event); | ||||||
|     DesktopSlideshowView* instance = context; |     DesktopSlideshowView* instance = context; | ||||||
|  |  | ||||||
|  |     DesktopSlideshowViewModel* model = view_get_model(instance->view); | ||||||
|  |     bool update_view = false; | ||||||
|     if(event->type == InputTypeShort) { |     if(event->type == InputTypeShort) { | ||||||
|         DesktopSlideshowViewModel* model = view_get_model(instance->view); |  | ||||||
|         bool end_slideshow = false; |         bool end_slideshow = false; | ||||||
|         switch(event->key) { |         switch(event->key) { | ||||||
|         case InputKeyLeft: |         case InputKeyLeft: | ||||||
| @@ -54,15 +55,18 @@ static bool desktop_view_slideshow_input(InputEvent* event, void* context) { | |||||||
|         if(end_slideshow) { |         if(end_slideshow) { | ||||||
|             instance->callback(DesktopSlideshowCompleted, instance->context); |             instance->callback(DesktopSlideshowCompleted, instance->context); | ||||||
|         } |         } | ||||||
|         view_commit_model(instance->view, true); |         update_view = true; | ||||||
|     } else if(event->key == InputKeyOk) { |     } else if(event->key == InputKeyOk) { | ||||||
|         if(event->type == InputTypePress) { |         if(event->type == InputTypePress) { | ||||||
|             furi_timer_start(instance->timer, DESKTOP_SLIDESHOW_POWEROFF_SHORT); |             furi_timer_start(instance->timer, DESKTOP_SLIDESHOW_POWEROFF_SHORT); | ||||||
|         } else if(event->type == InputTypeRelease) { |         } else if(event->type == InputTypeRelease) { | ||||||
|             furi_timer_stop(instance->timer); |             furi_timer_stop(instance->timer); | ||||||
|             furi_timer_start(instance->timer, DESKTOP_SLIDESHOW_POWEROFF_LONG); |             if(!slideshow_is_one_page(model->slideshow)) { | ||||||
|  |                 furi_timer_start(instance->timer, DESKTOP_SLIDESHOW_POWEROFF_LONG); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |     view_commit_model(instance->view, update_view); | ||||||
|  |  | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| @@ -79,12 +83,12 @@ static void desktop_view_slideshow_enter(void* context) { | |||||||
|     instance->timer = |     instance->timer = | ||||||
|         furi_timer_alloc(desktop_first_start_timer_callback, FuriTimerTypeOnce, instance); |         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); |     DesktopSlideshowViewModel* model = view_get_model(instance->view); | ||||||
|     model->slideshow = slideshow_alloc(); |     model->slideshow = slideshow_alloc(); | ||||||
|     if(!slideshow_load(model->slideshow, SLIDESHOW_FS_PATH)) { |     if(!slideshow_load(model->slideshow, SLIDESHOW_FS_PATH)) { | ||||||
|         instance->callback(DesktopSlideshowCompleted, instance->context); |         instance->callback(DesktopSlideshowCompleted, instance->context); | ||||||
|  |     } else if(!slideshow_is_one_page(model->slideshow)) { | ||||||
|  |         furi_timer_start(instance->timer, DESKTOP_SLIDESHOW_POWEROFF_LONG); | ||||||
|     } |     } | ||||||
|     view_commit_model(instance->view, false); |     view_commit_model(instance->view, false); | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user