| 113 | } |
| 114 | |
| 115 | void SettingsActivity::loop() { |
| 116 | bool hasChangedCategory = false; |
| 117 | |
| 118 | // Handle actions with early return |
| 119 | if (mappedInput.wasPressed(MappedInputManager::Button::Confirm)) { |
| 120 | if (selectedSettingIndex == 0) { |
| 121 | selectedCategoryIndex = (selectedCategoryIndex < categoryCount - 1) ? (selectedCategoryIndex + 1) : 0; |
| 122 | hasChangedCategory = true; |
| 123 | requestUpdate(); |
| 124 | } else { |
| 125 | toggleCurrentSetting(); |
| 126 | requestUpdate(); |
| 127 | return; |
| 128 | } |
| 129 | } |
| 130 | |
| 131 | if (mappedInput.wasPressed(MappedInputManager::Button::Back)) { |
| 132 | if (selectedSettingIndex > 0) { |
| 133 | selectedSettingIndex = 0; |
| 134 | requestUpdate(); |
| 135 | } else { |
| 136 | SETTINGS.saveToFile(); |
| 137 | onGoHome(); |
| 138 | } |
| 139 | return; |
| 140 | } |
| 141 | |
| 142 | // Handle navigation |
| 143 | buttonNavigator.onNextRelease([this] { |
| 144 | selectedSettingIndex = ButtonNavigator::nextIndex(selectedSettingIndex, settingsCount + 1); |
| 145 | requestUpdate(); |
| 146 | }); |
| 147 | |
| 148 | buttonNavigator.onPreviousRelease([this] { |
| 149 | selectedSettingIndex = ButtonNavigator::previousIndex(selectedSettingIndex, settingsCount + 1); |
| 150 | requestUpdate(); |
| 151 | }); |
| 152 | |
| 153 | buttonNavigator.onNextContinuous([this, &hasChangedCategory] { |
| 154 | hasChangedCategory = true; |
| 155 | selectedCategoryIndex = ButtonNavigator::nextIndex(selectedCategoryIndex, categoryCount); |
| 156 | requestUpdate(); |
| 157 | }); |
| 158 | |
| 159 | buttonNavigator.onPreviousContinuous([this, &hasChangedCategory] { |
| 160 | hasChangedCategory = true; |
| 161 | selectedCategoryIndex = ButtonNavigator::previousIndex(selectedCategoryIndex, categoryCount); |
| 162 | requestUpdate(); |
| 163 | }); |
| 164 | |
| 165 | if (hasChangedCategory) { |
| 166 | selectedSettingIndex = (selectedSettingIndex == 0) ? 0 : 1; |
| 167 | switch (selectedCategoryIndex) { |
| 168 | case 0: |
| 169 | currentSettings = &displaySettings; |
| 170 | break; |
| 171 | case 1: |
| 172 | currentSettings = &readerSettings; |
nothing calls this directly
no test coverage detected