#pragma once #include #include #include #include #include #include #include "../ActivityWithSubactivity.h" #include "util/ButtonNavigator.h" class DictionarySuggestionsActivity final : public ActivityWithSubactivity { public: explicit DictionarySuggestionsActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, const std::string& originalWord, const std::vector& suggestions, int readerFontId, uint8_t orientation, const std::string& cachePath, const std::function& onBack, const std::function& onDone) : ActivityWithSubactivity("DictionarySuggestions", renderer, mappedInput), originalWord(originalWord), suggestions(suggestions), readerFontId(readerFontId), orientation(orientation), cachePath(cachePath), onBack(onBack), onDone(onDone) {} void onEnter() override; void onExit() override; void loop() override; private: std::string originalWord; std::vector suggestions; int readerFontId; uint8_t orientation; std::string cachePath; const std::function onBack; const std::function onDone; int selectedIndex = 0; bool updateRequired = false; bool pendingBackFromDef = false; bool pendingExitToReader = false; ButtonNavigator buttonNavigator; TaskHandle_t displayTaskHandle = nullptr; SemaphoreHandle_t renderingMutex = nullptr; void renderScreen(); static void taskTrampoline(void* param); [[noreturn]] void displayTaskLoop(); };