## Summary * **What is the goal of this PR?** Add a "Continue Reading" feature to improve user experience when returning to a previously opened book. * **What changes are included?** - Add dynamic "Continue: <book name>" menu item in Home screen when a book was previously opened - File browser now starts from the folder of the last opened book instead of always starting from root directory - Menu dynamically shows 3 or 4 items based on reading history: - Without history: `Browse`, `File transfer`, `Settings` - With history: `Continue: <book>`, `Browse`, `File transfer`, `Settings` ## Additional Context * This feature leverages the existing `APP_STATE.openEpubPath` which already persists the last opened book path * The Continue Reading menu only appears if the book file still exists on the SD card * Book name in the menu is truncated to 25 characters with "..." suffix if too long * If the last book's folder was deleted, the file browser gracefully falls back to root directory * No new dependencies or significant memory overhead - reuses existing state management
27 lines
959 B
C++
27 lines
959 B
C++
#pragma once
|
|
#include <memory>
|
|
|
|
#include "../ActivityWithSubactivity.h"
|
|
|
|
class Epub;
|
|
|
|
class ReaderActivity final : public ActivityWithSubactivity {
|
|
std::string initialEpubPath;
|
|
std::string currentEpubPath; // Track current book path for navigation
|
|
const std::function<void()> onGoBack;
|
|
static std::unique_ptr<Epub> loadEpub(const std::string& path);
|
|
|
|
static std::string extractFolderPath(const std::string& filePath);
|
|
void onSelectEpubFile(const std::string& path);
|
|
void onGoToFileSelection(const std::string& fromEpubPath = "");
|
|
void onGoToEpubReader(std::unique_ptr<Epub> epub);
|
|
|
|
public:
|
|
explicit ReaderActivity(GfxRenderer& renderer, InputManager& inputManager, std::string initialEpubPath,
|
|
const std::function<void()>& onGoBack)
|
|
: ActivityWithSubactivity("Reader", renderer, inputManager),
|
|
initialEpubPath(std::move(initialEpubPath)),
|
|
onGoBack(onGoBack) {}
|
|
void onEnter() override;
|
|
};
|