diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 84fa603622..97c1aad81c 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -218,6 +218,12 @@ void DisplayApp::Refresh() { case FullRefreshDirections::RightAnim: returnDirection = FullRefreshDirections::LeftAnim; break; + case FullRefreshDirections::Left: + returnDirection = FullRefreshDirections::Right; + break; + case FullRefreshDirections::Right: + returnDirection = FullRefreshDirections::Left; + break; default: returnDirection = FullRefreshDirections::None; break; @@ -416,6 +422,10 @@ void DisplayApp::Refresh() { return TouchEvents::SwipeRight; case DisplayApp::FullRefreshDirections::RightAnim: return TouchEvents::SwipeLeft; + case DisplayApp::FullRefreshDirections::Left: + return TouchEvents::SwipeRight; + case DisplayApp::FullRefreshDirections::Right: + return TouchEvents::SwipeLeft; } }; if (!currentScreen->OnTouchEvent(gesture)) { @@ -430,6 +440,11 @@ void DisplayApp::Refresh() { case TouchEvents::SwipeRight: LoadNewScreen(Apps::QuickSettings, DisplayApp::FullRefreshDirections::RightAnim); break; + case TouchEvents::SwipeLeft: + if (previousApp != Apps::None) { + LoadNewScreen(previousApp, DisplayApp::FullRefreshDirections::LeftAnim); + } + break; case TouchEvents::DoubleTap: PushMessageToSystemTask(System::Messages::GoToSleep); break; @@ -438,6 +453,10 @@ void DisplayApp::Refresh() { } } else if (gesture == LoadDirToReturnSwipe(appStackDirections.Top())) { LoadPreviousScreen(); + } else if (gesture == TouchEvents::SwipeRight && currentApp != Apps::QuickSettings) { + LoadNewScreen(Apps::Clock, DisplayApp::FullRefreshDirections::RightAnim); + appStackDirections.Reset(); + returnAppStack.Reset(); } } else { lvgl.CancelTap(); @@ -458,6 +477,8 @@ void DisplayApp::Refresh() { LoadNewScreen(Apps::Clock, DisplayApp::FullRefreshDirections::Up); } else if (currentApp == Apps::QuickSettings) { LoadNewScreen(Apps::Clock, DisplayApp::FullRefreshDirections::LeftAnim); + } else if (currentApp == previousApp) { + LoadNewScreen(Apps::Clock, DisplayApp::FullRefreshDirections::RightAnim); } else { LoadNewScreen(Apps::Clock, DisplayApp::FullRefreshDirections::Down); } @@ -498,7 +519,10 @@ void DisplayApp::Refresh() { } } -void DisplayApp::StartApp(Apps app, DisplayApp::FullRefreshDirections direction) { +void DisplayApp::StartApp(Apps app, DisplayApp::FullRefreshDirections direction, bool setPrevious) { + if (setPrevious) { + previousApp = app; + } nextApp = app; nextDirection = direction; } diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index 016f91d3b6..af9aa297e9 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -73,7 +73,7 @@ namespace Pinetime { void Start(System::BootErrors error); void PushMessage(Display::Messages msg); - void StartApp(Apps app, DisplayApp::FullRefreshDirections direction); + void StartApp(Apps app, DisplayApp::FullRefreshDirections direction, bool setPrevious = false); void SetFullRefresh(FullRefreshDirections direction); @@ -118,7 +118,9 @@ namespace Pinetime { std::unique_ptr currentScreen; Apps currentApp = Apps::None; + Apps previousApp = Apps::None; Apps returnToApp = Apps::None; + FullRefreshDirections returnDirection = FullRefreshDirections::None; TouchEvents returnTouchEvent = TouchEvents::None; diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index 45f715b55a..960b47bb68 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -106,6 +106,6 @@ void Tile::OnValueChangedEvent(lv_obj_t* obj, uint32_t buttonId) { return; } - app->StartApp(apps[buttonId], DisplayApp::FullRefreshDirections::Up); + app->StartApp(apps[buttonId], DisplayApp::FullRefreshDirections::Up, true); running = false; }