From 395e68ea2b684f39f6a4dcb683a417b36af38c74 Mon Sep 17 00:00:00 2001 From: Zach Nelson Date: Wed, 6 May 2026 09:57:22 -0500 Subject: [PATCH] refactor: Simplify isReaderActivity bookkeeping (#1838) ## Summary Before, any sub-activity of a reader activity needed to override `isReaderActivity` to maintain correct bookkeeping through `ActivityManager::isReaderActivity`. We could easily miss this in any new sub-activities. Instead, simplify so each reader activity correctly reports and then `ActivityManager` checks for any reader activity in its stack. --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**NO**_ --- src/activities/ActivityManager.cpp | 8 +++++++- .../reader/EpubReaderChapterSelectionActivity.h | 1 - src/activities/reader/EpubReaderFootnotesActivity.h | 1 - src/activities/reader/EpubReaderMenuActivity.h | 1 - .../reader/EpubReaderPercentSelectionActivity.h | 1 - src/activities/reader/KOReaderSyncActivity.h | 1 - src/activities/reader/QrDisplayActivity.h | 1 - src/activities/reader/XtcReaderChapterSelectionActivity.h | 1 - 8 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/activities/ActivityManager.cpp b/src/activities/ActivityManager.cpp index e1d5dd21..96c3c7d0 100644 --- a/src/activities/ActivityManager.cpp +++ b/src/activities/ActivityManager.cpp @@ -2,6 +2,8 @@ #include +#include + #include "OpdsServerStore.h" #include "boot_sleep/BootActivity.h" #include "boot_sleep/SleepActivity.h" @@ -230,7 +232,11 @@ void ActivityManager::popActivity() { bool ActivityManager::preventAutoSleep() const { return currentActivity && currentActivity->preventAutoSleep(); } -bool ActivityManager::isReaderActivity() const { return currentActivity && currentActivity->isReaderActivity(); } +bool ActivityManager::isReaderActivity() const { + return std::any_of(stackActivities.begin(), stackActivities.end(), + [](const auto& activity) { return activity->isReaderActivity(); }) || + (currentActivity && currentActivity->isReaderActivity()); +} bool ActivityManager::skipLoopDelay() const { return currentActivity && currentActivity->skipLoopDelay(); } diff --git a/src/activities/reader/EpubReaderChapterSelectionActivity.h b/src/activities/reader/EpubReaderChapterSelectionActivity.h index 216eadf4..20b53aa4 100644 --- a/src/activities/reader/EpubReaderChapterSelectionActivity.h +++ b/src/activities/reader/EpubReaderChapterSelectionActivity.h @@ -32,5 +32,4 @@ class EpubReaderChapterSelectionActivity final : public Activity { void onExit() override; void loop() override; void render(RenderLock&&) override; - bool isReaderActivity() const override { return true; } }; diff --git a/src/activities/reader/EpubReaderFootnotesActivity.h b/src/activities/reader/EpubReaderFootnotesActivity.h index 85fe692d..7336d038 100644 --- a/src/activities/reader/EpubReaderFootnotesActivity.h +++ b/src/activities/reader/EpubReaderFootnotesActivity.h @@ -19,7 +19,6 @@ class EpubReaderFootnotesActivity final : public Activity { void onExit() override; void loop() override; void render(RenderLock&&) override; - bool isReaderActivity() const override { return true; } private: const std::vector& footnotes; diff --git a/src/activities/reader/EpubReaderMenuActivity.h b/src/activities/reader/EpubReaderMenuActivity.h index 3937d62c..9ddba93d 100644 --- a/src/activities/reader/EpubReaderMenuActivity.h +++ b/src/activities/reader/EpubReaderMenuActivity.h @@ -32,7 +32,6 @@ class EpubReaderMenuActivity final : public Activity { void onExit() override; void loop() override; void render(RenderLock&&) override; - bool isReaderActivity() const override { return true; } private: struct MenuItem { diff --git a/src/activities/reader/EpubReaderPercentSelectionActivity.h b/src/activities/reader/EpubReaderPercentSelectionActivity.h index ad68fc32..8cba8664 100644 --- a/src/activities/reader/EpubReaderPercentSelectionActivity.h +++ b/src/activities/reader/EpubReaderPercentSelectionActivity.h @@ -15,7 +15,6 @@ class EpubReaderPercentSelectionActivity final : public Activity { void onExit() override; void loop() override; void render(RenderLock&&) override; - bool isReaderActivity() const override { return true; } private: // Current percent value (0-100) shown on the slider. diff --git a/src/activities/reader/KOReaderSyncActivity.h b/src/activities/reader/KOReaderSyncActivity.h index 29010699..ec4e1fde 100644 --- a/src/activities/reader/KOReaderSyncActivity.h +++ b/src/activities/reader/KOReaderSyncActivity.h @@ -41,7 +41,6 @@ class KOReaderSyncActivity final : public Activity { void loop() override; void render(RenderLock&&) override; bool preventAutoSleep() override { return state == CONNECTING || state == SYNCING; } - bool isReaderActivity() const override { return true; } private: enum State { diff --git a/src/activities/reader/QrDisplayActivity.h b/src/activities/reader/QrDisplayActivity.h index d6ff236a..3cfdb6b3 100644 --- a/src/activities/reader/QrDisplayActivity.h +++ b/src/activities/reader/QrDisplayActivity.h @@ -14,7 +14,6 @@ class QrDisplayActivity final : public Activity { void onExit() override; void loop() override; void render(RenderLock&&) override; - bool isReaderActivity() const override { return true; } private: std::string textPayload; diff --git a/src/activities/reader/XtcReaderChapterSelectionActivity.h b/src/activities/reader/XtcReaderChapterSelectionActivity.h index 75d44215..42040ad5 100644 --- a/src/activities/reader/XtcReaderChapterSelectionActivity.h +++ b/src/activities/reader/XtcReaderChapterSelectionActivity.h @@ -23,5 +23,4 @@ class XtcReaderChapterSelectionActivity final : public Activity { void onExit() override; void loop() override; void render(RenderLock&&) override; - bool isReaderActivity() const override { return true; } };