From b751956466995a478a872e7462f7c304c0809145 Mon Sep 17 00:00:00 2001 From: SimpSon Date: Thu, 22 Oct 2026 23:01:17 +0200 Subject: [PATCH] Add files via upload --- examples/companion_radio/ui-new/UITask.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/examples/companion_radio/ui-new/UITask.cpp b/examples/companion_radio/ui-new/UITask.cpp index ac5e5bf9..b481a398 100644 --- a/examples/companion_radio/ui-new/UITask.cpp +++ b/examples/companion_radio/ui-new/UITask.cpp @@ -1267,8 +1267,7 @@ void UITask::loop() { #if FEAT_DISPLAY_ROTATION_SETTING && defined(JOYSTICK_UPRIGHT_ROTATION) if (_node_prefs) joy_rot += (JOYSTICK_UPRIGHT_ROTATION - _node_prefs->display_rotation) & 3; #endif - int ev = user_btn.check(); - if (ev == BUTTON_EVENT_CLICK) { + auto enterClick = [&]() { if (back_btn.isPressed() && !_unlock_kb) { // Enter clicked while Back is held — lock/unlock sequence if (_display && !_display->isOn()) { @@ -1292,6 +1291,25 @@ void UITask::loop() { _lock_seq_ms = 0; } enqueueKey(checkDisplayOn(KEY_ENTER)); + }; + int ev = user_btn.check(); + #ifdef UI_ENTER_DOUBLE_BACK + // For a joystick without a reachable Back button: a double click on Enter goes + // back. Multi-click delays a single Enter by the click window. Where text is + // typed (on-screen keyboard, PIN pad) or the lock sequence is counting, a + // double is just two Enters, so a repeated letter still works. + if (ev == BUTTON_EVENT_DOUBLE_CLICK || ev == BUTTON_EVENT_TRIPLE_CLICK) { + int n = (ev == BUTTON_EVENT_DOUBLE_CLICK) ? 2 : 3; + if (_unlock_kb || _kb.isVisible() || back_btn.isPressed()) { + for (int i = 0; i < n; i++) enterClick(); + } else { + enqueueKey(checkDisplayOn(KEY_CANCEL)); + } + ev = BUTTON_EVENT_NONE; + } + #endif + if (ev == BUTTON_EVENT_CLICK) { + enterClick(); } } else if (ev == BUTTON_EVENT_LONG_PRESS) { enqueueKey(handleLongPress(KEY_ENTER)); // REVISIT: could be mapped to different key code