[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:
		
							parent
							
								
									1448b9cf66
								
							
						
					
					
						commit
						effda5ab44
					
				| @ -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))) { | ||||||
|  |         if(tab != ArchiveTabBrowser) { | ||||||
|             archive_switch_tab(browser, key); |             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; | ||||||
|         }); |         }); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -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; | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 its your bedtime
						its your bedtime