#pragma once #include #include #include #include #include #include #include "activities/ActivityWithSubactivity.h" class CrossPointSettings; struct SettingInfo; class SettingsActivity final : public ActivityWithSubactivity { TaskHandle_t displayTaskHandle = nullptr; SemaphoreHandle_t renderingMutex = nullptr; bool updateRequired = false; int selectedCategoryIndex = 0; // Currently selected category const std::function onGoHome; static constexpr int categoryCount = 4; static const char* categoryNames[categoryCount]; static void taskTrampoline(void* param); [[noreturn]] void displayTaskLoop(); void render() const; void enterCategory(int categoryIndex); public: explicit SettingsActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, const std::function& onGoHome) : ActivityWithSubactivity("Settings", renderer, mappedInput), onGoHome(onGoHome) {} void onEnter() override; void onExit() override; void loop() override; };