From 1978739b43ac25c06f66913d099dfe62823c11e8 Mon Sep 17 00:00:00 2001 From: altsysrq Date: Mon, 5 Jan 2026 21:13:16 -0600 Subject: [PATCH] Add FTP username and password settings to configuration --- src/activities/settings/SettingsActivity.cpp | 31 +++++++++++++++----- src/activities/settings/SettingsActivity.h | 3 +- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/activities/settings/SettingsActivity.cpp b/src/activities/settings/SettingsActivity.cpp index a242389d..69c2bd03 100644 --- a/src/activities/settings/SettingsActivity.cpp +++ b/src/activities/settings/SettingsActivity.cpp @@ -9,44 +9,53 @@ // Define the static settings list namespace { -constexpr int settingsCount = 14; +constexpr int settingsCount = 16; 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, {}}, + {"Sleep Screen", SettingType::ENUM, &CrossPointSettings::sleepScreen, nullptr, {"Dark", "Light", "Custom", "Cover"}}, + {"Status Bar", SettingType::ENUM, &CrossPointSettings::statusBar, nullptr, {"None", "No Progress", "Full"}}, + {"Extra Paragraph Spacing", SettingType::TOGGLE, &CrossPointSettings::extraParagraphSpacing, nullptr, {}}, + {"Short Power Button Click", SettingType::TOGGLE, &CrossPointSettings::shortPwrBtn, nullptr, {}}, {"Reading Orientation", SettingType::ENUM, &CrossPointSettings::orientation, + nullptr, {"Portrait", "Landscape CW", "Inverted", "Landscape CCW"}}, {"Front Button Layout", SettingType::ENUM, &CrossPointSettings::frontButtonLayout, + nullptr, {"Bck, Cnfrm, Lft, Rght", "Lft, Rght, Bck, Cnfrm", "Lft, Bck, Cnfrm, Rght"}}, {"Side Button Layout (reader)", SettingType::ENUM, &CrossPointSettings::sideButtonLayout, + nullptr, {"Prev, Next", "Next, Prev"}}, {"Reader Font Family", SettingType::ENUM, &CrossPointSettings::fontFamily, + nullptr, {"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 Font Size", SettingType::ENUM, &CrossPointSettings::fontSize, nullptr, {"Small", "Medium", "Large", "X Large"}}, + {"Reader Line Spacing", SettingType::ENUM, &CrossPointSettings::lineSpacing, nullptr, {"Tight", "Normal", "Wide"}}, {"Reader Paragraph Alignment", SettingType::ENUM, &CrossPointSettings::paragraphAlignment, + nullptr, {"Justify", "Left", "Center", "Right"}}, {"Time to Sleep", SettingType::ENUM, &CrossPointSettings::sleepTimeout, + nullptr, {"1 min", "5 min", "10 min", "15 min", "30 min"}}, {"Refresh Frequency", SettingType::ENUM, &CrossPointSettings::refreshFrequency, + nullptr, {"1 page", "5 pages", "10 pages", "15 pages", "30 pages"}}, - {"Check for updates", SettingType::ACTION, nullptr, {}}, + {"FTP Username", SettingType::TEXT, nullptr, &CrossPointSettings::ftpUsername, {}}, + {"FTP Password", SettingType::TEXT, nullptr, &CrossPointSettings::ftpPassword, {}}, + {"Check for updates", SettingType::ACTION, nullptr, nullptr, {}}, }; } // namespace @@ -137,6 +146,10 @@ 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(setting.enumValues.size()); + } else if (setting.type == SettingType::TEXT && setting.stringValuePtr != nullptr) { + // For now, TEXT settings are display-only in this UI + // In a future version, this could launch a text input dialog + return; } else if (setting.type == SettingType::ACTION) { if (std::string(setting.name) == "Check for updates") { xSemaphoreTake(renderingMutex, portMAX_DELAY); @@ -195,6 +208,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::TEXT && settingsList[i].stringValuePtr != nullptr) { + valueText = SETTINGS.*(settingsList[i].stringValuePtr); } 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); diff --git a/src/activities/settings/SettingsActivity.h b/src/activities/settings/SettingsActivity.h index 83beb9d9..34351f8e 100644 --- a/src/activities/settings/SettingsActivity.h +++ b/src/activities/settings/SettingsActivity.h @@ -11,13 +11,14 @@ class CrossPointSettings; -enum class SettingType { TOGGLE, ENUM, ACTION }; +enum class SettingType { TOGGLE, ENUM, ACTION, TEXT }; // Structure to hold setting information struct SettingInfo { const char* name; // Display name of the setting SettingType type; // Type of setting uint8_t CrossPointSettings::* valuePtr; // Pointer to member in CrossPointSettings (for TOGGLE/ENUM) + std::string CrossPointSettings::* stringValuePtr; // Pointer to string member (for TEXT) std::vector enumValues; };