Make sure screen manager and other screens are properly calling onShow and onHide.

This commit is contained in:
MatthewColvin 2023-10-08 19:36:20 -05:00
parent a8c14d2b6f
commit 615bcd1fde
8 changed files with 37 additions and 13 deletions

View file

@ -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<PopUpScreen>(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;
}

View file

@ -7,6 +7,9 @@ class DisplaySettings : public Base {
public:
DisplaySettings(std::shared_ptr<DisplayAbstract> aDisplay);
void OnShow() override{};
void OnHide() override{};
private:
std::shared_ptr<DisplayAbstract> mDisplay;
};

View file

@ -72,4 +72,8 @@ void TabView::OnLvglEvent(lv_event_t *anEvent) {
if (anEvent->code == LV_EVENT_VALUE_CHANGED) {
HandleTabChange();
}
}
}
void TabView::OnShow() { mTabs[GetCurrentTabIdx()]->OnShow(); }
void TabView::OnHide() { mTabs[GetCurrentTabIdx()]->OnHide(); }

View file

@ -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();

View file

@ -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;

View file

@ -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:

View file

@ -21,4 +21,7 @@ PopUpScreen::PopUpScreen(Page::Base::Ptr aPage)
bool PopUpScreen::OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) {
return mContentPage->OnKeyEvent(aKeyEvent);
}
}
void PopUpScreen::OnShow() { mContentPage->OnShow(); };
void PopUpScreen::OnHide() { mContentPage->OnHide(); };

View file

@ -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<Widget::Button> mExitButton;