Desktop: dummy mode improvements. Fixes: correct scrolling text, correct AM/PM in Clock. (#2160)
* Show passport instead of app if SD/app is missing * Desktop: cleanup dummy mode code and add more apps * Gui: fix incorrect trimming in scrollable text Signed-off-by: Kowalski Dragon (kowalski7cc) <kowalski7cc@users.noreply.github.com> Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
		
							parent
							
								
									797eab8924
								
							
						
					
					
						commit
						a9c2b4d6a0
					
				| @ -56,7 +56,7 @@ static void clock_render_callback(Canvas* canvas, void* ctx) { | |||||||
|             31, |             31, | ||||||
|             AlignLeft, |             AlignLeft, | ||||||
|             AlignCenter, |             AlignCenter, | ||||||
|             (data->datetime.hour > 12) ? "AM" : "PM"); |             (data->datetime.hour > 12) ? "PM" : "AM"); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     canvas_set_font(canvas, FontSecondary); |     canvas_set_font(canvas, FontSecondary); | ||||||
|  | |||||||
| @ -12,6 +12,10 @@ | |||||||
| 
 | 
 | ||||||
| #define TAG "DesktopSrv" | #define TAG "DesktopSrv" | ||||||
| 
 | 
 | ||||||
|  | #define MUSIC_PLAYER_APP EXT_PATH("/apps/Misc/music_player.fap") | ||||||
|  | #define SNAKE_GAME_APP EXT_PATH("/apps/Games/snake_game.fap") | ||||||
|  | #define CLOCK_APP EXT_PATH("/apps/Tools/clock.fap") | ||||||
|  | 
 | ||||||
| static void desktop_scene_main_new_idle_animation_callback(void* context) { | static void desktop_scene_main_new_idle_animation_callback(void* context) { | ||||||
|     furi_assert(context); |     furi_assert(context); | ||||||
|     Desktop* desktop = context; |     Desktop* desktop = context; | ||||||
| @ -60,6 +64,19 @@ static void desktop_switch_to_app(Desktop* desktop, const FlipperApplication* fl | |||||||
| } | } | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | static void desktop_scene_main_open_app_or_profile(Desktop* desktop, const char* path) { | ||||||
|  |     do { | ||||||
|  |         LoaderStatus status = loader_start(desktop->loader, FAP_LOADER_APP_NAME, path); | ||||||
|  |         if(status == LoaderStatusOk) break; | ||||||
|  |         FURI_LOG_E(TAG, "loader_start failed: %d", status); | ||||||
|  | 
 | ||||||
|  |         status = loader_start(desktop->loader, "Passport", NULL); | ||||||
|  |         if(status != LoaderStatusOk) { | ||||||
|  |             FURI_LOG_E(TAG, "loader_start failed: %d", status); | ||||||
|  |         } | ||||||
|  |     } while(false); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void desktop_scene_main_callback(DesktopEvent event, void* context) { | void desktop_scene_main_callback(DesktopEvent event, void* context) { | ||||||
|     Desktop* desktop = (Desktop*)context; |     Desktop* desktop = (Desktop*)context; | ||||||
|     view_dispatcher_send_custom_event(desktop->view_dispatcher, event); |     view_dispatcher_send_custom_event(desktop->view_dispatcher, event); | ||||||
| @ -181,12 +198,16 @@ bool desktop_scene_main_on_event(void* context, SceneManagerEvent event) { | |||||||
|             } |             } | ||||||
|             break; |             break; | ||||||
|         } |         } | ||||||
|         case DesktopMainEventOpenGameMenu: { |         case DesktopMainEventOpenGame: { | ||||||
|             LoaderStatus status = loader_start( |             desktop_scene_main_open_app_or_profile(desktop, SNAKE_GAME_APP); | ||||||
|                 desktop->loader, FAP_LOADER_APP_NAME, EXT_PATH("/apps/Games/snake_game.fap")); |             break; | ||||||
|             if(status != LoaderStatusOk) { |  | ||||||
|                 FURI_LOG_E(TAG, "loader_start failed: %d", status); |  | ||||||
|         } |         } | ||||||
|  |         case DesktopMainEventOpenClock: { | ||||||
|  |             desktop_scene_main_open_app_or_profile(desktop, CLOCK_APP); | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |         case DesktopMainEventOpenMusicPlayer: { | ||||||
|  |             desktop_scene_main_open_app_or_profile(desktop, MUSIC_PLAYER_APP); | ||||||
|             break; |             break; | ||||||
|         } |         } | ||||||
|         case DesktopLockedEventUpdate: |         case DesktopLockedEventUpdate: | ||||||
|  | |||||||
| @ -10,7 +10,9 @@ typedef enum { | |||||||
|     DesktopMainEventOpenPassport, |     DesktopMainEventOpenPassport, | ||||||
|     DesktopMainEventOpenPowerOff, |     DesktopMainEventOpenPowerOff, | ||||||
| 
 | 
 | ||||||
|     DesktopMainEventOpenGameMenu, |     DesktopMainEventOpenGame, | ||||||
|  |     DesktopMainEventOpenClock, | ||||||
|  |     DesktopMainEventOpenMusicPlayer, | ||||||
| 
 | 
 | ||||||
|     DesktopLockedEventUnlocked, |     DesktopLockedEventUnlocked, | ||||||
|     DesktopLockedEventUpdate, |     DesktopLockedEventUpdate, | ||||||
|  | |||||||
| @ -72,13 +72,13 @@ bool desktop_main_input_callback(InputEvent* event, void* context) { | |||||||
|     } else { |     } else { | ||||||
|         if(event->type == InputTypeShort) { |         if(event->type == InputTypeShort) { | ||||||
|             if(event->key == InputKeyOk) { |             if(event->key == InputKeyOk) { | ||||||
|                 main_view->callback(DesktopMainEventOpenGameMenu, main_view->context); |                 main_view->callback(DesktopMainEventOpenGame, main_view->context); | ||||||
|             } else if(event->key == InputKeyUp) { |             } else if(event->key == InputKeyUp) { | ||||||
|                 main_view->callback(DesktopMainEventOpenLockMenu, main_view->context); |                 main_view->callback(DesktopMainEventOpenLockMenu, main_view->context); | ||||||
|             } else if(event->key == InputKeyDown) { |             } else if(event->key == InputKeyDown) { | ||||||
|                 main_view->callback(DesktopMainEventOpenPassport, main_view->context); |                 main_view->callback(DesktopMainEventOpenMusicPlayer, main_view->context); | ||||||
|             } else if(event->key == InputKeyLeft) { |             } else if(event->key == InputKeyLeft) { | ||||||
|                 main_view->callback(DesktopMainEventOpenPassport, main_view->context); |                 main_view->callback(DesktopMainEventOpenClock, main_view->context); | ||||||
|             } |             } | ||||||
|             // Right key is handled by animation manager
 |             // Right key is handled by animation manager
 | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -564,7 +564,7 @@ void elements_scrollable_text_line( | |||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         // Calculate scroll size
 |         // Calculate scroll size
 | ||||||
|         size_t scroll_size = furi_string_size(string); |         size_t scroll_size = furi_string_size(line); | ||||||
|         size_t right_width = 0; |         size_t right_width = 0; | ||||||
|         for(size_t i = scroll_size; i > 0; i--) { |         for(size_t i = scroll_size; i > 0; i--) { | ||||||
|             right_width += canvas_glyph_width(canvas, furi_string_get_char(line, i)); |             right_width += canvas_glyph_width(canvas, furi_string_get_char(line, i)); | ||||||
| @ -579,10 +579,11 @@ void elements_scrollable_text_line( | |||||||
|             furi_string_right(line, scroll); |             furi_string_right(line, scroll); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         do { |         len_px = canvas_string_width(canvas, furi_string_get_cstr(line)); | ||||||
|  |         while(len_px > width) { | ||||||
|             furi_string_left(line, furi_string_size(line) - 1); |             furi_string_left(line, furi_string_size(line) - 1); | ||||||
|             len_px = canvas_string_width(canvas, furi_string_get_cstr(line)); |             len_px = canvas_string_width(canvas, furi_string_get_cstr(line)); | ||||||
|         } while(len_px > width); |         } | ||||||
| 
 | 
 | ||||||
|         if(ellipsis) { |         if(ellipsis) { | ||||||
|             furi_string_cat(line, "..."); |             furi_string_cat(line, "..."); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Kowalski Dragon
						Kowalski Dragon