Back button now does something and lockscreen can OPTIONALLY be set to stay over reboot (Implemented #146)

This commit is contained in:
CommanderRedYT
2021-12-14 19:52:39 +01:00
parent 595a508d93
commit 6adca753aa
9 changed files with 44 additions and 4 deletions

View File

@@ -216,6 +216,7 @@ struct BatteryApplyCalibrationAccessor : public RefAccessorSaveSettings<bool> {
struct LockscreenAllowPresetSwitchAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.lockscreen.allowPresetSwitch; } }; struct LockscreenAllowPresetSwitchAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.lockscreen.allowPresetSwitch; } };
template<uint8_t index> template<uint8_t index>
struct LockscreenPinDigitAccessor : public RefAccessorSaveSettings<int8_t> { int8_t &getRef() const override { return settings.lockscreen.pin[index]; } }; struct LockscreenPinDigitAccessor : public RefAccessorSaveSettings<int8_t> { int8_t &getRef() const override { return settings.lockscreen.pin[index]; } };
struct LockscreenKeepLockedAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.lockscreen.keepLockedAfterReboot; } };
// Handbremse // Handbremse
struct HandbremsEnabledAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.handbremse.enable; } }; struct HandbremsEnabledAccessor : public RefAccessorSaveSettings<bool> { bool &getRef() const override { return settings.handbremse.enable; } };

View File

@@ -23,6 +23,11 @@ void Lockscreen::start()
profileButtonDisabled = !settings.lockscreen.allowPresetSwitch; profileButtonDisabled = !settings.lockscreen.allowPresetSwitch;
isLocked = true; isLocked = true;
if (settings.lockscreen.keepLockedAfterReboot && !settings.lockscreen.locked)
{
settings.lockscreen.locked = true;
saveSettings();
}
} }
void Lockscreen::initScreen() void Lockscreen::initScreen()
@@ -64,12 +69,12 @@ void Lockscreen::update()
void Lockscreen::redraw() void Lockscreen::redraw()
{ {
if (m_pressed) if (m_pressed || m_back_pressed)
{ {
drawRect(m_currentIndex, 1, TFT_BLACK); drawRect(m_currentIndex, 1, TFT_BLACK);
drawRect(m_currentIndex, 2, TFT_BLACK); drawRect(m_currentIndex, 2, TFT_BLACK);
if (++m_currentIndex>=4) if (!m_back_pressed && ++m_currentIndex>=4)
{ {
if (m_numbers == settings.lockscreen.pin) if (m_numbers == settings.lockscreen.pin)
{ {
@@ -83,7 +88,12 @@ void Lockscreen::redraw()
m_numbers = {0,0,0,0}; m_numbers = {0,0,0,0};
m_currentIndex = 0; m_currentIndex = 0;
std::for_each(std::begin(m_labels) + 1, std::end(m_labels), [](auto &label){ label.redraw({}); }); std::for_each(std::begin(m_labels) + 1, std::end(m_labels), [](auto &label){ label.redraw("0"); });
}
else if (m_back_pressed && m_currentIndex < 3)
{
drawRect(m_currentIndex+1, 1, TFT_BLACK);
drawRect(m_currentIndex+1, 2, TFT_BLACK);
} }
m_labels[m_currentIndex].redraw(std::to_string(m_numbers[m_currentIndex])); m_labels[m_currentIndex].redraw(std::to_string(m_numbers[m_currentIndex]));
@@ -92,6 +102,7 @@ void Lockscreen::redraw()
drawRect(m_currentIndex, 2, TFT_YELLOW); drawRect(m_currentIndex, 2, TFT_YELLOW);
m_pressed = false; m_pressed = false;
m_back_pressed = false;
} }
if (m_rotated) if (m_rotated)
@@ -124,6 +135,11 @@ void Lockscreen::stop()
profileButtonDisabled = false; profileButtonDisabled = false;
isLocked = false; isLocked = false;
if (settings.lockscreen.keepLockedAfterReboot && settings.lockscreen.locked)
{
settings.lockscreen.locked = false;
saveSettings();
}
} }
void Lockscreen::confirm() void Lockscreen::confirm()
@@ -133,6 +149,9 @@ void Lockscreen::confirm()
void Lockscreen::back() void Lockscreen::back()
{ {
if (m_currentIndex > 0)
m_currentIndex--;
m_back_pressed = true;
} }
void Lockscreen::rotate(int offset) void Lockscreen::rotate(int offset)

View File

@@ -46,6 +46,7 @@ private:
uint8_t m_currentIndex{}; uint8_t m_currentIndex{};
bool m_pressed; bool m_pressed;
bool m_back_pressed;
int m_rotated; int m_rotated;
ModeInterface *m_oldMode; ModeInterface *m_oldMode;

View File

@@ -52,6 +52,7 @@ using namespace espgui;
LockscreenSettingsMenu::LockscreenSettingsMenu() LockscreenSettingsMenu::LockscreenSettingsMenu()
{ {
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ALLOWPRESETSWITCH>, ToggleBoolAction, CheckboxIcon, LockscreenAllowPresetSwitchAccessor>>(); constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_ALLOWPRESETSWITCH>, ToggleBoolAction, CheckboxIcon, LockscreenAllowPresetSwitchAccessor>>();
constructMenuItem<makeComponent<MenuItem, StaticText<TEXT_KEEPLOCKED>, ToggleBoolAction, CheckboxIcon, LockscreenKeepLockedAccessor>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_PINDIGIT0, LockscreenPinDigitAccessor<0>>, SwitchScreenAction<LockscreenPinDigit0ChangeScreen>>>(); constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_PINDIGIT0, LockscreenPinDigitAccessor<0>>, SwitchScreenAction<LockscreenPinDigit0ChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_PINDIGIT1, LockscreenPinDigitAccessor<1>>, SwitchScreenAction<LockscreenPinDigit1ChangeScreen>>>(); constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_PINDIGIT1, LockscreenPinDigitAccessor<1>>, SwitchScreenAction<LockscreenPinDigit1ChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_PINDIGIT2, LockscreenPinDigitAccessor<2>>, SwitchScreenAction<LockscreenPinDigit2ChangeScreen>>>(); constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_PINDIGIT2, LockscreenPinDigitAccessor<2>>, SwitchScreenAction<LockscreenPinDigit2ChangeScreen>>>();

View File

@@ -75,6 +75,7 @@ using namespace std::chrono_literals;
#endif #endif
#include "modes/defaultmode.h" #include "modes/defaultmode.h"
#include "displays/statusdisplay.h" #include "displays/statusdisplay.h"
#include "displays/lockscreen.h"
#include "displays/calibratedisplay.h" #include "displays/calibratedisplay.h"
#ifdef FEATURE_DNS_NS #ifdef FEATURE_DNS_NS
#include "dnsannounce.h" #include "dnsannounce.h"
@@ -291,7 +292,16 @@ extern "C" void app_main()
if (!gas || !brems || *gas > 200.f || *brems > 200.f) if (!gas || !brems || *gas > 200.f || *brems > 200.f)
espgui::switchScreen<CalibrateDisplay>(true); espgui::switchScreen<CalibrateDisplay>(true);
else else
espgui::switchScreen<StatusDisplay>(); {
if (settings.lockscreen.keepLockedAfterReboot && settings.lockscreen.locked)
{
espgui::switchScreen<Lockscreen>();
}
else
{
espgui::switchScreen<StatusDisplay>();
}
}
#endif #endif
#ifdef FEATURE_ESPNOW #ifdef FEATURE_ESPNOW
espnow::initESPNow(); espnow::initESPNow();

View File

@@ -274,6 +274,8 @@ constexpr Settings::Ledstrip defaultLedstrip {
constexpr Settings::LockscreenSettings defaultLockscreen { constexpr Settings::LockscreenSettings defaultLockscreen {
.allowPresetSwitch = true, .allowPresetSwitch = true,
.keepLockedAfterReboot = false,
.locked = false,
.pin = { 1, 2, 3, 4 } .pin = { 1, 2, 3, 4 }
}; };

View File

@@ -210,6 +210,8 @@ struct Settings
struct LockscreenSettings { struct LockscreenSettings {
bool allowPresetSwitch; bool allowPresetSwitch;
bool keepLockedAfterReboot;
bool locked;
std::array<int8_t, 4> pin; std::array<int8_t, 4> pin;
} lockscreen; } lockscreen;
@@ -360,6 +362,8 @@ void Settings::executeForEveryCommonSetting(T &&callable)
callable("hybridDeacL", hybrid.deactivationLimit); callable("hybridDeacL", hybrid.deactivationLimit);
callable("lockAlwPresetSw", lockscreen.allowPresetSwitch); callable("lockAlwPresetSw", lockscreen.allowPresetSwitch);
callable("keepLocked", lockscreen.keepLockedAfterReboot);
callable("currentlyLocked", lockscreen.locked);
callable("lockscreenPin", lockscreen.pin); callable("lockscreenPin", lockscreen.pin);
callable("totalCentimeter", savedStatistics.totalCentimeters); callable("totalCentimeter", savedStatistics.totalCentimeters);

View File

@@ -332,6 +332,7 @@ char TEXT_ANIMATION_BLINKBOTH[] = "Blink Both";
//LockscreenSettingsMenu //LockscreenSettingsMenu
char TEXT_LOCKSCREENSETTINGS[] = "Lockscreen Settings"; char TEXT_LOCKSCREENSETTINGS[] = "Lockscreen Settings";
char TEXT_ALLOWPRESETSWITCH[] = "Allow preset switch"; char TEXT_ALLOWPRESETSWITCH[] = "Allow preset switch";
char TEXT_KEEPLOCKED[] = "Keep locked";
char TEXT_PINDIGIT0[] = "PIN digit0"; char TEXT_PINDIGIT0[] = "PIN digit0";
char TEXT_PINDIGIT1[] = "PIN digit1"; char TEXT_PINDIGIT1[] = "PIN digit1";
char TEXT_PINDIGIT2[] = "PIN digit2"; char TEXT_PINDIGIT2[] = "PIN digit2";

View File

@@ -332,6 +332,7 @@ extern char TEXT_ANIMATION_BLINKBOTH[];
//LockscreenSettingsMenu //LockscreenSettingsMenu
extern char TEXT_LOCKSCREENSETTINGS[]; extern char TEXT_LOCKSCREENSETTINGS[];
extern char TEXT_ALLOWPRESETSWITCH[]; extern char TEXT_ALLOWPRESETSWITCH[];
extern char TEXT_KEEPLOCKED[];
extern char TEXT_PINDIGIT0[]; extern char TEXT_PINDIGIT0[];
extern char TEXT_PINDIGIT1[]; extern char TEXT_PINDIGIT1[];
extern char TEXT_PINDIGIT2[]; extern char TEXT_PINDIGIT2[];