feature: adding a default wifi option

This commit is contained in:
dpoulter 2026-01-11 10:37:00 +01:00
parent cd1a441d2b
commit 145c7338a9
6 changed files with 43 additions and 53 deletions

View File

@ -260,7 +260,6 @@ bool WifiCredentialStore::connectToDefaultWifi(int timeoutMs) const {
void WifiCredentialStore::ensureWifiConnected(ActivityWithSubactivity& activity, GfxRenderer& renderer, void WifiCredentialStore::ensureWifiConnected(ActivityWithSubactivity& activity, GfxRenderer& renderer,
MappedInputManager& mappedInput, const std::function<void()>& onSuccess, MappedInputManager& mappedInput, const std::function<void()>& onSuccess,
const std::function<void()>& onCancel, int timeoutMs) { const std::function<void()>& onCancel, int timeoutMs) {
if (WiFi.status() == WL_CONNECTED) { if (WiFi.status() == WL_CONNECTED) {
onSuccess(); onSuccess();
return; return;
@ -276,7 +275,8 @@ void WifiCredentialStore::ensureWifiConnected(ActivityWithSubactivity& activity,
// Auto-connect failed - show WiFi selection list // Auto-connect failed - show WiFi selection list
Serial.printf("[%lu] [WCS] Auto-connect failed, showing WiFi selection\n", millis()); Serial.printf("[%lu] [WCS] Auto-connect failed, showing WiFi selection\n", millis());
activity.enterNewActivity(new WifiSelectionActivity(renderer, mappedInput, [&activity, onSuccess, onCancel](bool connected) { activity.enterNewActivity(
new WifiSelectionActivity(renderer, mappedInput, [&activity, onSuccess, onCancel](bool connected) {
activity.exitActivity(); activity.exitActivity();
if (connected) { if (connected) {
onSuccess(); onSuccess();

View File

@ -382,7 +382,5 @@ void OpdsBookBrowserActivity::checkAndConnectWifi() {
updateRequired = true; updateRequired = true;
fetchFeed(currentPath); fetchFeed(currentPath);
}, },
[this]() { [this]() { onGoHome(); });
onGoHome();
});
} }

View File

@ -348,7 +348,7 @@ void WifiSelectionActivity::loop() {
displaySetDefaultPrompt(); displaySetDefaultPrompt();
} }
onComplete(true); onComplete(true);
}else if (mappedInput.wasPressed(MappedInputManager::Button::Back)) { } else if (mappedInput.wasPressed(MappedInputManager::Button::Back)) {
// Skip saving, complete anyway // Skip saving, complete anyway
onComplete(true); onComplete(true);
} }

View File

@ -104,9 +104,9 @@ class WifiSelectionActivity final : public ActivityWithSubactivity {
public: public:
explicit WifiSelectionActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, explicit WifiSelectionActivity(GfxRenderer& renderer, MappedInputManager& mappedInput,
const std::function<void(bool connected)>& onComplete, const std::function<void(bool connected)>& onComplete, bool fromSettingsScreen = false)
bool fromSettingsScreen = false) : ActivityWithSubactivity("WifiSelection", renderer, mappedInput),
: ActivityWithSubactivity("WifiSelection", renderer, mappedInput), onComplete(onComplete), onComplete(onComplete),
fromSettingsScreen(fromSettingsScreen) {} fromSettingsScreen(fromSettingsScreen) {}
void onEnter() override; void onEnter() override;
void onExit() override; void onExit() override;

View File

@ -12,7 +12,7 @@ namespace {
constexpr int PAGE_ITEMS = 23; constexpr int PAGE_ITEMS = 23;
constexpr int SKIP_PAGE_MS = 700; constexpr int SKIP_PAGE_MS = 700;
constexpr unsigned long IGNORE_INPUT_MS = 300; constexpr unsigned long IGNORE_INPUT_MS = 300;
} } // namespace
void WifiConnectionsActivity::taskTrampoline(void* param) { void WifiConnectionsActivity::taskTrampoline(void* param) {
auto* self = static_cast<WifiConnectionsActivity*>(param); auto* self = static_cast<WifiConnectionsActivity*>(param);
@ -32,12 +32,7 @@ void WifiConnectionsActivity::onEnter() {
WIFI_STORE.loadFromFile(); WIFI_STORE.loadFromFile();
xTaskCreate(&WifiConnectionsActivity::taskTrampoline, "WifiConnectionsTask", xTaskCreate(&WifiConnectionsActivity::taskTrampoline, "WifiConnectionsTask", 4096, this, 1, &displayTaskHandle);
4096,
this,
1,
&displayTaskHandle
);
} }
void WifiConnectionsActivity::onExit() { void WifiConnectionsActivity::onExit() {
@ -113,13 +108,16 @@ void WifiConnectionsActivity::loop() {
// "Add new connection" selected - launch WiFi selection // "Add new connection" selected - launch WiFi selection
xSemaphoreTake(renderingMutex, portMAX_DELAY); xSemaphoreTake(renderingMutex, portMAX_DELAY);
exitActivity(); exitActivity();
enterNewActivity(new WifiSelectionActivity(renderer, mappedInput, [this](bool connected) { enterNewActivity(new WifiSelectionActivity(
renderer, mappedInput,
[this](bool connected) {
// Reload credentials after WiFi selection // Reload credentials after WiFi selection
WIFI_STORE.loadFromFile(); WIFI_STORE.loadFromFile();
exitActivity(); exitActivity();
enterTime = millis(); // Reset enter time to ignore input after subactivity exits enterTime = millis(); // Reset enter time to ignore input after subactivity exits
updateRequired = true; updateRequired = true;
}, true)); // true = fromSettingsScreen (always save password and disconnect after) },
true)); // true = fromSettingsScreen (always save password and disconnect after)
xSemaphoreGive(renderingMutex); xSemaphoreGive(renderingMutex);
} else { } else {
// Regular credential selected // Regular credential selected
@ -231,8 +229,7 @@ void WifiConnectionsActivity::render() {
const std::string currentDefault = WIFI_STORE.getDefaultSSID(); const std::string currentDefault = WIFI_STORE.getDefaultSSID();
const bool isDefault = (selectedNetwork == currentDefault); const bool isDefault = (selectedNetwork == currentDefault);
const char* defaultText = settingsSelection == 0 const char* defaultText = settingsSelection == 0 ? (isDefault ? "> Remove Default" : "> Set Default")
? (isDefault ? "> Remove Default" : "> Set Default")
: (isDefault ? " Remove Default" : " Set Default"); : (isDefault ? " Remove Default" : " Set Default");
const char* deleteText = settingsSelection == 1 ? "> Delete" : " Delete"; const char* deleteText = settingsSelection == 1 ? "> Delete" : " Delete";
renderer.drawCenteredText(UI_10_FONT_ID, centerY + 20, defaultText); renderer.drawCenteredText(UI_10_FONT_ID, centerY + 20, defaultText);
@ -268,4 +265,3 @@ void WifiConnectionsActivity::render() {
renderer.displayBuffer(); renderer.displayBuffer();
} }

View File

@ -23,10 +23,7 @@ class WifiConnectionsActivity final : public ActivityWithSubactivity {
void loop() override; void loop() override;
private: private:
enum class State { enum class State { LIST, SETTINGS_MENU };
LIST,
SETTINGS_MENU
};
TaskHandle_t displayTaskHandle = nullptr; TaskHandle_t displayTaskHandle = nullptr;
SemaphoreHandle_t renderingMutex = nullptr; SemaphoreHandle_t renderingMutex = nullptr;
@ -47,4 +44,3 @@ class WifiConnectionsActivity final : public ActivityWithSubactivity {
void deleteNetwork(); void deleteNetwork();
void cancelSettings(); void cancelSettings();
}; };