From b771710c428bf72b82da9d73181a08e1d0eb658c Mon Sep 17 00:00:00 2001 From: if-can Date: Sat, 18 Jan 2025 17:24:56 +0800 Subject: [PATCH] fix: key sequence cannot switch keyboards and commit partial text --- .../com/osfans/trime/ime/dependency/InputComponent.kt | 2 +- .../trime/ime/keyboard/CommonKeyboardActionListener.kt | 10 ++++++++-- .../com/osfans/trime/ime/keyboard/KeyboardWindow.kt | 8 ++------ 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/osfans/trime/ime/dependency/InputComponent.kt b/app/src/main/java/com/osfans/trime/ime/dependency/InputComponent.kt index a9c944ecca..abc5737404 100644 --- a/app/src/main/java/com/osfans/trime/ime/dependency/InputComponent.kt +++ b/app/src/main/java/com/osfans/trime/ime/dependency/InputComponent.kt @@ -32,13 +32,13 @@ abstract class InputComponent( @get:InputScope @get:Provides val rime: RimeSession, ) { abstract val broadcaster: InputBroadcaster - abstract val commonKeyboardActionListener: CommonKeyboardActionListener abstract val enterKeyLabel: EnterKeyLabelModule abstract val quickBar: QuickBar abstract val preedit: PreeditModule abstract val windowManager: BoardWindowManager abstract val preview: KeyPreviewChoreographer abstract val keyboardWindow: KeyboardWindow + abstract val commonKeyboardActionListener: CommonKeyboardActionListener abstract val liquidKeyboard: LiquidKeyboard abstract val candidate: CandidateModule } diff --git a/app/src/main/java/com/osfans/trime/ime/keyboard/CommonKeyboardActionListener.kt b/app/src/main/java/com/osfans/trime/ime/keyboard/CommonKeyboardActionListener.kt index 7b9debb7f9..d192121669 100644 --- a/app/src/main/java/com/osfans/trime/ime/keyboard/CommonKeyboardActionListener.kt +++ b/app/src/main/java/com/osfans/trime/ime/keyboard/CommonKeyboardActionListener.kt @@ -53,6 +53,7 @@ class CommonKeyboardActionListener( private val rime: RimeSession, private val liquidKeyboard: LiquidKeyboard, private val windowManager: BoardWindowManager, + private val lazyKeyboardWindow: Lazy, ) { companion object { /** Pattern for braced key event like `{Left}`, `{Right}`, etc. */ @@ -64,6 +65,8 @@ class CommonKeyboardActionListener( private val PLACEHOLDER_PATTERN = Regex(".*(%([1-4]\\$)?s).*") } + private val keyboardWindow by lazyKeyboardWindow + private val prefs = AppPrefs.defaultInstance() private var shouldReleaseKey: Boolean = false @@ -164,6 +167,9 @@ class CommonKeyboardActionListener( } } } + KeyEvent.KEYCODE_EISU -> { // Switch keyboard + keyboardWindow.switchKeyboard(action.select) + } KeyEvent.KEYCODE_LANGUAGE_SWITCH -> { // Switch IME if (action.select == ".next") { service.switchToNextIme() @@ -328,8 +334,8 @@ class CommonKeyboardActionListener( // FIXME: rime will not handle the key sequence when // ascii_mode is on, there may be a better solution // for this. - if (Rime.simulateKeySequence(slice)) { - if (Rime.isAsciiMode) { + if (Rime.isAsciiMode) { + if (Rime.simulateKeySequence(slice)) { service.commitText(slice) } } else { diff --git a/app/src/main/java/com/osfans/trime/ime/keyboard/KeyboardWindow.kt b/app/src/main/java/com/osfans/trime/ime/keyboard/KeyboardWindow.kt index 9ce18b3819..b336b55af4 100644 --- a/app/src/main/java/com/osfans/trime/ime/keyboard/KeyboardWindow.kt +++ b/app/src/main/java/com/osfans/trime/ime/keyboard/KeyboardWindow.kt @@ -7,7 +7,6 @@ package com.osfans.trime.ime.keyboard import android.content.Context import android.content.res.Configuration import android.text.InputType -import android.view.KeyEvent import android.view.View import android.view.inputmethod.EditorInfo import android.widget.FrameLayout @@ -331,11 +330,8 @@ class KeyboardWindow( return } } - if (action.code == KeyEvent.KEYCODE_EISU) { // Switch keyboard - switchKeyboard(action.select) - } else { - delegate.onAction(action) - } + + delegate.onAction(action) } } }