diff --git a/src/util/ButtonNavigator.cpp b/src/util/ButtonNavigator.cpp index 531722ca..c041aa1d 100644 --- a/src/util/ButtonNavigator.cpp +++ b/src/util/ButtonNavigator.cpp @@ -15,9 +15,9 @@ void ButtonNavigator::onNextPress(const Callback& callback) { onPress(getNextBut void ButtonNavigator::onPreviousPress(const Callback& callback) { onPress(getPreviousButtons(), callback); } -void ButtonNavigator::onNextRelease(const Callback& callback) const { onRelease(getNextButtons(), callback); } +void ButtonNavigator::onNextRelease(const Callback& callback) { onRelease(getNextButtons(), callback); } -void ButtonNavigator::onPreviousRelease(const Callback& callback) const { onRelease(getPreviousButtons(), callback); } +void ButtonNavigator::onPreviousRelease(const Callback& callback) { onRelease(getPreviousButtons(), callback); } void ButtonNavigator::onNextContinuous(const Callback& callback) { onContinuous(getNextButtons(), callback); } @@ -26,49 +26,39 @@ void ButtonNavigator::onPreviousContinuous(const Callback& callback) { onContinu void ButtonNavigator::onPress(const Buttons& buttons, const Callback& callback) { if (!mappedInput) return; - bool buttonPressed = false; for (const MappedInputManager::Button button : buttons) { if (mappedInput->wasPressed(button)) { - buttonPressed = true; - break; + callback(); + return; } } - - if (buttonPressed && !recentlyNavigatedContinuously()) { - callback(); - } } -void ButtonNavigator::onRelease(const Buttons& buttons, const Callback& callback) const { + +void ButtonNavigator::onRelease(const Buttons& buttons, const Callback& callback) { if (!mappedInput) return; - bool buttonReleased = false; for (const MappedInputManager::Button button : buttons) { if (mappedInput->wasReleased(button)) { - buttonReleased = true; - break; - } - } + if (lastContinuousNavTime == 0) { + callback(); + } - if (buttonReleased && !recentlyNavigatedContinuously()) { - callback(); + lastContinuousNavTime = 0; + return; + } } } void ButtonNavigator::onContinuous(const Buttons& buttons, const Callback& callback) { if (!mappedInput) return; - bool buttonPressed = false; for (const MappedInputManager::Button button : buttons) { - if (mappedInput->isPressed(button)) { - buttonPressed = true; - break; + if (mappedInput->isPressed(button) && shouldNavigateContinuously()) { + callback(); + lastContinuousNavTime = millis(); + return; } } - - if (buttonPressed && shouldNavigateContinuously()) { - callback(); - lastContinuousNavTime = millis(); - } } bool ButtonNavigator::shouldNavigateContinuously() const { @@ -80,15 +70,6 @@ bool ButtonNavigator::shouldNavigateContinuously() const { return buttonHeldLongEnough && navigationIntervalElapsed; } -bool ButtonNavigator::recentlyNavigatedContinuously() const { - const int elapsedTime = millis() - lastContinuousNavTime; - if (elapsedTime < 50) { - return true; - } - - return false; -} - int ButtonNavigator::nextIndex(const int currentIndex, const int totalItems) { if (totalItems <= 0) return 0; diff --git a/src/util/ButtonNavigator.h b/src/util/ButtonNavigator.h index 0b08d85c..3e88f315 100644 --- a/src/util/ButtonNavigator.h +++ b/src/util/ButtonNavigator.h @@ -12,11 +12,11 @@ class ButtonNavigator final { const uint16_t continuousStartMs; const uint16_t continuousIntervalMs; uint32_t lastContinuousNavTime = 0; + bool continuousNavHold = false; static const MappedInputManager* mappedInput; [[nodiscard]] bool shouldNavigateContinuously() const; - [[nodiscard]] bool recentlyNavigatedContinuously() const; [[nodiscard]] static Buttons getNextButtons() { return {MappedInputManager::Button::Down, MappedInputManager::Button::Right}; @@ -38,9 +38,9 @@ class ButtonNavigator final { void onPreviousPress(const Callback& callback); void onPress(const Buttons& buttons, const Callback& callback); - void onNextRelease(const Callback& callback) const; - void onPreviousRelease(const Callback& callback) const; - void onRelease(const Buttons& buttons, const Callback& callback) const; + void onNextRelease(const Callback& callback); + void onPreviousRelease(const Callback& callback); + void onRelease(const Buttons& buttons, const Callback& callback); void onNextContinuous(const Callback& callback); void onPreviousContinuous(const Callback& callback);