From 3937e949bfb2b1476627a40591b72fd1b88ca180 Mon Sep 17 00:00:00 2001 From: Justin Luque Date: Thu, 15 Jan 2026 19:15:16 -0500 Subject: [PATCH 1/3] feat: hold confirm/select for caps --- src/activities/util/KeyboardEntryActivity.cpp | 20 ++++++++++++++++++- src/activities/util/KeyboardEntryActivity.h | 3 +++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/activities/util/KeyboardEntryActivity.cpp b/src/activities/util/KeyboardEntryActivity.cpp index aa4ffc20..981364c1 100644 --- a/src/activities/util/KeyboardEntryActivity.cpp +++ b/src/activities/util/KeyboardEntryActivity.cpp @@ -13,6 +13,10 @@ const char* const KeyboardEntryActivity::keyboard[NUM_ROWS] = { const char* const KeyboardEntryActivity::keyboardShift[NUM_ROWS] = {"~!@#$%^&*()_+", "QWERTYUIOP{}|", "ASDFGHJKL:\"", "ZXCVBNM<>?", "SPECIAL ROW"}; +namespace { +constexpr unsigned long capsMs = 1000; +} + void KeyboardEntryActivity::taskTrampoline(void* param) { auto* self = static_cast(param); self->displayTaskLoop(); @@ -221,7 +225,12 @@ void KeyboardEntryActivity::loop() { } // Selection - if (mappedInput.wasPressed(MappedInputManager::Button::Confirm)) { + if (mappedInput.isPressed(MappedInputManager::Button::Confirm) && mappedInput.getHeldTime() >= capsMs) { + onCapsHeld(); + return; + } + + if (mappedInput.wasPressed(MappedInputManager::Button::Confirm) && mappedInput.getHeldTime() < capsMs) { handleKeyPress(); updateRequired = true; } @@ -348,3 +357,12 @@ void KeyboardEntryActivity::renderItemWithSelector(const int x, const int y, con } renderer.drawText(UI_10_FONT_ID, x, y, item); } + +void KeyboardEntryActivity::onCapsHeld() { + waitForCapsRelease(); + shiftActive = !shiftActive; +} + +void KeyboardEntryActivity::waitForCapsRelease() { + while (mappedInput.isPressed(MappedInputManager::Button::Confirm)) delay(50); +} diff --git a/src/activities/util/KeyboardEntryActivity.h b/src/activities/util/KeyboardEntryActivity.h index 1c1b1f3e..f5d9f3d3 100644 --- a/src/activities/util/KeyboardEntryActivity.h +++ b/src/activities/util/KeyboardEntryActivity.h @@ -96,4 +96,7 @@ class KeyboardEntryActivity : public Activity { int getRowLength(int row) const; void render() const; void renderItemWithSelector(int x, int y, const char* item, bool isSelected) const; + + void onCapsHeld(); + void waitForCapsRelease(); }; From 1a34af2c8780981e419403e08681fcb9d4fefa78 Mon Sep 17 00:00:00 2001 From: Justin Luque Date: Thu, 15 Jan 2026 20:07:39 -0500 Subject: [PATCH 2/3] fix: set update required on toggling switchActive From what I can tell, this is necessary to render the upper (or lower) case alphabet immediately --- src/activities/util/KeyboardEntryActivity.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/activities/util/KeyboardEntryActivity.cpp b/src/activities/util/KeyboardEntryActivity.cpp index 981364c1..f33a7a21 100644 --- a/src/activities/util/KeyboardEntryActivity.cpp +++ b/src/activities/util/KeyboardEntryActivity.cpp @@ -98,6 +98,7 @@ void KeyboardEntryActivity::handleKeyPress() { if (selectedCol >= SHIFT_COL && selectedCol < SPACE_COL) { // Shift toggle shiftActive = !shiftActive; + updateRequired = true; return; } @@ -361,6 +362,7 @@ void KeyboardEntryActivity::renderItemWithSelector(const int x, const int y, con void KeyboardEntryActivity::onCapsHeld() { waitForCapsRelease(); shiftActive = !shiftActive; + updateRequired = true; } void KeyboardEntryActivity::waitForCapsRelease() { From 4462bfd5efeeb92d045163b8129a06377524cb0a Mon Sep 17 00:00:00 2001 From: Justin Luque Date: Mon, 19 Jan 2026 12:38:22 -0500 Subject: [PATCH 3/3] ref: simplify confirm held for caps logic --- src/activities/util/KeyboardEntryActivity.cpp | 23 +++++-------------- src/activities/util/KeyboardEntryActivity.h | 3 --- 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/src/activities/util/KeyboardEntryActivity.cpp b/src/activities/util/KeyboardEntryActivity.cpp index f33a7a21..2704ef3c 100644 --- a/src/activities/util/KeyboardEntryActivity.cpp +++ b/src/activities/util/KeyboardEntryActivity.cpp @@ -226,13 +226,12 @@ void KeyboardEntryActivity::loop() { } // Selection - if (mappedInput.isPressed(MappedInputManager::Button::Confirm) && mappedInput.getHeldTime() >= capsMs) { - onCapsHeld(); - return; - } - - if (mappedInput.wasPressed(MappedInputManager::Button::Confirm) && mappedInput.getHeldTime() < capsMs) { - handleKeyPress(); + if (mappedInput.wasPressed(MappedInputManager::Button::Confirm)) { + if (mappedInput.getHeldTime() >= capsMs) { + shiftActive = !shiftActive; + } else { + handleKeyPress(); + } updateRequired = true; } @@ -358,13 +357,3 @@ void KeyboardEntryActivity::renderItemWithSelector(const int x, const int y, con } renderer.drawText(UI_10_FONT_ID, x, y, item); } - -void KeyboardEntryActivity::onCapsHeld() { - waitForCapsRelease(); - shiftActive = !shiftActive; - updateRequired = true; -} - -void KeyboardEntryActivity::waitForCapsRelease() { - while (mappedInput.isPressed(MappedInputManager::Button::Confirm)) delay(50); -} diff --git a/src/activities/util/KeyboardEntryActivity.h b/src/activities/util/KeyboardEntryActivity.h index f5d9f3d3..1c1b1f3e 100644 --- a/src/activities/util/KeyboardEntryActivity.h +++ b/src/activities/util/KeyboardEntryActivity.h @@ -96,7 +96,4 @@ class KeyboardEntryActivity : public Activity { int getRowLength(int row) const; void render() const; void renderItemWithSelector(int x, int y, const char* item, bool isSelected) const; - - void onCapsHeld(); - void waitForCapsRelease(); };