diff options
Diffstat (limited to 'src/displayapp/DisplayApp.cpp')
| -rw-r--r-- | src/displayapp/DisplayApp.cpp | 97 |
1 files changed, 63 insertions, 34 deletions
diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 5600782..e62bd81 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -96,9 +96,9 @@ void DisplayApp::Start(System::BootErrors error) { bootError = error; if (error == System::BootErrors::TouchController) { - LoadApp(Apps::Error); + LoadApp(Apps::Error, DisplayApp::FullRefreshDirections::None); } else { - LoadApp(Apps::Clock); + LoadApp(Apps::Clock, DisplayApp::FullRefreshDirections::None); } if (pdPASS != xTaskCreate(DisplayApp::Process, "displayapp", 800, this, 0, &taskHandle)) { @@ -132,7 +132,7 @@ void DisplayApp::Refresh() { break; case States::Running: if (!currentScreen->IsRunning()) { - LoadApp(returnToApp); + LoadApp(returnToApp, returnDirection); } queueTimeout = lv_task_handler(); break; @@ -174,7 +174,7 @@ void DisplayApp::Refresh() { // Screens::Clock::BleConnectionStates::NotConnected); break; case Messages::NewNotification: - LoadApp(Apps::NotificationsPreview); + LoadApp(Apps::NotificationsPreview, DisplayApp::FullRefreshDirections::Down); break; case Messages::TouchEvent: { if (state != States::Running) { @@ -188,13 +188,13 @@ void DisplayApp::Refresh() { if (currentApp == Apps::Clock) { switch (gesture) { case TouchEvents::SwipeUp: - LoadApp(Apps::Launcher); + LoadApp(Apps::Launcher, DisplayApp::FullRefreshDirections::Up); break; case TouchEvents::SwipeDown: - LoadApp(Apps::Notifications); + LoadApp(Apps::Notifications, DisplayApp::FullRefreshDirections::Down); break; case TouchEvents::SwipeRight: - LoadApp(Apps::QuickSettings); + LoadApp(Apps::QuickSettings, DisplayApp::FullRefreshDirections::RightAnim); break; case TouchEvents::DoubleTap: PushMessageToSystemTask(System::Messages::GoToSleep); @@ -202,8 +202,8 @@ void DisplayApp::Refresh() { default: break; } - } else { - LoadApp(returnToApp); + } else if (returnTouchEvent == gesture) { + LoadApp(returnToApp, returnDirection); brightnessController.Set(settingsController.GetBrightness()); brightnessController.Backup(); } @@ -216,7 +216,7 @@ void DisplayApp::Refresh() { if (currentApp == Apps::Clock) { PushMessageToSystemTask(System::Messages::GoToSleep); } else { - LoadApp(returnToApp); + LoadApp(returnToApp, returnDirection); brightnessController.Set(settingsController.GetBrightness()); brightnessController.Backup(); } @@ -225,39 +225,39 @@ void DisplayApp::Refresh() { case Messages::ButtonLongPressed: if (currentApp != Apps::Clock) { if (currentApp == Apps::Notifications) { - LoadApp(Apps::Clock); + LoadApp(Apps::Clock, DisplayApp::FullRefreshDirections::Up); } else if (currentApp == Apps::QuickSettings) { - LoadApp(Apps::Clock); + LoadApp(Apps::Clock, DisplayApp::FullRefreshDirections::LeftAnim); } else { - LoadApp(Apps::Clock); + LoadApp(Apps::Clock, DisplayApp::FullRefreshDirections::Down); } } break; case Messages::ButtonLongerPressed: // Open up Firmware window, before possible reboot if press continues - LoadApp(Apps::FirmwareValidation); + LoadApp(Apps::FirmwareValidation, DisplayApp::FullRefreshDirections::Up); break; case Messages::ButtonDoubleClicked: if (currentApp != Apps::Notifications && currentApp != Apps::NotificationsPreview) { - LoadApp(Apps::Notifications); + LoadApp(Apps::Notifications, DisplayApp::FullRefreshDirections::Down); } break; case Messages::BleFirmwareUpdateStarted: - LoadApp(Apps::FirmwareUpdate); + LoadApp(Apps::FirmwareUpdate, DisplayApp::FullRefreshDirections::Down); break; case Messages::UpdateDateTime: // Added to remove warning // What should happen here? break; case Messages::Clock: - LoadApp(Apps::Clock); + LoadApp(Apps::Clock, DisplayApp::FullRefreshDirections::None); break; } } if (nextApp != Apps::None) { - LoadApp(nextApp); + LoadApp(nextApp, nextDirection); nextApp = Apps::None; } @@ -266,25 +266,29 @@ void DisplayApp::Refresh() { } } -void DisplayApp::StartApp(Apps app) { +void DisplayApp::StartApp(Apps app, DisplayApp::FullRefreshDirections direction) { nextApp = app; + nextDirection = direction; } -void DisplayApp::ReturnApp(Apps app) { +void DisplayApp::ReturnApp(Apps app, DisplayApp::FullRefreshDirections direction, TouchEvents touchEvent) { returnToApp = app; + returnDirection = direction; + returnTouchEvent = touchEvent; } -void DisplayApp::LoadApp(Apps app) { +void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) { touchHandler.CancelTap(); currentScreen.reset(nullptr); + SetFullRefresh(direction); // default return to launcher - ReturnApp(Apps::Launcher); + ReturnApp(Apps::Launcher, FullRefreshDirections::Down, TouchEvents::SwipeDown); switch (app) { case Apps::Launcher: currentScreen = std::make_unique<Screens::ApplicationList>(this, settingsController, batteryController, dateTimeController); - ReturnApp(Apps::Clock); + ReturnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::None: case Apps::Clock: @@ -299,52 +303,52 @@ void DisplayApp::LoadApp(Apps app) { case Apps::Error: currentScreen = std::make_unique<Screens::Error>(this, bootError); - ReturnApp(Apps::Clock); + ReturnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::None); break; case Apps::FirmwareValidation: currentScreen = std::make_unique<Screens::FirmwareValidation>(this, validator); - ReturnApp(Apps::Settings); + ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::FirmwareUpdate: currentScreen = std::make_unique<Screens::FirmwareUpdate>(this, bleController); - ReturnApp(Apps::Clock); + ReturnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::None); break; case Apps::Notifications: currentScreen = std::make_unique<Screens::Notifications>( this, notificationManager, systemTask->nimble().alertService(), motorController, *systemTask, Screens::Notifications::Modes::Normal); - ReturnApp(Apps::Clock); + ReturnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); break; case Apps::NotificationsPreview: currentScreen = std::make_unique<Screens::Notifications>( this, notificationManager, systemTask->nimble().alertService(), motorController, *systemTask, Screens::Notifications::Modes::Preview); - ReturnApp(Apps::Clock); + ReturnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); break; // Settings case Apps::QuickSettings: currentScreen = std::make_unique<Screens::QuickSettings>( this, batteryController, dateTimeController, brightnessController, motorController, settingsController); - ReturnApp(Apps::Clock); + ReturnApp(Apps::Clock, FullRefreshDirections::LeftAnim, TouchEvents::SwipeLeft); break; case Apps::Settings: currentScreen = std::make_unique<Screens::Settings>(this, settingsController); - ReturnApp(Apps::QuickSettings); + ReturnApp(Apps::QuickSettings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::SettingTimeFormat: currentScreen = std::make_unique<Screens::SettingTimeFormat>(this, settingsController); - ReturnApp(Apps::Settings); + ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::SettingWakeUp: currentScreen = std::make_unique<Screens::SettingWakeUp>(this, settingsController); - ReturnApp(Apps::Settings); + ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::SettingDisplay: currentScreen = std::make_unique<Screens::SettingDisplay>(this, settingsController); - ReturnApp(Apps::Settings); + ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::SettingShakeThreshold: currentScreen = std::make_unique<Screens::SettingShakeThreshold>(this, settingsController, motionController, *systemTask); - ReturnApp(Apps::Settings); + ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; } currentApp = app; @@ -363,6 +367,31 @@ void DisplayApp::PushMessage(Messages msg) { } } +void DisplayApp::SetFullRefresh(DisplayApp::FullRefreshDirections direction) { + switch (direction) { + case DisplayApp::FullRefreshDirections::Down: + lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::Down); + break; + case DisplayApp::FullRefreshDirections::Up: + lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::Up); + break; + case DisplayApp::FullRefreshDirections::Left: + lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::Left); + break; + case DisplayApp::FullRefreshDirections::Right: + lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::Right); + break; + case DisplayApp::FullRefreshDirections::LeftAnim: + lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::LeftAnim); + break; + case DisplayApp::FullRefreshDirections::RightAnim: + lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::RightAnim); + break; + default: + break; + } +} + void DisplayApp::PushMessageToSystemTask(Pinetime::System::Messages message) { if (systemTask != nullptr) { systemTask->PushMessage(message); |
