diff --git a/app/src/main/assets/rime/trime.yaml b/app/src/main/assets/rime/trime.yaml index 796c962d91..964f32e886 100644 --- a/app/src/main/assets/rime/trime.yaml +++ b/app/src/main/assets/rime/trime.yaml @@ -1040,6 +1040,7 @@ preset_keyboards: letter: __include: /preset_keyboards/default ascii_mode: 1 + reset_ascii_mode: true #显示键盘时重置为ascii_mode指定的状态 lock: false qwerty0: name: 預設36鍵 diff --git a/app/src/main/java/com/osfans/trime/ime/core/Trime.java b/app/src/main/java/com/osfans/trime/ime/core/Trime.java index 25ba289be1..791a924789 100644 --- a/app/src/main/java/com/osfans/trime/ime/core/Trime.java +++ b/app/src/main/java/com/osfans/trime/ime/core/Trime.java @@ -806,7 +806,7 @@ public void bindKeyboardToInputView() { * a sentence. */ private void dispatchCapsStateToInputView() { - if ((isAutoCaps || Rime.isAsciiMode()) + if ((isAutoCaps && Rime.isAsciiMode()) && (mainKeyboardView != null && !mainKeyboardView.isCapsOn())) { mainKeyboardView.setShifted(false, activeEditorInstance.getCursorCapsMode() != 0); } diff --git a/app/src/main/java/com/osfans/trime/ime/keyboard/Keyboard.java b/app/src/main/java/com/osfans/trime/ime/keyboard/Keyboard.java index a287f706a0..fc3ac4d708 100644 --- a/app/src/main/java/com/osfans/trime/ime/keyboard/Keyboard.java +++ b/app/src/main/java/com/osfans/trime/ime/keyboard/Keyboard.java @@ -76,6 +76,8 @@ public class Keyboard { /** Keyboard mode, or zero, if none. */ private int mAsciiMode; + private boolean resetAsciiMode; + // Variables for pre-computing nearest keys. private String mLabelTransform; private int mCellWidth; @@ -195,6 +197,7 @@ public Keyboard(Context context, String name) { mAsciiMode = YamlUtils.INSTANCE.getInt(keyboardConfig, "ascii_mode", 1); if (mAsciiMode == 0) mAsciiKeyboard = YamlUtils.INSTANCE.getString(keyboardConfig, "ascii_keyboard", ""); + resetAsciiMode = YamlUtils.INSTANCE.getBoolean(keyboardConfig, "reset_ascii_mode", false); mLock = YamlUtils.INSTANCE.getBoolean(keyboardConfig, "lock", false); int columns = YamlUtils.INSTANCE.getInt(keyboardConfig, "columns", 30); int defaultWidth = @@ -588,6 +591,10 @@ public boolean getAsciiMode() { return mAsciiMode != 0; } + public boolean isResetAsciiMode() { + return resetAsciiMode; + } + public String getAsciiKeyboard() { return mAsciiKeyboard; } diff --git a/app/src/main/java/com/osfans/trime/ime/keyboard/KeyboardSwitcher.kt b/app/src/main/java/com/osfans/trime/ime/keyboard/KeyboardSwitcher.kt index eae896c71a..9de3973eff 100644 --- a/app/src/main/java/com/osfans/trime/ime/keyboard/KeyboardSwitcher.kt +++ b/app/src/main/java/com/osfans/trime/ime/keyboard/KeyboardSwitcher.kt @@ -89,5 +89,9 @@ class KeyboardSwitcher { currentId = if (id.isValidId()) id else 0 } + public fun getCurrentKeyboardName(): String { + return keyboardNames.get(currentId) + } + private fun Int.isValidId() = this in keyboards.indices } diff --git a/app/src/main/java/com/osfans/trime/ime/text/TextInputManager.kt b/app/src/main/java/com/osfans/trime/ime/text/TextInputManager.kt index a10d202e82..95d53141f2 100644 --- a/app/src/main/java/com/osfans/trime/ime/text/TextInputManager.kt +++ b/app/src/main/java/com/osfans/trime/ime/text/TextInputManager.kt @@ -230,6 +230,12 @@ class TextInputManager private constructor() : it.switchToKeyboard(keyboardType) } Rime.get(trime) + + // style/reset_ascii_mode指定了弹出键盘时是否重置ASCII状态。 + // 键盘的reset_ascii_mode指定了重置时是否重置到keyboard的ascii_mode描述的状态。 + if (shouldResetAsciiMode && keyboardSwitcher.currentKeyboard.isResetAsciiMode) { + tempAsciiMode = keyboardSwitcher.currentKeyboard.asciiMode + } tempAsciiMode?.let { Rime.setOption("ascii_mode", it) } isComposable = isComposable && !Rime.isEmpty() if (!trime.onEvaluateInputViewShown()) {