| 50 | void EpubReaderMenuActivity::onExit() { Activity::onExit(); } |
| 51 | |
| 52 | void EpubReaderMenuActivity::loop() { |
| 53 | // Handle navigation |
| 54 | buttonNavigator.onNext([this] { |
| 55 | selectedIndex = ButtonNavigator::nextIndex(selectedIndex, static_cast<int>(menuItems.size())); |
| 56 | requestUpdate(); |
| 57 | }); |
| 58 | |
| 59 | buttonNavigator.onPrevious([this] { |
| 60 | selectedIndex = ButtonNavigator::previousIndex(selectedIndex, static_cast<int>(menuItems.size())); |
| 61 | requestUpdate(); |
| 62 | }); |
| 63 | |
| 64 | if (mappedInput.wasReleased(MappedInputManager::Button::Confirm)) { |
| 65 | const auto selectedAction = menuItems[selectedIndex].action; |
| 66 | if (selectedAction == MenuAction::ROTATE_SCREEN) { |
| 67 | // Cycle orientation preview locally; actual rotation happens on menu exit. |
| 68 | pendingOrientation = (pendingOrientation + 1) % orientationLabels.size(); |
| 69 | requestUpdate(); |
| 70 | return; |
| 71 | } |
| 72 | |
| 73 | if (selectedAction == MenuAction::AUTO_PAGE_TURN) { |
| 74 | selectedPageTurnOption = (selectedPageTurnOption + 1) % pageTurnLabels.size(); |
| 75 | requestUpdate(); |
| 76 | return; |
| 77 | } |
| 78 | |
| 79 | setResult(MenuResult{static_cast<int>(selectedAction), pendingOrientation, selectedPageTurnOption}); |
| 80 | finish(); |
| 81 | return; |
| 82 | } else if (mappedInput.wasReleased(MappedInputManager::Button::Back)) { |
| 83 | ActivityResult result; |
| 84 | result.isCancelled = true; |
| 85 | result.data = MenuResult{-1, pendingOrientation, selectedPageTurnOption}; |
| 86 | setResult(std::move(result)); |
| 87 | finish(); |
| 88 | return; |
| 89 | } |
| 90 | } |
| 91 | |
| 92 | void EpubReaderMenuActivity::render(RenderLock&&) { |
| 93 | renderer.clearScreen(); |
nothing calls this directly
no test coverage detected