This commit is contained in:
Gokul 2026-02-03 22:10:05 +00:00 committed by GitHub
commit 320e71784d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 27 additions and 3 deletions

View File

@ -92,8 +92,26 @@ void KeyboardEntryActivity::handleKeyPress() {
// Handle special row (bottom row with shift, space, backspace, done)
if (selectedRow == SPECIAL_ROW) {
if (selectedCol >= SHIFT_COL && selectedCol < SPACE_COL) {
// Shift toggle
// Shift toggle (double-tap enables caps lock)
const unsigned long now = millis();
const bool isDoubleTap = (lastShiftTapMs != 0) && ((now - lastShiftTapMs) <= SHIFT_DOUBLE_TAP_MS);
if (capsLockActive) {
capsLockActive = false;
shiftActive = false;
lastShiftTapMs = 0;
return;
}
if (isDoubleTap) {
capsLockActive = true;
shiftActive = true;
lastShiftTapMs = 0;
return;
}
shiftActive = !shiftActive;
lastShiftTapMs = now;
return;
}
@ -131,8 +149,9 @@ void KeyboardEntryActivity::handleKeyPress() {
if (maxLength == 0 || text.length() < maxLength) {
text += c;
// Auto-disable shift after typing a letter
if (shiftActive && ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))) {
if (shiftActive && !capsLockActive && ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))) {
shiftActive = false;
lastShiftTapMs = 0;
}
}
}
@ -318,7 +337,8 @@ void KeyboardEntryActivity::render() const {
// SHIFT key (logical col 0, spans 2 key widths)
const bool shiftSelected = (selectedRow == 4 && selectedCol >= SHIFT_COL && selectedCol < SPACE_COL);
renderItemWithSelector(currentX + 2, rowY, shiftActive ? "SHIFT" : "shift", shiftSelected);
const char* shiftLabel = capsLockActive ? "CAPS" : (shiftActive ? "SHIFT" : "shift");
renderItemWithSelector(currentX + 2, rowY, shiftLabel, shiftSelected);
currentX += 2 * (keyWidth + keySpacing);
// Space bar (logical cols 2-6, spans 5 key widths)

View File

@ -71,6 +71,10 @@ class KeyboardEntryActivity : public Activity {
int selectedRow = 0;
int selectedCol = 0;
bool shiftActive = false;
bool capsLockActive = false;
unsigned long lastShiftTapMs = 0;
static constexpr unsigned long SHIFT_DOUBLE_TAP_MS = 500;
// Callbacks
OnCompleteCallback onComplete;