From f75bbf5b1e9c60f0e8465c61abedc80e9b5e3f1b Mon Sep 17 00:00:00 2001 From: jpirnay Date: Sun, 5 Apr 2026 21:37:28 +0200 Subject: [PATCH] Short press will go back to origin / long press will go back to home --- src/activities/Activity.cpp | 2 +- src/activities/ActivityManager.cpp | 4 ++++ src/activities/ActivityManager.h | 1 + src/activities/home/HomeActivity.cpp | 2 +- src/activities/reader/EpubReaderActivity.cpp | 12 ++++++------ src/activities/reader/ReaderActivity.cpp | 12 ++++++++---- src/activities/reader/TxtReaderActivity.cpp | 10 +++++----- src/activities/reader/XtcReaderActivity.cpp | 12 ++++++------ 8 files changed, 32 insertions(+), 23 deletions(-) diff --git a/src/activities/Activity.cpp b/src/activities/Activity.cpp index 4dd5ada3..21aaa1b2 100644 --- a/src/activities/Activity.cpp +++ b/src/activities/Activity.cpp @@ -12,7 +12,7 @@ void Activity::requestUpdateAndWait() { activityManager.requestUpdateAndWait(); void Activity::onGoHome() { activityManager.goHome(); } -void Activity::onSelectBook(const std::string& path) { activityManager.goToReader(path); } +void Activity::onSelectBook(const std::string& path) { activityManager.pushReader(path); } void Activity::startActivityForResult(std::unique_ptr&& activity, ActivityResultHandler resultHandler) { this->resultHandler = std::move(resultHandler); diff --git a/src/activities/ActivityManager.cpp b/src/activities/ActivityManager.cpp index 8e566d3b..b19f5a4f 100644 --- a/src/activities/ActivityManager.cpp +++ b/src/activities/ActivityManager.cpp @@ -200,6 +200,10 @@ void ActivityManager::goToReader(std::string path) { replaceActivity(std::make_unique(renderer, mappedInput, std::move(path))); } +void ActivityManager::pushReader(std::string path) { + pushActivity(std::make_unique(renderer, mappedInput, std::move(path))); +} + void ActivityManager::goToSleep() { replaceActivity(std::make_unique(renderer, mappedInput)); loop(); // Important: sleep screen must be rendered immediately, the caller will go to sleep right after this returns diff --git a/src/activities/ActivityManager.h b/src/activities/ActivityManager.h index a38e2985..c8702959 100644 --- a/src/activities/ActivityManager.h +++ b/src/activities/ActivityManager.h @@ -83,6 +83,7 @@ class ActivityManager { void goToRecentBooks(); void goToBrowser(); void goToReader(std::string path); + void pushReader(std::string path); void goToSleep(); void goToBoot(); void goToFullScreenMessage(std::string message, EpdFontFamily::Style style = EpdFontFamily::REGULAR); diff --git a/src/activities/home/HomeActivity.cpp b/src/activities/home/HomeActivity.cpp index 18b8e241..c9057e50 100644 --- a/src/activities/home/HomeActivity.cpp +++ b/src/activities/home/HomeActivity.cpp @@ -261,7 +261,7 @@ void HomeActivity::render(RenderLock&&) { } } -void HomeActivity::onSelectBook(const std::string& path) { activityManager.goToReader(path); } +void HomeActivity::onSelectBook(const std::string& path) { activityManager.pushReader(path); } void HomeActivity::onFileBrowserOpen() { activityManager.goToFileBrowser(); } diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index df1b30c6..833600d1 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -183,20 +183,20 @@ void EpubReaderActivity::loop() { }); } - // Long press BACK (1s+) goes to file selection + // Long press BACK (1s+) goes to home screen if (mappedInput.isPressed(MappedInputManager::Button::Back) && mappedInput.getHeldTime() >= ReaderUtils::GO_HOME_MS) { - activityManager.goToFileBrowser(epub ? epub->getPath() : ""); + onGoHome(); return; } - // Short press BACK goes directly to home (or restores position if viewing footnote) + // Short press BACK returns to the calling activity (or restores position if viewing footnote) if (mappedInput.wasReleased(MappedInputManager::Button::Back) && mappedInput.getHeldTime() < ReaderUtils::GO_HOME_MS) { if (footnoteDepth > 0) { restoreSavedPosition(); return; } - onGoHome(); + finish(); return; } @@ -205,10 +205,10 @@ void EpubReaderActivity::loop() { return; } - // At end of the book, forward button goes home and back button returns to last page + // At end of the book, forward button returns to caller and back button returns to last page if (currentSpineIndex > 0 && currentSpineIndex >= epub->getSpineItemsCount()) { if (nextTriggered) { - onGoHome(); + finish(); } else { currentSpineIndex = epub->getSpineItemsCount() - 1; nextPageNumber = UINT16_MAX; diff --git a/src/activities/reader/ReaderActivity.cpp b/src/activities/reader/ReaderActivity.cpp index b7703252..a1ccf789 100644 --- a/src/activities/reader/ReaderActivity.cpp +++ b/src/activities/reader/ReaderActivity.cpp @@ -88,23 +88,27 @@ void ReaderActivity::goToLibrary(const std::string& fromBookPath) { void ReaderActivity::onGoToEpubReader(std::unique_ptr epub) { const auto epubPath = epub->getPath(); currentBookPath = epubPath; - activityManager.replaceActivity(std::make_unique(renderer, mappedInput, std::move(epub))); + startActivityForResult(std::make_unique(renderer, mappedInput, std::move(epub)), + [this](const ActivityResult&) { finish(); }); } void ReaderActivity::onGoToBmpViewer(const std::string& path) { - activityManager.replaceActivity(std::make_unique(renderer, mappedInput, path)); + startActivityForResult(std::make_unique(renderer, mappedInput, path), + [this](const ActivityResult&) { finish(); }); } void ReaderActivity::onGoToXtcReader(std::unique_ptr xtc) { const auto xtcPath = xtc->getPath(); currentBookPath = xtcPath; - activityManager.replaceActivity(std::make_unique(renderer, mappedInput, std::move(xtc))); + startActivityForResult(std::make_unique(renderer, mappedInput, std::move(xtc)), + [this](const ActivityResult&) { finish(); }); } void ReaderActivity::onGoToTxtReader(std::unique_ptr txt) { const auto txtPath = txt->getPath(); currentBookPath = txtPath; - activityManager.replaceActivity(std::make_unique(renderer, mappedInput, std::move(txt))); + startActivityForResult(std::make_unique(renderer, mappedInput, std::move(txt)), + [this](const ActivityResult&) { finish(); }); } void ReaderActivity::onEnter() { diff --git a/src/activities/reader/TxtReaderActivity.cpp b/src/activities/reader/TxtReaderActivity.cpp index dc55626a..261dfb2c 100644 --- a/src/activities/reader/TxtReaderActivity.cpp +++ b/src/activities/reader/TxtReaderActivity.cpp @@ -117,16 +117,16 @@ void TxtReaderActivity::onExit() { } void TxtReaderActivity::loop() { - // Long press BACK (1s+) goes to file selection + // Long press BACK (1s+) goes to home screen if (mappedInput.isPressed(MappedInputManager::Button::Back) && mappedInput.getHeldTime() >= ReaderUtils::GO_HOME_MS) { - activityManager.goToFileBrowser(txt ? txt->getPath() : ""); + onGoHome(); return; } - // Short press BACK goes directly to home + // Short press BACK returns to the calling activity if (mappedInput.wasReleased(MappedInputManager::Button::Back) && mappedInput.getHeldTime() < ReaderUtils::GO_HOME_MS) { - onGoHome(); + finish(); return; } @@ -143,7 +143,7 @@ void TxtReaderActivity::loop() { currentPage++; requestUpdate(); } else { - onGoHome(); + finish(); } } } diff --git a/src/activities/reader/XtcReaderActivity.cpp b/src/activities/reader/XtcReaderActivity.cpp index 35ca552c..e443f12f 100644 --- a/src/activities/reader/XtcReaderActivity.cpp +++ b/src/activities/reader/XtcReaderActivity.cpp @@ -71,15 +71,15 @@ void XtcReaderActivity::loop() { } } - // Long press BACK (1s+) goes to file selection + // Long press BACK (1s+) goes to home screen if (mappedInput.isPressed(MappedInputManager::Button::Back) && mappedInput.getHeldTime() >= goHomeMs) { - activityManager.goToFileBrowser(xtc ? xtc->getPath() : ""); + onGoHome(); return; } - // Short press BACK goes directly to home + // Short press BACK returns to the calling activity if (mappedInput.wasReleased(MappedInputManager::Button::Back) && mappedInput.getHeldTime() < goHomeMs) { - onGoHome(); + finish(); return; } @@ -101,10 +101,10 @@ void XtcReaderActivity::loop() { return; } - // At end of the book, forward button goes home and back button returns to last page + // At end of the book, forward button returns to caller and back button returns to last page if (currentPage >= xtc->getPageCount()) { if (nextTriggered) { - onGoHome(); + finish(); } else { currentPage = xtc->getPageCount() - 1; requestUpdate();