From 1640b53dfcadf9e85cc63664b5fdf13dd3bf2dd7 Mon Sep 17 00:00:00 2001 From: Helium314 Date: Fri, 20 Oct 2023 17:36:26 +0200 Subject: [PATCH] fix some issues with korean input --- .../latin/inputlogic/InputLogic.java | 4 +++- .../inputmethod/latin/InputLogicTest.kt | 18 ++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/inputlogic/InputLogic.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/inputlogic/InputLogic.java index f6293f1da..495248191 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/inputlogic/InputLogic.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/inputlogic/InputLogic.java @@ -434,12 +434,14 @@ public final class InputLogic { mWordBeingCorrectedByCursor = null; mJustRevertedACommit = false; final Event processedEvent; + Log.i("test", "cp "+event.getMCodePoint()+", code "+event.getMKeyCode()); if (currentKeyboardScriptId == ScriptUtils.SCRIPT_HANGUL // only use the Hangul chain if codepoint may actually be Hangul // todo: this whole hangul-related logic should probably be somewhere else // need to use hangul combiner for whitespace, because otherwise the current word // seems to get deleted / replaced by space during mConnection.endBatchEdit() - && (event.getMCodePoint() >= 0x1100 || Character.isWhitespace(event.getMCodePoint()))) { + // similar for functional keys (codePoint -1) + && (event.getMCodePoint() >= 0x1100 || Character.isWhitespace(event.getMCodePoint()) || event.getMCodePoint() == -1)) { mWordComposer.setHangul(true); final Event hangulDecodedEvent = HangulEventDecoder.decodeSoftwareKeyEvent(event); // todo: here hangul combiner does already consume the event, and appends typed codepoint diff --git a/app/src/test/java/org/dslul/openboard/inputmethod/latin/InputLogicTest.kt b/app/src/test/java/org/dslul/openboard/inputmethod/latin/InputLogicTest.kt index 2201000f1..1fcd9b0ef 100644 --- a/app/src/test/java/org/dslul/openboard/inputmethod/latin/InputLogicTest.kt +++ b/app/src/test/java/org/dslul/openboard/inputmethod/latin/InputLogicTest.kt @@ -136,12 +136,12 @@ class InputLogicTest { @Test fun insertLetterIntoWordHangul() { reset() currentScript = ScriptUtils.SCRIPT_HANGUL - setText("ㅛㅎㄹㅎㅕㅛ") + chainInput("ㅛㅎㄹㅎㅕㅛ") setCursorPosition(3) input('ㄲ') // fails, as expected from the hangul issue when processing the event in onCodeInput - assertEquals("ㅛㅎㄹㄲㅎㅕㅛ", getWordAtCursor()) - assertEquals("ㅛㅎㄹㄲㅎㅕㅛ", getText()) - assertEquals("ㅛㅎㄹㄲㅎㅕㅛ", textBeforeCursor + textAfterCursor) + assertEquals("ㅛㅎㄹㄲ혀ㅛ", getWordAtCursor()) + assertEquals("ㅛㅎㄹㄲ혀ㅛ", getText()) + assertEquals("ㅛㅎㄹㄲ혀ㅛ", textBeforeCursor + textAfterCursor) assertEquals(4, getCursorPosition()) assertEquals(4, cursor) } @@ -525,10 +525,12 @@ class InputLogicTest { latinIME.onEvent(Event.createEventForCodePointFromUnknownSource(codePoint)) handleMessages() - if (phantomSpaceToInsert.isEmpty()) - assertEquals(oldBefore + insert, textBeforeCursor) - else // in some cases autospace might be suppressed - assert(oldBefore + phantomSpaceToInsert + insert == textBeforeCursor || oldBefore + insert == textBeforeCursor) + if (currentScript != ScriptUtils.SCRIPT_HANGUL) { // check fails if hangul combiner merges symbols + if (phantomSpaceToInsert.isEmpty()) + assertEquals(oldBefore + insert, textBeforeCursor) + else // in some cases autospace might be suppressed + assert(oldBefore + phantomSpaceToInsert + insert == textBeforeCursor || oldBefore + insert == textBeforeCursor) + } assertEquals(oldAfter, textAfterCursor) assertEquals(textBeforeCursor + textAfterCursor, getText()) checkConnectionConsistency()