From 7f3ee48d118641dd2cbd8e047094602a2f7bbf50 Mon Sep 17 00:00:00 2001 From: eranl <1707552+eranl@users.noreply.github.com> Date: Sat, 19 Jul 2025 19:32:09 +0300 Subject: [PATCH 1/7] Make deleting a phantom space a separate backspace press --- .../helium314/keyboard/latin/inputlogic/InputLogic.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java b/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java index e059e0b130..04e3d189c8 100644 --- a/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java +++ b/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java @@ -1158,7 +1158,9 @@ private void handleSeparatorEvent(final Event event, final InputTransaction inpu */ private void handleBackspaceEvent(final Event event, final InputTransaction inputTransaction, final String currentKeyboardScript) { - mSpaceState = SpaceState.NONE; + if (mSpaceState != SpaceState.PHANTOM) { + mSpaceState = SpaceState.NONE; + } mDeleteCount++; // In many cases after backspace, we need to update the shift state. Normally we need @@ -1183,7 +1185,9 @@ private void handleBackspaceEvent(final Event event, final InputTransaction inpu mConnection.getExpectedSelectionEnd(), true /* clearSuggestionStrip */); // When we exit this if-clause, mWordComposer.isComposingWord() will return false. } - if (mWordComposer.isComposingWord()) { + if (mSpaceState == SpaceState.PHANTOM) { + mSpaceState = SpaceState.NONE; + } else if (mWordComposer.isComposingWord()) { if (mWordComposer.isBatchMode()) { final String rejectedSuggestion = mWordComposer.getTypedWord(); mWordComposer.reset(); From d23a42b22efdb1f63b6ddb698fbdcfbfe45b1323 Mon Sep 17 00:00:00 2001 From: eranl <1707552+eranl@users.noreply.github.com> Date: Sat, 19 Jul 2025 20:02:36 +0300 Subject: [PATCH 2/7] Fix failing test --- app/src/test/java/helium314/keyboard/latin/InputLogicTest.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/test/java/helium314/keyboard/latin/InputLogicTest.kt b/app/src/test/java/helium314/keyboard/latin/InputLogicTest.kt index 0834c31aa8..b9e9006338 100644 --- a/app/src/test/java/helium314/keyboard/latin/InputLogicTest.kt +++ b/app/src/test/java/helium314/keyboard/latin/InputLogicTest.kt @@ -688,7 +688,8 @@ class InputLogicTest { reset() glideTypingInput("hello") assertEquals("hello", text) - functionalKeyPress(KeyCode.DELETE) + functionalKeyPress(KeyCode.DELETE) // delete phantom space + functionalKeyPress(KeyCode.DELETE) // delete word assertEquals("", text) // todo: now we want some way to disable delete-all on backspace, either per setting or something else From 14cee733dc21c61389cc7d78839760a5715ee907 Mon Sep 17 00:00:00 2001 From: eranl <1707552+eranl@users.noreply.github.com> Date: Sun, 20 Jul 2025 03:29:34 +0300 Subject: [PATCH 3/7] Fix glide typing, restart suggestions --- .../keyboard/latin/inputlogic/InputLogic.java | 12 ++++++------ .../java/helium314/keyboard/latin/InputLogicTest.kt | 3 +-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java b/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java index 04e3d189c8..0d39d70bfc 100644 --- a/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java +++ b/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java @@ -1158,9 +1158,6 @@ private void handleSeparatorEvent(final Event event, final InputTransaction inpu */ private void handleBackspaceEvent(final Event event, final InputTransaction inputTransaction, final String currentKeyboardScript) { - if (mSpaceState != SpaceState.PHANTOM) { - mSpaceState = SpaceState.NONE; - } mDeleteCount++; // In many cases after backspace, we need to update the shift state. Normally we need @@ -1185,9 +1182,7 @@ private void handleBackspaceEvent(final Event event, final InputTransaction inpu mConnection.getExpectedSelectionEnd(), true /* clearSuggestionStrip */); // When we exit this if-clause, mWordComposer.isComposingWord() will return false. } - if (mSpaceState == SpaceState.PHANTOM) { - mSpaceState = SpaceState.NONE; - } else if (mWordComposer.isComposingWord()) { + if (mWordComposer.isComposingWord()) { if (mWordComposer.isBatchMode()) { final String rejectedSuggestion = mWordComposer.getTypedWord(); mWordComposer.reset(); @@ -1260,8 +1255,13 @@ private void handleBackspaceEvent(final Event event, final InputTransaction inpu // Likewise return; } + } else if (mSpaceState == SpaceState.PHANTOM) { + mSpaceState = SpaceState.NONE; + restartSuggestionsOnWordTouchedByCursor(inputTransaction.getMSettingsValues(), currentKeyboardScript); + return; } + mSpaceState = SpaceState.NONE; boolean hasUnlearnedWordBeingDeleted = false; // No cancelling of commit/double space/swap: we have a regular backspace. diff --git a/app/src/test/java/helium314/keyboard/latin/InputLogicTest.kt b/app/src/test/java/helium314/keyboard/latin/InputLogicTest.kt index b9e9006338..0834c31aa8 100644 --- a/app/src/test/java/helium314/keyboard/latin/InputLogicTest.kt +++ b/app/src/test/java/helium314/keyboard/latin/InputLogicTest.kt @@ -688,8 +688,7 @@ class InputLogicTest { reset() glideTypingInput("hello") assertEquals("hello", text) - functionalKeyPress(KeyCode.DELETE) // delete phantom space - functionalKeyPress(KeyCode.DELETE) // delete word + functionalKeyPress(KeyCode.DELETE) assertEquals("", text) // todo: now we want some way to disable delete-all on backspace, either per setting or something else From f1c2ceda4cb858175e6047e66a947bf5b03c39cf Mon Sep 17 00:00:00 2001 From: eranl <1707552+eranl@users.noreply.github.com> Date: Sun, 20 Jul 2025 04:23:15 +0300 Subject: [PATCH 4/7] Cleanup --- .../java/helium314/keyboard/latin/inputlogic/InputLogic.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java b/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java index 0d39d70bfc..6325845e61 100644 --- a/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java +++ b/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java @@ -1158,6 +1158,7 @@ private void handleSeparatorEvent(final Event event, final InputTransaction inpu */ private void handleBackspaceEvent(final Event event, final InputTransaction inputTransaction, final String currentKeyboardScript) { + mSpaceState = SpaceState.NONE; mDeleteCount++; // In many cases after backspace, we need to update the shift state. Normally we need @@ -1255,13 +1256,11 @@ private void handleBackspaceEvent(final Event event, final InputTransaction inpu // Likewise return; } - } else if (mSpaceState == SpaceState.PHANTOM) { - mSpaceState = SpaceState.NONE; + } else if (SpaceState.PHANTOM == inputTransaction.getMSpaceState()) { restartSuggestionsOnWordTouchedByCursor(inputTransaction.getMSettingsValues(), currentKeyboardScript); return; } - mSpaceState = SpaceState.NONE; boolean hasUnlearnedWordBeingDeleted = false; // No cancelling of commit/double space/swap: we have a regular backspace. From 74472f149d1eeb3324ffdc0e0d358d08967441e7 Mon Sep 17 00:00:00 2001 From: eranl <1707552+eranl@users.noreply.github.com> Date: Mon, 28 Jul 2025 01:55:41 +0300 Subject: [PATCH 5/7] Batch input --- .../java/helium314/keyboard/latin/inputlogic/InputLogic.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java b/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java index 6325845e61..86a52b25fd 100644 --- a/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java +++ b/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java @@ -1185,6 +1185,9 @@ private void handleBackspaceEvent(final Event event, final InputTransaction inpu } if (mWordComposer.isComposingWord()) { if (mWordComposer.isBatchMode()) { + if (SpaceState.PHANTOM == inputTransaction.getMSpaceState()) { + return; + } final String rejectedSuggestion = mWordComposer.getTypedWord(); mWordComposer.reset(); mWordComposer.setRejectedBatchModeSuggestion(rejectedSuggestion); From 7f74fe1a4a40bc6198fda8ca6dbd3b2f26612d1f Mon Sep 17 00:00:00 2001 From: eranl <1707552+eranl@users.noreply.github.com> Date: Mon, 28 Jul 2025 02:18:22 +0300 Subject: [PATCH 6/7] Fix failing test --- app/src/test/java/helium314/keyboard/latin/InputLogicTest.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/test/java/helium314/keyboard/latin/InputLogicTest.kt b/app/src/test/java/helium314/keyboard/latin/InputLogicTest.kt index 0834c31aa8..b9e9006338 100644 --- a/app/src/test/java/helium314/keyboard/latin/InputLogicTest.kt +++ b/app/src/test/java/helium314/keyboard/latin/InputLogicTest.kt @@ -688,7 +688,8 @@ class InputLogicTest { reset() glideTypingInput("hello") assertEquals("hello", text) - functionalKeyPress(KeyCode.DELETE) + functionalKeyPress(KeyCode.DELETE) // delete phantom space + functionalKeyPress(KeyCode.DELETE) // delete word assertEquals("", text) // todo: now we want some way to disable delete-all on backspace, either per setting or something else From 53d0ce051341e2bf2eb3ca7c69485563d8d23b0b Mon Sep 17 00:00:00 2001 From: eranl <1707552+eranl@users.noreply.github.com> Date: Fri, 14 Nov 2025 23:58:10 +0200 Subject: [PATCH 7/7] Fix main merge --- .../helium314/keyboard/latin/inputlogic/InputLogic.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java b/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java index cdcad6af99..027f193b53 100644 --- a/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java +++ b/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java @@ -1236,7 +1236,7 @@ private void handleBackspaceEvent(final Event event, final InputTransaction inpu } if (mWordComposer.isComposingWord()) { if (mWordComposer.isBatchMode()) { - if (SpaceState.PHANTOM == inputTransaction.getMSpaceState()) { + if (SpaceState.PHANTOM == inputTransaction.getSpaceState()) { return; } final String rejectedSuggestion = mWordComposer.getTypedWord(); @@ -1308,8 +1308,8 @@ private void handleBackspaceEvent(final Event event, final InputTransaction inpu // Likewise return; } - } else if (SpaceState.PHANTOM == inputTransaction.getMSpaceState()) { - restartSuggestionsOnWordTouchedByCursor(inputTransaction.getMSettingsValues(), currentKeyboardScript); + } else if (SpaceState.PHANTOM == inputTransaction.getSpaceState()) { + restartSuggestionsOnWordTouchedByCursor(inputTransaction.getSettingsValues(), currentKeyboardScript); return; }