Repository navigation
Expand file tree
/
Copy pathstatusbar_scene.cpp
More file actions
85 lines (70 loc) · 2.02 KB
/
Copy pathstatusbar_scene.cpp
File metadata and controls
85 lines (70 loc) · 2.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include "statusbar_scene.h"
StatusbarScene::StatusbarScene(const Point &pos) : SceneController(Rect(pos.X(), pos.Y(), 176,20)),
battery(Rect(viewRect.X2()-23, pos.Y()+5, 18, 10)),
wifiOn(Point(viewRect.X2() - 25 - 20, 2), mono::display::wifiMediumSignalSymbol16),
chargingTimer(1000, false)
{
addView(battery);
addView(wifiOn);
battery.setBlinkWhenCritical(true);
battery.setBatteryPercent(100);
wifiOn.setForeground(BackgroundColor());
IApplicationContext *cnxt = IApplicationContext::Instance;
if (cnxt != 0)
cnxt->PowerManager->AppendToPowerAwareQueue(this);
chargingTimer.setCallback(this, &StatusbarScene::updateBattery);
}
void StatusbarScene::setBatteryLevel(uint8_t percent)
{
battery.setBatteryPercent(percent);
}
void StatusbarScene::setWifiOn(bool on)
{
if (on)
wifiOn.setForeground(View::StandardBorderColor);
else
{
wifiOn.setForeground(BackgroundColor());
}
scheduleRepaint();
}
void StatusbarScene::updateBattery()
{
bool charging = true;
#ifndef EMUNO
charging = IApplicationContext::Instance->PowerManager->PowerSystem->IsUSBCharging();
#endif
if (!charging) {
battery.setCriticalPercentAmount(25);
battery.setBorder(View::StandardBorderColor);
#ifndef EMUNO
int percent = mono::power::MonoBattery::ReadPercentage();
if (percent == 0)
{
onSystemWakeFromSleep();
}
else
{
setBatteryLevel(percent);
}
#endif
}
else {
if (!chargingTimer.Running())
{
chargingTimer.start();
}
battery.setCriticalPercentAmount(0);
battery.setBorder(GreenColor);
uint8_t newPercent = battery.batteryPercent()+20;
setBatteryLevel(newPercent > 100 ? 20 : newPercent);
}
}
void StatusbarScene::onSystemPowerOnReset()
{
onSystemWakeFromSleep();
}
void StatusbarScene::onSystemWakeFromSleep()
{
mono::Timer::callOnce(500, this, &StatusbarScene::updateBattery);
}