diff --git a/Platformio/OmoteUI/core/ScreenManager.cpp b/Platformio/OmoteUI/core/ScreenManager.cpp index f7fdbc0..bd198da 100644 --- a/Platformio/OmoteUI/core/ScreenManager.cpp +++ b/Platformio/OmoteUI/core/ScreenManager.cpp @@ -9,17 +9,18 @@ Manager &Manager::getInstance() { return mManager; } Manager::Manager() {} +void Manager::pushScreen(Screen::Base::Ptr aScreen) { + mScreens.back()->OnHide(); + mScreens.push_back(std::move(aScreen)); + mScreens.back()->Show(); +} + void Manager::pushScreen(Screen::Base::Ptr aScreen, lv_scr_load_anim_t aPushAnimation) { aScreen->SetPushAnimation(aPushAnimation); pushScreen(std::move(aScreen)); } -void Manager::pushScreen(Screen::Base::Ptr aScreen) { - mScreens.push_back(std::move(aScreen)); - mScreens.back()->Show(); -} - void Manager::pushPopUp(Page::Base::Ptr aPopUpPage, lv_scr_load_anim_t aPushAnimation) { pushScreen(std::make_unique(std::move(aPopUpPage)), @@ -41,12 +42,15 @@ UI::Screen::Base::Ptr Manager::popScreen(Screen::Base *aScreenToRemove) { // Make sure to show correct top of stack // since we popped the top screen off mScreens.back()->Show(); + // Make sure to notify the screen that just got moved off top + retVal->OnHide(); + // In order to make sure the Transition can complete + // flag the removed screen to stay alive in case it falls + // out of scope and gets deleted quickly after this. + retVal->SetKeepAliveTime(mScreens.back()->GetTransitionTime() + 500); } } - // In order to make sure the Transition can complete - // flag the removed screen to stay alive in case it falls - // out of scope and gets deleted quickly after this. - retVal->SetKeepAliveTime(mScreens.back()->GetTransitionTime() + 500); + return retVal; } diff --git a/Platformio/OmoteUI/core/page/DisplaySettings.hpp b/Platformio/OmoteUI/core/page/DisplaySettings.hpp index e2ca363..0310bcb 100644 --- a/Platformio/OmoteUI/core/page/DisplaySettings.hpp +++ b/Platformio/OmoteUI/core/page/DisplaySettings.hpp @@ -7,6 +7,9 @@ class DisplaySettings : public Base { public: DisplaySettings(std::shared_ptr aDisplay); + void OnShow() override{}; + void OnHide() override{}; + private: std::shared_ptr mDisplay; }; diff --git a/Platformio/OmoteUI/core/page/TabView.cpp b/Platformio/OmoteUI/core/page/TabView.cpp index 6a7a5e3..4504830 100644 --- a/Platformio/OmoteUI/core/page/TabView.cpp +++ b/Platformio/OmoteUI/core/page/TabView.cpp @@ -72,4 +72,8 @@ void TabView::OnLvglEvent(lv_event_t *anEvent) { if (anEvent->code == LV_EVENT_VALUE_CHANGED) { HandleTabChange(); } -} \ No newline at end of file +} + +void TabView::OnShow() { mTabs[GetCurrentTabIdx()]->OnShow(); } + +void TabView::OnHide() { mTabs[GetCurrentTabIdx()]->OnHide(); } \ No newline at end of file diff --git a/Platformio/OmoteUI/core/page/TabView.hpp b/Platformio/OmoteUI/core/page/TabView.hpp index 0c54ccd..5045dc6 100644 --- a/Platformio/OmoteUI/core/page/TabView.hpp +++ b/Platformio/OmoteUI/core/page/TabView.hpp @@ -36,10 +36,11 @@ public: bool KeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) override; + void OnShow() override; + void OnHide() override; + protected: void OnLvglEvent(lv_event_t *anEvent) override; - void OnShow() override {} - void OnHide() override {} private: void HandleTabChange(); diff --git a/Platformio/OmoteUI/core/screen/HomeScreen.cpp b/Platformio/OmoteUI/core/screen/HomeScreen.cpp index b762aa8..c8b34b5 100644 --- a/Platformio/OmoteUI/core/screen/HomeScreen.cpp +++ b/Platformio/OmoteUI/core/screen/HomeScreen.cpp @@ -26,6 +26,9 @@ bool HomeScreen::OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) { return false; }; +void HomeScreen::OnShow() { mTabView.OnShow(); }; +void HomeScreen::OnHide() { mTabView.OnHide(); }; + bool HomeScreen::KeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) { if (OnKeyEvent(aKeyEvent)) { return true; diff --git a/Platformio/OmoteUI/core/screen/HomeScreen.hpp b/Platformio/OmoteUI/core/screen/HomeScreen.hpp index 2646bde..5e940b4 100644 --- a/Platformio/OmoteUI/core/screen/HomeScreen.hpp +++ b/Platformio/OmoteUI/core/screen/HomeScreen.hpp @@ -16,6 +16,8 @@ public: bool KeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) override; protected: + void OnShow() override; + void OnHide() override; bool OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) override; private: diff --git a/Platformio/OmoteUI/core/screen/PopUpScreen.cpp b/Platformio/OmoteUI/core/screen/PopUpScreen.cpp index 3c61cce..d335dc6 100644 --- a/Platformio/OmoteUI/core/screen/PopUpScreen.cpp +++ b/Platformio/OmoteUI/core/screen/PopUpScreen.cpp @@ -21,4 +21,7 @@ PopUpScreen::PopUpScreen(Page::Base::Ptr aPage) bool PopUpScreen::OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) { return mContentPage->OnKeyEvent(aKeyEvent); -} \ No newline at end of file +} + +void PopUpScreen::OnShow() { mContentPage->OnShow(); }; +void PopUpScreen::OnHide() { mContentPage->OnHide(); }; \ No newline at end of file diff --git a/Platformio/OmoteUI/core/screen/PopUpScreen.hpp b/Platformio/OmoteUI/core/screen/PopUpScreen.hpp index cea376a..973eee5 100644 --- a/Platformio/OmoteUI/core/screen/PopUpScreen.hpp +++ b/Platformio/OmoteUI/core/screen/PopUpScreen.hpp @@ -13,6 +13,10 @@ public: bool OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) override; +protected: + void OnShow() override; + void OnHide() override; + private: UI::Page::Base::Ptr mContentPage; std::unique_ptr mExitButton;