50
50
#include " displayapp/screens/settings/SettingBluetooth.h"
51
51
52
52
#include " libs/lv_conf.h"
53
+ #include " UserApps.h"
53
54
54
55
using namespace Pinetime ::Applications;
55
56
using namespace Pinetime ::Applications::Display;
@@ -96,7 +97,12 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd,
96
97
touchHandler {touchHandler},
97
98
filesystem {filesystem},
98
99
lvgl {lcd, filesystem},
99
- timer (this , TimerCallback) {
100
+ timer (this , TimerCallback),
101
+ controllers{
102
+ batteryController, bleController, dateTimeController, notificationManager, heartRateController,
103
+ settingsController, motorController, motionController, alarmController, brightnessController,
104
+ nullptr , filesystem, timer, nullptr , this , lvgl, nullptr , nullptr }
105
+ {
100
106
}
101
107
102
108
void DisplayApp::Start (System::BootErrors error) {
@@ -402,14 +408,21 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio
402
408
SetFullRefresh (direction);
403
409
404
410
switch (app) {
405
- case Apps::Launcher:
406
- currentScreen =
407
- std::make_unique<Screens::ApplicationList>(this , settingsController, batteryController, bleController, dateTimeController, filesystem);
408
- break ;
409
- case Apps::Motion:
410
- // currentScreen = std::make_unique<Screens::Motion>(motionController);
411
- // break;
412
- case Apps::None:
411
+ case Apps::Launcher: {
412
+ std::array<Screens::Tile::Applications, UserAppTypes::Count> apps;
413
+ int i = 0 ;
414
+ for (const auto & userApp : userApps) {
415
+ apps[i++] = Screens::Tile::Applications {userApp.icon , userApp.app , true };
416
+ }
417
+ currentScreen = std::make_unique<Screens::ApplicationList>(this ,
418
+ settingsController,
419
+ batteryController,
420
+ bleController,
421
+ dateTimeController,
422
+ filesystem,
423
+ std::move (apps));
424
+ }
425
+ break ;
413
426
case Apps::Clock:
414
427
currentScreen = std::make_unique<Screens::Clock>(dateTimeController,
415
428
batteryController,
@@ -421,7 +434,6 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio
421
434
systemTask->nimble ().weather (),
422
435
filesystem);
423
436
break ;
424
-
425
437
case Apps::Error:
426
438
currentScreen = std::make_unique<Screens::Error>(bootError);
427
439
break ;
@@ -453,14 +465,6 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio
453
465
*systemTask,
454
466
Screens::Notifications::Modes::Preview);
455
467
break ;
456
- case Apps::Timer:
457
- currentScreen = std::make_unique<Screens::Timer>(timer);
458
- break ;
459
- case Apps::Alarm:
460
- currentScreen = std::make_unique<Screens::Alarm>(alarmController, settingsController.GetClockType (), *systemTask, motorController);
461
- break ;
462
-
463
- // Settings
464
468
case Apps::QuickSettings:
465
469
currentScreen = std::make_unique<Screens::QuickSettings>(this ,
466
470
batteryController,
@@ -516,38 +520,25 @@ void DisplayApp::LoadScreen(Apps app, DisplayApp::FullRefreshDirections directio
516
520
case Apps::FlashLight:
517
521
currentScreen = std::make_unique<Screens::FlashLight>(*systemTask, brightnessController);
518
522
break ;
519
- case Apps::StopWatch:
520
- currentScreen = std::make_unique<Screens::StopWatch>(*systemTask);
521
- break ;
522
- case Apps::Twos:
523
- currentScreen = std::make_unique<Screens::Twos>();
524
- break ;
525
- case Apps::Paint:
526
- currentScreen = std::make_unique<Screens::InfiniPaint>(lvgl, motorController);
527
- break ;
528
- case Apps::Paddle:
529
- currentScreen = std::make_unique<Screens::Paddle>(lvgl);
530
- break ;
531
- case Apps::Music:
532
- currentScreen = std::make_unique<Screens::Music>(systemTask->nimble ().music ());
533
- break ;
534
- case Apps::Navigation:
535
- currentScreen = std::make_unique<Screens::Navigation>(systemTask->nimble ().navigation ());
536
- break ;
537
- case Apps::HeartRate:
538
- currentScreen = std::make_unique<Screens::HeartRate>(heartRateController, *systemTask);
539
- break ;
540
- case Apps::Metronome:
541
- currentScreen = std::make_unique<Screens::Metronome>(motorController, *systemTask);
542
- break ;
543
- /* Weather debug app
544
- case Apps::Weather:
545
- currentScreen = std::make_unique<Screens::Weather>(this, systemTask->nimble().weather());
546
- break;
547
- */
548
- case Apps::Steps:
549
- currentScreen = std::make_unique<Screens::Steps>(motionController, settingsController);
523
+ default : {
524
+ const auto * d = std::find_if (userApps.begin (), userApps.end (), [app](const AppDescription& appDescription) {
525
+ return appDescription.app == app;
526
+ });
527
+ if (d != userApps.end ())
528
+ currentScreen.reset (d->create (controllers));
529
+ else {
530
+ currentScreen = std::make_unique<Screens::Clock>(dateTimeController,
531
+ batteryController,
532
+ bleController,
533
+ notificationManager,
534
+ settingsController,
535
+ heartRateController,
536
+ motionController,
537
+ systemTask->nimble ().weather (),
538
+ filesystem);
539
+ }
550
540
break ;
541
+ }
551
542
}
552
543
currentApp = app;
553
544
}
@@ -605,6 +596,19 @@ void DisplayApp::PushMessageToSystemTask(Pinetime::System::Messages message) {
605
596
606
597
void DisplayApp::Register (Pinetime::System::SystemTask* systemTask) {
607
598
this ->systemTask = systemTask;
599
+ this ->controllers .systemTask = systemTask;
600
+ }
601
+
602
+ void DisplayApp::Register (Pinetime::Controllers::WeatherService* weatherService) {
603
+ this ->controllers .weatherController = weatherService;
604
+ }
605
+
606
+ void DisplayApp::Register (Pinetime::Controllers::MusicService* musicService) {
607
+ this ->controllers .musicService = musicService;
608
+ }
609
+
610
+ void DisplayApp::Register (Pinetime::Controllers::NavigationService* NavigationService) {
611
+ this ->controllers .navigationService = NavigationService;
608
612
}
609
613
610
614
void DisplayApp::ApplyBrightness () {
0 commit comments