Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/flipperzero-firmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorits your bedtime <23366927+itsyourbedtime@users.noreply.github.com>2021-05-18 21:54:56 +0300
committerGitHub <noreply@github.com>2021-05-18 21:54:56 +0300
commitc97d766e5b2ab5cf7ddb9508db1dfbdac1b3233b (patch)
treee6659078337746ac94f8ebef3528faac08cf98ea /applications/dolphin
parent725981f431915508ffc02a4336258d24ae25ee4e (diff)
[FL-1181] Archive app (#458)
* fix stack size, file listing works * fix scrollbar, update docs * cut long filenames * Dolphin: overhaul unlocking logic, unlocked message added * furi - added common_defines.h, minor macro cleanup; fix scrollbar type conversion * remove door opening animation * adaptive long file name shortening, item icons, invert selection * archive: browser tab, file types (beta); scenes: fix sleep emote * dont trim unknown extensions * fix string_size usage * array container for file list, fixes * better path handling * archive: renaming, adding to favorites worksl scrollbar fix: limit min bar height to 1px to prevent disappearance on large lists Co-authored-by: あく <alleteam@gmail.com>
Diffstat (limited to 'applications/dolphin')
-rw-r--r--applications/dolphin/dolphin.c51
-rw-r--r--applications/dolphin/dolphin_i.h4
-rw-r--r--applications/dolphin/dolphin_views.c16
-rw-r--r--applications/dolphin/dolphin_views.h13
-rw-r--r--applications/dolphin/scenes/scene.h16
-rw-r--r--applications/dolphin/scenes/scene_dolphin_state.c2
-rw-r--r--applications/dolphin/scenes/scene_gfx.c36
7 files changed, 69 insertions, 69 deletions
diff --git a/applications/dolphin/dolphin.c b/applications/dolphin/dolphin.c
index 477c9816..4b6f8839 100644
--- a/applications/dolphin/dolphin.c
+++ b/applications/dolphin/dolphin.c
@@ -60,31 +60,41 @@ bool dolphin_view_first_start_input(InputEvent* event, void* context) {
void dolphin_lock_handler(InputEvent* event, Dolphin* dolphin) {
furi_assert(event);
furi_assert(dolphin);
- if(event->key == InputKeyBack) {
+
+ with_view_model(
+ dolphin->idle_view_main, (DolphinViewMainModel * model) {
+ model->hint_timeout = HINT_TIMEOUT_L;
+ return true;
+ });
+
+ if(event->key == InputKeyBack && event->type == InputTypeShort) {
uint32_t press_time = HAL_GetTick();
// check if pressed sequentially
- if(press_time - dolphin->lock_lastpress < 200) {
- dolphin->lock_lastpress = press_time;
- dolphin->lock_count++;
- } else if(press_time - dolphin->lock_lastpress > 200) {
+ if(press_time - dolphin->lock_lastpress > UNLOCK_RST_TIMEOUT) {
dolphin->lock_lastpress = press_time;
dolphin->lock_count = 0;
+ } else if(press_time - dolphin->lock_lastpress < UNLOCK_RST_TIMEOUT) {
+ dolphin->lock_lastpress = press_time;
+ dolphin->lock_count++;
}
- if(dolphin->lock_count == 3) {
+ if(dolphin->lock_count == 2) {
dolphin->locked = false;
dolphin->lock_count = 0;
with_view_model(
dolphin->view_lockmenu, (DolphinViewLockMenuModel * model) {
model->locked = false;
+ model->door_left_x = -57; // move doors to default pos
+ model->door_right_x = 115;
return true;
});
with_view_model(
dolphin->idle_view_main, (DolphinViewMainModel * model) {
- model->hint_timeout = 0;
+ model->hint_timeout = HINT_TIMEOUT_L; // "unlocked" hint timeout
+ model->locked = false;
return true;
});
@@ -112,9 +122,7 @@ bool dolphin_view_idle_main_input(InputEvent* event, void* context) {
} else if(event->key == InputKeyRight && event->type == InputTypeShort) {
dolphin_switch_to_app(dolphin, &FLIPPER_SCENE);
} else if(event->key == InputKeyDown && event->type == InputTypeShort) {
-#if 0
- dolphin_switch_to_app(dolphin, &ARCHIVE_APP);
-#endif
+ dolphin_switch_to_app(dolphin, &FLIPPER_ARCHIVE);
} else if(event->key == InputKeyDown && event->type == InputTypeLong) {
view_dispatcher_switch_to_view(dolphin->idle_view_dispatcher, DolphinViewStats);
} else if(event->key == InputKeyBack && event->type == InputTypeShort) {
@@ -123,12 +131,6 @@ bool dolphin_view_idle_main_input(InputEvent* event, void* context) {
} else {
// locked
- with_view_model(
- dolphin->idle_view_main, (DolphinViewMainModel * model) {
- model->hint_timeout = 3;
- return true;
- });
-
dolphin_lock_handler(event, dolphin);
dolphin_scene_handler_switch_scene(dolphin);
}
@@ -151,14 +153,19 @@ static void lock_menu_callback(void* context, uint8_t index) {
// lock
case 0:
dolphin->locked = true;
- DolphinViewLockMenuModel* model = view_get_model(dolphin->view_lockmenu);
-
- model->locked = true;
- model->exit_timeout = 20;
- view_port_enabled_set(dolphin->lock_viewport, dolphin->locked);
- view_commit_model(dolphin->view_lockmenu, true);
+ with_view_model(
+ dolphin->view_lockmenu, (DolphinViewLockMenuModel * model) {
+ model->locked = true;
+ model->exit_timeout = HINT_TIMEOUT_H;
+ return true;
+ });
+ with_view_model(
+ dolphin->idle_view_main, (DolphinViewMainModel * model) {
+ model->locked = true;
+ return true;
+ });
break;
default:
diff --git a/applications/dolphin/dolphin_i.h b/applications/dolphin/dolphin_i.h
index 1d485764..2e700363 100644
--- a/applications/dolphin/dolphin_i.h
+++ b/applications/dolphin/dolphin_i.h
@@ -14,6 +14,10 @@
#include <assets_icons.h>
#include <stdint.h>
+#define UNLOCK_RST_TIMEOUT 500 // keypress counter reset timeout (ms)
+#define HINT_TIMEOUT_L 3 // low refresh rate timeout (app ticks)
+#define HINT_TIMEOUT_H 40 // high refresh rate timeout (app ticks)
+
typedef enum {
DolphinEventTypeDeed,
DolphinEventTypeSave,
diff --git a/applications/dolphin/dolphin_views.c b/applications/dolphin/dolphin_views.c
index bb97e079..ed48ef65 100644
--- a/applications/dolphin/dolphin_views.c
+++ b/applications/dolphin/dolphin_views.c
@@ -65,8 +65,13 @@ void dolphin_view_idle_main_draw(Canvas* canvas, void* model) {
if(m->hint_timeout > 0) {
m->hint_timeout--;
- canvas_draw_icon_name(canvas, 13, 5, I_LockPopup_100x49);
- elements_multiline_text(canvas, 65, 20, "To unlock\npress:");
+ if(m->locked) {
+ canvas_draw_icon_name(canvas, 13, 5, I_LockPopup_100x49);
+ elements_multiline_text(canvas, 65, 20, "To unlock\npress:");
+ } else {
+ canvas_set_font(canvas, FontPrimary);
+ elements_multiline_text_framed(canvas, 42, 30, "Unlocked");
+ }
}
}
@@ -81,8 +86,8 @@ void dolphin_view_lockmenu_draw(Canvas* canvas, void* model) {
if(m->locked) {
m->exit_timeout--;
- m->door_left_x = CLAMP(m->door_left_x + 10, 0, -57);
- m->door_right_x = CLAMP(m->door_right_x - 10, 115, 60);
+ m->door_left_x = CLAMP(m->door_left_x + 5, 0, -57);
+ m->door_right_x = CLAMP(m->door_right_x - 5, 115, 60);
if(m->door_left_x > -10) {
canvas_set_font(canvas, FontPrimary);
@@ -90,9 +95,6 @@ void dolphin_view_lockmenu_draw(Canvas* canvas, void* model) {
}
} else {
- m->door_left_x = CLAMP(m->door_left_x - 10, 0, -57);
- m->door_right_x = CLAMP(m->door_right_x + 10, 115, 60);
-
if(m->door_left_x == -57) {
for(uint8_t i = 0; i < 3; ++i) {
canvas_draw_str_aligned(
diff --git a/applications/dolphin/dolphin_views.h b/applications/dolphin/dolphin_views.h
index a8771b10..da162063 100644
--- a/applications/dolphin/dolphin_views.h
+++ b/applications/dolphin/dolphin_views.h
@@ -6,18 +6,6 @@
#include <input/input.h>
#include <furi.h>
-#ifndef MAX
-#define MAX(x, y) (((x) > (y)) ? (x) : (y))
-#endif
-
-#ifndef MIN
-#define MIN(x, y) (((x) < (y)) ? (x) : (y))
-#endif
-
-#ifndef CLAMP
-#define CLAMP(x, upper, lower) (MIN(upper, MAX(x, lower)))
-#endif
-
// Idle screen
typedef enum {
DolphinViewIdleMain,
@@ -60,6 +48,7 @@ typedef struct {
Icon* animation;
uint8_t scene_num;
uint8_t hint_timeout;
+ bool locked;
} DolphinViewMainModel;
void dolphin_view_idle_main_draw(Canvas* canvas, void* model);
diff --git a/applications/dolphin/scenes/scene.h b/applications/dolphin/scenes/scene.h
index df09fad1..a1b4c1d4 100644
--- a/applications/dolphin/scenes/scene.h
+++ b/applications/dolphin/scenes/scene.h
@@ -4,22 +4,6 @@
#include <gui/gui_i.h>
#include <u8g2/u8g2.h>
-#ifndef ARRSIZE
-#define ARRSIZE(arr) (sizeof(arr) / sizeof(arr[0]))
-#endif
-
-#ifndef MAX
-#define MAX(x, y) (((x) > (y)) ? (x) : (y))
-#endif
-
-#ifndef MIN
-#define MIN(x, y) (((x) < (y)) ? (x) : (y))
-#endif
-
-#ifndef CLAMP
-#define CLAMP(x, upper, lower) (MIN(upper, MAX(x, lower)))
-#endif
-
// global
#define SCALE 32
// screen
diff --git a/applications/dolphin/scenes/scene_dolphin_state.c b/applications/dolphin/scenes/scene_dolphin_state.c
index 9acb87e9..632676b6 100644
--- a/applications/dolphin/scenes/scene_dolphin_state.c
+++ b/applications/dolphin/scenes/scene_dolphin_state.c
@@ -66,7 +66,7 @@ void dolphin_scene_update_state(SceneState* state, uint32_t t, uint32_t dt) {
state->player_flipped = false;
if(state->action_timeout == 0) {
scene_proceed_action(state);
- state->emote_id = roll_new(state->previous_emote, ARRSIZE(emotes_list));
+ state->emote_id = roll_new(state->previous_emote, SIZEOF_ARRAY(emotes_list));
break;
}
case INTERACT:
diff --git a/applications/dolphin/scenes/scene_gfx.c b/applications/dolphin/scenes/scene_gfx.c
index f32b9fd7..f07c2efd 100644
--- a/applications/dolphin/scenes/scene_gfx.c
+++ b/applications/dolphin/scenes/scene_gfx.c
@@ -37,17 +37,14 @@ static void scene_draw_sleep_emote(SceneState* state, Canvas* canvas) {
furi_assert(state);
furi_assert(canvas);
- char dialog_str[] = "zZzZ...";
- char buf[64];
+ char dialog_str[] = "zZzZ..";
// 2do - sofa x pos getter
- if(state->player_global.x == 154 && state->action_timeout % 100 < 30) {
+ if(state->player_global.x == 154 && state->action_timeout % 100 < 50) {
if(state->dialog_progress < strlen(dialog_str)) {
- if(state->action_timeout % 5 == 0) state->dialog_progress++;
- dialog_str[state->dialog_progress] = '\0';
- snprintf(buf, state->dialog_progress, dialog_str);
- // bubble vs just text?
- //elements_multiline_text_framed(canvas, 80, 20, buf);
- canvas_draw_str(canvas, 80, 20, buf);
+ if(state->action_timeout % 10 == 0) state->dialog_progress++;
+
+ dialog_str[state->dialog_progress + 1] = '\0';
+ canvas_draw_str(canvas, 80, 20, dialog_str);
}
} else {
@@ -83,6 +80,25 @@ static void draw_idle_emote(SceneState* state, Canvas* canvas){
}
*/
+static void draw_idle_emote(SceneState* state, Canvas* canvas) {
+ furi_assert(state);
+ furi_assert(canvas);
+
+ char dialog_str[] = "...";
+
+ if(state->action_timeout % 100 < 50) {
+ if(state->dialog_progress < strlen(dialog_str)) {
+ if(state->action_timeout % 10 == 0) state->dialog_progress++;
+
+ dialog_str[state->dialog_progress + 1] = '\0';
+ canvas_draw_str(canvas, 70, 15, dialog_str);
+ }
+
+ } else {
+ state->dialog_progress = 0;
+ }
+}
+
void dolphin_scene_render_dolphin(SceneState* state, Canvas* canvas) {
furi_assert(state);
furi_assert(canvas);
@@ -190,8 +206,6 @@ void dolphin_scene_render_state(SceneState* state, Canvas* canvas) {
scene_activate_item_callback(state, canvas);
else if(state->action == SLEEP)
scene_draw_sleep_emote(state, canvas);
- /*
else if(state->action == IDLE)
draw_idle_emote(state, canvas);
- */
} \ No newline at end of file