|
|
|
|
@@ -1,6 +1,7 @@
|
|
|
|
|
#include "SettingsActivity.h"
|
|
|
|
|
|
|
|
|
|
#include <GfxRenderer.h>
|
|
|
|
|
#include <HardwareSerial.h>
|
|
|
|
|
|
|
|
|
|
#include "CrossPointSettings.h"
|
|
|
|
|
#include "MappedInputManager.h"
|
|
|
|
|
@@ -12,43 +13,28 @@ namespace {
|
|
|
|
|
constexpr int settingsCount = 15;
|
|
|
|
|
const SettingInfo settingsList[settingsCount] = {
|
|
|
|
|
// Should match with SLEEP_SCREEN_MODE
|
|
|
|
|
{"Sleep Screen", SettingType::ENUM, &CrossPointSettings::sleepScreen, {"Dark", "Light", "Custom", "Cover"}},
|
|
|
|
|
{"Status Bar", SettingType::ENUM, &CrossPointSettings::statusBar, {"None", "No Progress", "Full"}},
|
|
|
|
|
{"Extra Paragraph Spacing", SettingType::TOGGLE, &CrossPointSettings::extraParagraphSpacing, {}},
|
|
|
|
|
{"Short Power Button Click", SettingType::TOGGLE, &CrossPointSettings::shortPwrBtn, {}},
|
|
|
|
|
{"Reading Orientation",
|
|
|
|
|
SettingType::ENUM,
|
|
|
|
|
&CrossPointSettings::orientation,
|
|
|
|
|
{"Portrait", "Landscape CW", "Inverted", "Landscape CCW"}},
|
|
|
|
|
{"Front Button Layout",
|
|
|
|
|
SettingType::ENUM,
|
|
|
|
|
&CrossPointSettings::frontButtonLayout,
|
|
|
|
|
{"Bck, Cnfrm, Lft, Rght", "Lft, Rght, Bck, Cnfrm", "Lft, Bck, Cnfrm, Rght"}},
|
|
|
|
|
{"Side Button Layout (reader)",
|
|
|
|
|
SettingType::ENUM,
|
|
|
|
|
&CrossPointSettings::sideButtonLayout,
|
|
|
|
|
{"Prev, Next", "Next, Prev"}},
|
|
|
|
|
{"Reader Font Family",
|
|
|
|
|
SettingType::ENUM,
|
|
|
|
|
&CrossPointSettings::fontFamily,
|
|
|
|
|
{"Bookerly", "Noto Sans", "Open Dyslexic"}},
|
|
|
|
|
{"Reader Font Size", SettingType::ENUM, &CrossPointSettings::fontSize, {"Small", "Medium", "Large", "X Large"}},
|
|
|
|
|
{"Reader Line Spacing", SettingType::ENUM, &CrossPointSettings::lineSpacing, {"Tight", "Normal", "Wide"}},
|
|
|
|
|
{"Reader Screen Margin", SettingType::ENUM, &CrossPointSettings::screenMargin, {"5", "10", "20", "40"}},
|
|
|
|
|
{"Reader Paragraph Alignment",
|
|
|
|
|
SettingType::ENUM,
|
|
|
|
|
&CrossPointSettings::paragraphAlignment,
|
|
|
|
|
{"Justify", "Left", "Center", "Right"}},
|
|
|
|
|
{"Time to Sleep",
|
|
|
|
|
SettingType::ENUM,
|
|
|
|
|
&CrossPointSettings::sleepTimeout,
|
|
|
|
|
{"1 min", "5 min", "10 min", "15 min", "30 min"}},
|
|
|
|
|
{"Refresh Frequency",
|
|
|
|
|
SettingType::ENUM,
|
|
|
|
|
&CrossPointSettings::refreshFrequency,
|
|
|
|
|
{"1 page", "5 pages", "10 pages", "15 pages", "30 pages"}},
|
|
|
|
|
{"Check for updates", SettingType::ACTION, nullptr, {}},
|
|
|
|
|
};
|
|
|
|
|
SettingInfo::Enum("Sleep Screen", &CrossPointSettings::sleepScreen, {"Dark", "Light", "Custom", "Cover"}),
|
|
|
|
|
SettingInfo::Enum("Status Bar", &CrossPointSettings::statusBar, {"None", "No Progress", "Full"}),
|
|
|
|
|
SettingInfo::Toggle("Extra Paragraph Spacing", &CrossPointSettings::extraParagraphSpacing),
|
|
|
|
|
SettingInfo::Toggle("Short Power Button Click", &CrossPointSettings::shortPwrBtn),
|
|
|
|
|
SettingInfo::Enum("Reading Orientation", &CrossPointSettings::orientation,
|
|
|
|
|
{"Portrait", "Landscape CW", "Inverted", "Landscape CCW"}),
|
|
|
|
|
SettingInfo::Enum("Front Button Layout", &CrossPointSettings::frontButtonLayout,
|
|
|
|
|
{"Bck, Cnfrm, Lft, Rght", "Lft, Rght, Bck, Cnfrm", "Lft, Bck, Cnfrm, Rght"}),
|
|
|
|
|
SettingInfo::Enum("Side Button Layout (reader)", &CrossPointSettings::sideButtonLayout,
|
|
|
|
|
{"Prev, Next", "Next, Prev"}),
|
|
|
|
|
SettingInfo::Enum("Reader Font Family", &CrossPointSettings::fontFamily,
|
|
|
|
|
{"Bookerly", "Noto Sans", "Open Dyslexic"}),
|
|
|
|
|
SettingInfo::Enum("Reader Font Size", &CrossPointSettings::fontSize, {"Small", "Medium", "Large", "X Large"}),
|
|
|
|
|
SettingInfo::Enum("Reader Line Spacing", &CrossPointSettings::lineSpacing, {"Tight", "Normal", "Wide"}),
|
|
|
|
|
SettingInfo::Value("Reader Screen Margin", &CrossPointSettings::screenMargin, 5, 50),
|
|
|
|
|
SettingInfo::Enum("Reader Paragraph Alignment", &CrossPointSettings::paragraphAlignment,
|
|
|
|
|
{"Justify", "Left", "Center", "Right"}),
|
|
|
|
|
SettingInfo::Enum("Time to Sleep", &CrossPointSettings::sleepTimeout,
|
|
|
|
|
{"1 min", "5 min", "10 min", "15 min", "30 min"}),
|
|
|
|
|
SettingInfo::Enum("Refresh Frequency", &CrossPointSettings::refreshFrequency,
|
|
|
|
|
{"1 page", "5 pages", "10 pages", "15 pages", "30 pages"}),
|
|
|
|
|
SettingInfo::Action("Check for updates")};
|
|
|
|
|
} // namespace
|
|
|
|
|
|
|
|
|
|
void SettingsActivity::taskTrampoline(void* param) {
|
|
|
|
|
@@ -58,7 +44,6 @@ void SettingsActivity::taskTrampoline(void* param) {
|
|
|
|
|
|
|
|
|
|
void SettingsActivity::onEnter() {
|
|
|
|
|
Activity::onEnter();
|
|
|
|
|
|
|
|
|
|
renderingMutex = xSemaphoreCreateMutex();
|
|
|
|
|
|
|
|
|
|
// Reset selection to first item
|
|
|
|
|
@@ -138,6 +123,14 @@ void SettingsActivity::toggleCurrentSetting() {
|
|
|
|
|
} else if (setting.type == SettingType::ENUM && setting.valuePtr != nullptr) {
|
|
|
|
|
const uint8_t currentValue = SETTINGS.*(setting.valuePtr);
|
|
|
|
|
SETTINGS.*(setting.valuePtr) = (currentValue + 1) % static_cast<uint8_t>(setting.enumValues.size());
|
|
|
|
|
} else if (setting.type == SettingType::VALUE && setting.valuePtr != nullptr) {
|
|
|
|
|
const int8_t currentValue = SETTINGS.*(setting.valuePtr);
|
|
|
|
|
// Wrap to minValue if exceeding setting value boundary
|
|
|
|
|
if (currentValue == setting.maxValue) {
|
|
|
|
|
SETTINGS.*(setting.valuePtr) = setting.minValue;
|
|
|
|
|
} else {
|
|
|
|
|
SETTINGS.*(setting.valuePtr) = currentValue + 1;
|
|
|
|
|
}
|
|
|
|
|
} else if (setting.type == SettingType::ACTION) {
|
|
|
|
|
if (std::string(setting.name) == "Check for updates") {
|
|
|
|
|
xSemaphoreTake(renderingMutex, portMAX_DELAY);
|
|
|
|
|
@@ -196,6 +189,8 @@ void SettingsActivity::render() const {
|
|
|
|
|
} else if (settingsList[i].type == SettingType::ENUM && settingsList[i].valuePtr != nullptr) {
|
|
|
|
|
const uint8_t value = SETTINGS.*(settingsList[i].valuePtr);
|
|
|
|
|
valueText = settingsList[i].enumValues[value];
|
|
|
|
|
} else if (settingsList[i].type == SettingType::VALUE && settingsList[i].valuePtr != nullptr) {
|
|
|
|
|
valueText = std::to_string(SETTINGS.*(settingsList[i].valuePtr));
|
|
|
|
|
}
|
|
|
|
|
const auto width = renderer.getTextWidth(UI_10_FONT_ID, valueText.c_str());
|
|
|
|
|
renderer.drawText(UI_10_FONT_ID, pageWidth - 20 - width, settingY, valueText.c_str(), i != selectedSettingIndex);
|
|
|
|
|
|