feat: add sleep screen selection

This commit is contained in:
dpoulter 2026-02-01 12:05:15 +02:00
parent 78ebcf7856
commit 2d8e283b7b
15 changed files with 95 additions and 109 deletions

View File

@ -352,4 +352,3 @@ uint8_t CrossPointSettings::getScreenMarginPixels() const {
} }
return SCREEN_MARGIN_PIXEL_VALUES[MARGIN_5]; return SCREEN_MARGIN_PIXEL_VALUES[MARGIN_5];
} }

View File

@ -115,8 +115,8 @@ class CrossPointSettings {
// Reader screen margin options (pixel values) // Reader screen margin options (pixel values)
#define SCREEN_MARGIN_DATA \ #define SCREEN_MARGIN_DATA \
X(5, "5 px") X(10, "10 px") X(15, "15 px") X(20, "20 px") \ X(5, "5 px") X(10, "10 px") X(15, "15 px") X(20, "20 px") X(25, "25 px") X(30, "30 px") X(35, "35 px") X(40, "40 " \
X(25, "25 px") X(30, "30 px") X(35, "35 px") X(40, "40 px") "px")
enum SCREEN_MARGIN { enum SCREEN_MARGIN {
#define X(val, str) MARGIN_##val, #define X(val, str) MARGIN_##val,

View File

@ -34,8 +34,7 @@ void ListSelectionActivity::onEnter() {
updateRequired = true; updateRequired = true;
xTaskCreate(&ListSelectionActivity::taskTrampoline, "ListSelectionTask", 2048, this, 1, xTaskCreate(&ListSelectionActivity::taskTrampoline, "ListSelectionTask", 2048, this, 1, &displayTaskHandle);
&displayTaskHandle);
} }
void ListSelectionActivity::onExit() { void ListSelectionActivity::onExit() {

View File

@ -52,13 +52,10 @@ class ListSelectionActivity : public Activity {
public: public:
explicit ListSelectionActivity(const std::string& activityName, GfxRenderer& renderer, explicit ListSelectionActivity(const std::string& activityName, GfxRenderer& renderer,
MappedInputManager& mappedInput, const std::string& title, MappedInputManager& mappedInput, const std::string& title,
std::function<size_t()> getItemCount, std::function<size_t()> getItemCount, std::function<std::string(size_t)> getItemText,
std::function<std::string(size_t)> getItemText, std::function<void(size_t)> onItemSelected, std::function<void()> onBack,
std::function<void(size_t)> onItemSelected,
std::function<void()> onBack,
const std::string& emptyMessage = "No items available", const std::string& emptyMessage = "No items available",
const std::string& backLabel = "« Back", const std::string& backLabel = "« Back", const std::string& confirmLabel = "Select")
const std::string& confirmLabel = "Select")
: Activity(activityName, renderer, mappedInput), : Activity(activityName, renderer, mappedInput),
title(title), title(title),
emptyMessage(emptyMessage), emptyMessage(emptyMessage),

View File

@ -1,7 +1,8 @@
#pragma once #pragma once
#include "../Activity.h"
#include <SDCardManager.h> #include <SDCardManager.h>
#include "../Activity.h"
class Bitmap; class Bitmap;
class SleepActivity final : public Activity { class SleepActivity final : public Activity {

View File

@ -213,8 +213,7 @@ bool CategorySettingsActivity::shouldShowSetting(int index) const {
return false; return false;
} }
// Hide "Select Sleep BMP" if sleep screen is not set to CUSTOM // Hide "Select Sleep BMP" if sleep screen is not set to CUSTOM
if (settingsList[index].type == SettingType::ACTION && if (settingsList[index].type == SettingType::ACTION && strcmp(settingsList[index].name, "Select Sleep BMP") == 0) {
strcmp(settingsList[index].name, "Select Sleep BMP") == 0) {
return SETTINGS.sleepScreen == CrossPointSettings::SLEEP_SCREEN_MODE::CUSTOM; return SETTINGS.sleepScreen == CrossPointSettings::SLEEP_SCREEN_MODE::CUSTOM;
} }
return true; return true;

View File

@ -4,12 +4,12 @@
#include "CrossPointSettings.h" #include "CrossPointSettings.h"
RefreshFrequencySelectionActivity::RefreshFrequencySelectionActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, RefreshFrequencySelectionActivity::RefreshFrequencySelectionActivity(GfxRenderer& renderer,
MappedInputManager& mappedInput,
const std::function<void()>& onBack) const std::function<void()>& onBack)
: ListSelectionActivity( : ListSelectionActivity(
"RefreshFrequencySelection", renderer, mappedInput, "Select Refresh Frequency", "RefreshFrequencySelection", renderer, mappedInput, "Select Refresh Frequency",
[this]() { return options.size(); }, [this]() { return options.size(); }, [this](size_t index) { return options[index]; },
[this](size_t index) { return options[index]; },
[this, onBack](size_t index) { [this, onBack](size_t index) {
if (index >= options.size()) { if (index >= options.size()) {
return; return;

View File

@ -7,8 +7,7 @@
ScreenMarginSelectionActivity::ScreenMarginSelectionActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, ScreenMarginSelectionActivity::ScreenMarginSelectionActivity(GfxRenderer& renderer, MappedInputManager& mappedInput,
const std::function<void()>& onBack) const std::function<void()>& onBack)
: ListSelectionActivity( : ListSelectionActivity(
"ScreenMarginSelection", renderer, mappedInput, "Select Screen Margin", "ScreenMarginSelection", renderer, mappedInput, "Select Screen Margin", [this]() { return options.size(); },
[this]() { return options.size(); },
[this](size_t index) { return options[index]; }, [this](size_t index) { return options[index]; },
[this, onBack](size_t index) { [this, onBack](size_t index) {
if (index >= options.size()) { if (index >= options.size()) {

View File

@ -2,11 +2,10 @@
#include <GfxRenderer.h> #include <GfxRenderer.h>
#include <HardwareSerial.h> #include <HardwareSerial.h>
#include <SDCardManager.h>
#include <cstring> #include <cstring>
#include <SDCardManager.h>
#include "CalibreSettingsActivity.h" #include "CalibreSettingsActivity.h"
#include "CategorySettingsActivity.h" #include "CategorySettingsActivity.h"
#include "CrossPointSettings.h" #include "CrossPointSettings.h"

View File

@ -6,16 +6,15 @@
#include <cctype> #include <cctype>
#include <cstring> #include <cstring>
#include "CrossPointSettings.h"
#include "../../../lib/GfxRenderer/Bitmap.h" #include "../../../lib/GfxRenderer/Bitmap.h"
#include "CrossPointSettings.h"
namespace { namespace {
void sortFileList(std::vector<std::string>& strs) { void sortFileList(std::vector<std::string>& strs) {
std::sort(begin(strs), end(strs), [](const std::string& str1, const std::string& str2) { std::sort(begin(strs), end(strs), [](const std::string& str1, const std::string& str2) {
return std::lexicographical_compare(begin(str1), end(str1), begin(str2), end(str2), return std::lexicographical_compare(
[](const char& char1, const char& char2) { begin(str1), end(str1), begin(str2), end(str2),
return std::tolower(char1) < std::tolower(char2); [](const char& char1, const char& char2) { return std::tolower(char1) < std::tolower(char2); });
});
}); });
} }
} // namespace } // namespace
@ -23,8 +22,7 @@ void sortFileList(std::vector<std::string>& strs) {
SleepBmpSelectionActivity::SleepBmpSelectionActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, SleepBmpSelectionActivity::SleepBmpSelectionActivity(GfxRenderer& renderer, MappedInputManager& mappedInput,
const std::function<void()>& onBack) const std::function<void()>& onBack)
: ListSelectionActivity( : ListSelectionActivity(
"SleepBmpSelection", renderer, mappedInput, "Select Sleep BMP", "SleepBmpSelection", renderer, mappedInput, "Select Sleep BMP", [this]() { return files.size(); },
[this]() { return files.size(); },
[this](size_t index) { return files[index]; }, [this](size_t index) { return files[index]; },
[this, onBack](size_t index) { [this, onBack](size_t index) {
if (index >= files.size()) { if (index >= files.size()) {
@ -62,8 +60,7 @@ void SleepBmpSelectionActivity::loadFiles() {
file.getName(name, sizeof(name)); file.getName(name, sizeof(name));
auto filename = std::string(name); auto filename = std::string(name);
if (filename[0] == '.' || filename.length() < 4 || if (filename[0] == '.' || filename.length() < 4 || filename.substr(filename.length() - 4) != ".bmp") {
filename.substr(filename.length() - 4) != ".bmp") {
file.close(); file.close();
continue; continue;
} }
@ -111,4 +108,3 @@ void SleepBmpSelectionActivity::onExit() {
ListSelectionActivity::onExit(); ListSelectionActivity::onExit();
files.clear(); files.clear();
} }

View File

@ -17,4 +17,3 @@ class SleepBmpSelectionActivity final : public ListSelectionActivity {
const std::function<void()>& onBack); const std::function<void()>& onBack);
void onExit() override; void onExit() override;
}; };

View File

@ -7,8 +7,7 @@
SleepScreenSelectionActivity::SleepScreenSelectionActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, SleepScreenSelectionActivity::SleepScreenSelectionActivity(GfxRenderer& renderer, MappedInputManager& mappedInput,
const std::function<void()>& onBack) const std::function<void()>& onBack)
: ListSelectionActivity( : ListSelectionActivity(
"SleepScreenSelection", renderer, mappedInput, "Select Sleep Screen", "SleepScreenSelection", renderer, mappedInput, "Select Sleep Screen", [this]() { return options.size(); },
[this]() { return options.size(); },
[this](size_t index) { return options[index]; }, [this](size_t index) { return options[index]; },
[this, onBack](size_t index) { [this, onBack](size_t index) {
if (index >= options.size()) { if (index >= options.size()) {

View File

@ -7,8 +7,7 @@
SleepTimeoutSelectionActivity::SleepTimeoutSelectionActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, SleepTimeoutSelectionActivity::SleepTimeoutSelectionActivity(GfxRenderer& renderer, MappedInputManager& mappedInput,
const std::function<void()>& onBack) const std::function<void()>& onBack)
: ListSelectionActivity( : ListSelectionActivity(
"SleepTimeoutSelection", renderer, mappedInput, "Select Time to Sleep", "SleepTimeoutSelection", renderer, mappedInput, "Select Time to Sleep", [this]() { return options.size(); },
[this]() { return options.size(); },
[this](size_t index) { return options[index]; }, [this](size_t index) { return options[index]; },
[this, onBack](size_t index) { [this, onBack](size_t index) {
if (index >= options.size()) { if (index >= options.size()) {