mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-06-05 14:20:20 +00:00
more workarounds for Korean
not just space might delete text, but also other separators now this problem is avoided in a more generic way fixes GH-1447
This commit is contained in:
parent
9c727f342d
commit
1d441a8ca6
3 changed files with 35 additions and 13 deletions
|
@ -218,6 +218,11 @@ public final class WordComposer {
|
||||||
// TODO: compute where that puts us inside the events
|
// TODO: compute where that puts us inside the events
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void resetInvalidCursorPosition() {
|
||||||
|
if (mCursorPositionWithinWord > mCodePointSize)
|
||||||
|
mCursorPositionWithinWord = 0;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isCursorFrontOrMiddleOfComposingWord() {
|
public boolean isCursorFrontOrMiddleOfComposingWord() {
|
||||||
if (DebugFlags.DEBUG_ENABLED && mCursorPositionWithinWord > mCodePointSize) {
|
if (DebugFlags.DEBUG_ENABLED && mCursorPositionWithinWord > mCodePointSize) {
|
||||||
throw new RuntimeException("Wrong cursor position : " + mCursorPositionWithinWord
|
throw new RuntimeException("Wrong cursor position : " + mCursorPositionWithinWord
|
||||||
|
|
|
@ -440,19 +440,28 @@ public final class InputLogic {
|
||||||
mWordBeingCorrectedByCursor = null;
|
mWordBeingCorrectedByCursor = null;
|
||||||
mJustRevertedACommit = false;
|
mJustRevertedACommit = false;
|
||||||
final Event processedEvent;
|
final Event processedEvent;
|
||||||
if (currentKeyboardScript.equals(ScriptUtils.SCRIPT_HANGUL)
|
if (currentKeyboardScript.equals(ScriptUtils.SCRIPT_HANGUL)) {
|
||||||
// only use the Hangul chain if codepoint may actually be Hangul
|
// only use the Hangul chain if codepoint may actually be Hangul
|
||||||
// todo: this whole hangul-related logic should probably be somewhere else
|
// todo: this whole hangul-related logic should probably be somewhere else
|
||||||
// need to use hangul combiner for whitespace, because otherwise the current word
|
// need to use hangul combiner for functional keys (codePoint -1), because otherwise the current word
|
||||||
// seems to get deleted / replaced by space during mConnection.endBatchEdit()
|
// seems to get deleted / replaced by space during mConnection.endBatchEdit()
|
||||||
// similar for functional keys (codePoint -1)
|
if (event.getMCodePoint() >= 0x1100 || event.getMCodePoint() == -1) {
|
||||||
&& (event.getMCodePoint() >= 0x1100 || Character.isWhitespace(event.getMCodePoint()) || event.getMCodePoint() == -1)) {
|
mWordComposer.setHangul(true);
|
||||||
mWordComposer.setHangul(true);
|
final Event hangulDecodedEvent = HangulEventDecoder.decodeSoftwareKeyEvent(event);
|
||||||
final Event hangulDecodedEvent = HangulEventDecoder.decodeSoftwareKeyEvent(event);
|
// todo: here hangul combiner does already consume the event, and appends typed codepoint
|
||||||
// todo: here hangul combiner does already consume the event, and appends typed codepoint
|
// to the current word instead of considering the cursor position
|
||||||
// to the current word instead of considering the cursor position
|
// position is actually not visible to the combiner, how to fix?
|
||||||
// position is actually not visible to the combiner, how to fix?
|
processedEvent = mWordComposer.processEvent(hangulDecodedEvent);
|
||||||
processedEvent = mWordComposer.processEvent(hangulDecodedEvent);
|
} else {
|
||||||
|
mWordComposer.setHangul(false);
|
||||||
|
final boolean wasComposingWord = mWordComposer.isComposingWord();
|
||||||
|
processedEvent = mWordComposer.processEvent(event);
|
||||||
|
// workaround for space and some other separators deleting / replacing the word
|
||||||
|
if (wasComposingWord && !mWordComposer.isComposingWord()) {
|
||||||
|
mWordComposer.resetInvalidCursorPosition();
|
||||||
|
mConnection.finishComposingText();
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
mWordComposer.setHangul(false);
|
mWordComposer.setHangul(false);
|
||||||
processedEvent = mWordComposer.processEvent(event);
|
processedEvent = mWordComposer.processEvent(event);
|
||||||
|
|
|
@ -152,6 +152,14 @@ class InputLogicTest {
|
||||||
assertEquals(4, cursor)
|
assertEquals(4, cursor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// see issue 1447
|
||||||
|
@Test fun separatorAfterHangul() {
|
||||||
|
reset()
|
||||||
|
currentScript = ScriptUtils.SCRIPT_HANGUL
|
||||||
|
chainInput("ㅛ.")
|
||||||
|
assertEquals("ㅛ.", text)
|
||||||
|
}
|
||||||
|
|
||||||
@Test fun separatorUnselectsWord() {
|
@Test fun separatorUnselectsWord() {
|
||||||
reset()
|
reset()
|
||||||
setText("hello")
|
setText("hello")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue