Do not compile GFX and older fonts anymore.

Refactor SystemTask in its own class.
Refactor Screen to be able to close current screen and open a new one.
Re-enable sleep/wake up and propagate button event to Screens.
This commit is contained in:
JF
2020-02-23 13:44:39 +01:00
parent 2bdff7ed2b
commit 02772b996f
13 changed files with 313 additions and 200 deletions
+24 -27
View File
@@ -13,25 +13,26 @@
#include <string>
#include <lvgl/lvgl.h>
#include <DisplayApp/Screens/Tile.h>
#include <DisplayApp/Screens/Tab.h>
#include "../SystemTask/SystemTask.h"
//#include <DisplayApp/Screens/Tab.h>
using namespace Pinetime::Applications;
DisplayApp::DisplayApp(Pinetime::Drivers::St7789& lcd,
Pinetime::Components::Gfx& gfx,
Pinetime::Components::LittleVgl& lvgl,
Pinetime::Drivers::Cst816S& touchPanel,
Controllers::Battery &batteryController,
Controllers::Ble &bleController,
Controllers::DateTime &dateTimeController) :
Controllers::DateTime &dateTimeController,
Pinetime::System::SystemTask& systemTask) :
lcd{lcd},
gfx{gfx},
lvgl{lvgl},
touchPanel{touchPanel},
batteryController{batteryController},
bleController{bleController},
dateTimeController{dateTimeController},
currentScreen{new Screens::Clock(this, gfx, dateTimeController) } {
currentScreen{new Screens::Clock(this, dateTimeController) },
systemTask{systemTask} {
msgQueue = xQueueCreate(queueSize, itemSize);
}
@@ -48,7 +49,7 @@ void DisplayApp::Process(void *instance) {
while (1) {
app->Refresh();
lv_task_handler();
}
}
@@ -114,36 +115,28 @@ void DisplayApp::Refresh() {
OnTouchEvent();
break;
case Messages::ButtonPushed:
currentScreen->OnButtonPushed();
if(!currentScreen->OnButtonPushed()) {
systemTask.PushMessage(System::SystemTask::Messages::GoToSleep);
}
break;
}
}
}
bool first = true;
void DisplayApp::RunningState() {
// clockScreen.SetCurrentDateTime(dateTimeController.CurrentDateTime());
if(currentScreen != nullptr) {
currentScreen->Refresh(first);
if(currentScreen->GetNextScreen() != Screens::Screen::NextScreen::None) {
switch(currentScreen->GetNextScreen()) {
case Screens::Screen::NextScreen::Clock:
currentScreen.reset(nullptr);
currentScreen.reset(new Screens::Clock(this, gfx, dateTimeController));
break;
case Screens::Screen::NextScreen::Menu:
currentScreen.reset(nullptr);
currentScreen.reset(new Screens::Tile(this, gfx));
break;
case Screens::Screen::NextScreen::App:
currentScreen.reset(nullptr);
currentScreen.reset(new Screens::Message(this, gfx));
break;
}
if(!currentScreen->Refresh(true)) {
currentScreen.reset(nullptr);
switch(nextApp) {
case Apps::None:
case Apps::Launcher: currentScreen.reset(new Screens::Tile(this)); break;
case Apps::Clock: currentScreen.reset(new Screens::Clock(this, dateTimeController)); break;
// case Apps::Test: currentScreen.reset(new Screens::Message(this)); break;
}
first = false;
nextApp = Apps::None;
}
lv_task_handler();
}
void DisplayApp::IdleState() {
@@ -169,3 +162,7 @@ void DisplayApp::OnTouchEvent() {
// pointColor+=10;
// }
}
void DisplayApp::StartApp(DisplayApp::Apps app) {
nextApp = app;
}