[FL-1852] Archive: browser offset fix (#716)

* Archive app: check last offset value upon updating offset
* fix browser empty storage hang up

Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
its your bedtime 2021-09-24 15:03:04 +03:00 committed by GitHub
parent 1448b9cf66
commit effda5ab44
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 7 deletions

View File

@ -10,6 +10,9 @@ void archive_update_offset(ArchiveBrowserView* browser) {
if(array_size > 3 && model->idx >= array_size - 1) { if(array_size > 3 && model->idx >= array_size - 1) {
model->list_offset = model->idx - 3; model->list_offset = model->idx - 3;
} else if(model->last_offset && model->last_offset != model->list_offset) {
model->list_offset = model->last_offset;
model->last_offset = !model->last_offset;
} else if(model->list_offset < model->idx - bounds) { } else if(model->list_offset < model->idx - bounds) {
model->list_offset = CLAMP(model->idx - 2, array_size - bounds, 0); model->list_offset = CLAMP(model->idx - 2, array_size - bounds, 0);
} else if(model->list_offset > model->idx - bounds) { } else if(model->list_offset > model->idx - bounds) {
@ -199,7 +202,9 @@ void archive_switch_tab(ArchiveBrowserView* browser, InputKey key) {
if((tab != ArchiveTabFavorites && if((tab != ArchiveTabFavorites &&
!archive_dir_empty(browser, archive_get_default_path(tab))) || !archive_dir_empty(browser, archive_get_default_path(tab))) ||
(tab == ArchiveTabFavorites && !archive_favorites_count(browser))) { (tab == ArchiveTabFavorites && !archive_favorites_count(browser))) {
archive_switch_tab(browser, key); if(tab != ArchiveTabBrowser) {
archive_switch_tab(browser, key);
}
} else { } else {
with_view_model( with_view_model(
browser->view, (ArchiveBrowserViewModel * model) { browser->view, (ArchiveBrowserViewModel * model) {
@ -217,11 +222,11 @@ void archive_switch_tab(ArchiveBrowserView* browser, InputKey key) {
void archive_enter_dir(ArchiveBrowserView* browser, string_t name) { void archive_enter_dir(ArchiveBrowserView* browser, string_t name) {
furi_assert(browser); furi_assert(browser);
furi_assert(name); furi_assert(name);
// update last index
with_view_model( with_view_model(
browser->view, (ArchiveBrowserViewModel * model) { browser->view, (ArchiveBrowserViewModel * model) {
model->last_idx[model->depth] = model->last_idx = model->idx;
CLAMP(model->idx, files_array_size(model->files) - 1, 0); model->last_offset = model->list_offset;
model->idx = 0; model->idx = 0;
model->depth = CLAMP(model->depth + 1, MAX_DEPTH, 0); model->depth = CLAMP(model->depth + 1, MAX_DEPTH, 0);
return false; return false;
@ -247,7 +252,7 @@ void archive_leave_dir(ArchiveBrowserView* browser) {
with_view_model( with_view_model(
browser->view, (ArchiveBrowserViewModel * model) { browser->view, (ArchiveBrowserViewModel * model) {
model->depth = CLAMP(model->depth - 1, MAX_DEPTH, 0); model->depth = CLAMP(model->depth - 1, MAX_DEPTH, 0);
model->idx = model->last_idx[model->depth]; model->idx = model->last_idx;
return false; return false;
}); });

View File

@ -67,13 +67,14 @@ typedef struct {
ArchiveTabEnum last_tab; ArchiveTabEnum last_tab;
files_array_t files; files_array_t files;
uint8_t depth;
uint8_t menu_idx; uint8_t menu_idx;
bool menu; bool menu;
uint16_t idx; uint16_t idx;
uint16_t last_idx[MAX_DEPTH]; uint16_t last_idx;
uint16_t list_offset; uint16_t list_offset;
uint16_t last_offset;
uint8_t depth;
} ArchiveBrowserViewModel; } ArchiveBrowserViewModel;