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; } };
template<uint8_t 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
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;
isLocked = true;
if (settings.lockscreen.keepLockedAfterReboot && !settings.lockscreen.locked)
{
settings.lockscreen.locked = true;
saveSettings();
}
}
void Lockscreen::initScreen()
@@ -64,12 +69,12 @@ void Lockscreen::update()
void Lockscreen::redraw()
{
if (m_pressed)
if (m_pressed || m_back_pressed)
{
drawRect(m_currentIndex, 1, 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)
{
@@ -83,7 +88,12 @@ void Lockscreen::redraw()
m_numbers = {0,0,0,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]));
@@ -92,6 +102,7 @@ void Lockscreen::redraw()
drawRect(m_currentIndex, 2, TFT_YELLOW);
m_pressed = false;
m_back_pressed = false;
}
if (m_rotated)
@@ -124,6 +135,11 @@ void Lockscreen::stop()
profileButtonDisabled = false;
isLocked = false;
if (settings.lockscreen.keepLockedAfterReboot && settings.lockscreen.locked)
{
settings.lockscreen.locked = false;
saveSettings();
}
}
void Lockscreen::confirm()
@@ -133,6 +149,9 @@ void Lockscreen::confirm()
void Lockscreen::back()
{
if (m_currentIndex > 0)
m_currentIndex--;
m_back_pressed = true;
}
void Lockscreen::rotate(int offset)

View File

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

View File

@@ -52,6 +52,7 @@ using namespace espgui;
LockscreenSettingsMenu::LockscreenSettingsMenu()
{
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_PINDIGIT1, LockscreenPinDigitAccessor<1>>, SwitchScreenAction<LockscreenPinDigit1ChangeScreen>>>();
constructMenuItem<makeComponent<MenuItem, TextWithValueHelper<TEXT_PINDIGIT2, LockscreenPinDigitAccessor<2>>, SwitchScreenAction<LockscreenPinDigit2ChangeScreen>>>();

View File

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

View File

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

View File

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

View File

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

View File

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