Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
4565f0f
Add Fleksy swipe mode
ndom91 Feb 21, 2026
cffc456
Fix right swipe crashes
ndom91 Feb 21, 2026
ab36995
Swap swipe suggestion direction and make vertical swipes more tolerant
ndom91 Feb 21, 2026
90849b8
Make swipes more tolerant
ndom91 Feb 21, 2026
69afa6a
Use a cached version of suggestions to swipe through instead of swipi…
ndom91 Feb 21, 2026
8caed40
Apply suggestion cache on swipe action mode only
ndom91 Feb 21, 2026
1111c34
Refactor swipe mode to be a SWIPE_GESTURE, not an additional SPACEBAR…
ndom91 Feb 21, 2026
e40506c
Remove settings tip bar
ndom91 Feb 22, 2026
b5887c7
Cleanup settings strings
ndom91 Feb 22, 2026
28a6bb4
Refactor spaces mode to use native dropdown
ndom91 Feb 22, 2026
1e77b50
Move swipe settings to be first setting as settings group looks bette…
ndom91 Feb 22, 2026
5796888
Ensure users can disable swipe modes entirely
ndom91 Feb 22, 2026
056a9db
Cleanup
ndom91 Feb 22, 2026
1fea5b4
Add legacy swipe input migration path
ndom91 Feb 22, 2026
25485b4
Reset KeyboardTextsTable.java
ndom91 Feb 22, 2026
f4c0e18
Wire up the swipe gesture build flag to disable this new mode as well
ndom91 Feb 22, 2026
0dde10d
Extract some of the swipeActions fns
ndom91 Feb 22, 2026
38566d0
Refactor to using radio options
ndom91 Feb 22, 2026
143867d
Cleanup
ndom91 Feb 22, 2026
20335dc
Add compact mode to ScreenTitle used as settings section header
ndom91 Feb 22, 2026
f08707b
First swipe up will always return you to your exact input, even if it…
ndom91 Feb 22, 2026
9e60cad
Swipe suggestions through punctuation when punctuation is the most re…
ndom91 Feb 22, 2026
ed56db2
Swap swipe up/down autosuggest cycle direction and fix bug re:swiping…
ndom91 Feb 22, 2026
934fe7f
Swipe left deletes whole word, not from cursor position to beginning …
ndom91 Feb 23, 2026
ab90841
Set vertical/horizontal swipe leniency independentally
ndom91 Feb 23, 2026
10a29a3
Dont activate swipe action on space or delete key
ndom91 Mar 15, 2026
805effa
Swiping left after a space continues deleting the next token
ndom91 Mar 15, 2026
587e966
Fix swipe up behaviour to only jump back to last auto-corrected word
ndom91 Mar 15, 2026
70df78f
Merge branch 'master' into fleksy-swipe-mode
ndom91 Mar 15, 2026
9e8531a
Delete whole word on swipe left for better perf
ndom91 Mar 15, 2026
231c1be
Extract delete whole word deletionTarget getDeletionTargetForWordAtCu…
ndom91 Mar 15, 2026
d164073
Fix inter-word swipe-left to delete whole word
ndom91 Mar 15, 2026
9cb90b2
Fix swiping up history
ndom91 Mar 15, 2026
2540252
Fix punctuation placement with preceding space
ndom91 Mar 16, 2026
c5c4429
Reset suggestion cache on cursor move
ndom91 Mar 17, 2026
1d2ea0c
Fix swipe suggestion cycling after cursor moves
ndom91 Mar 17, 2026
34b7d2f
Refine swipe cache reset on cursor moves
ndom91 Mar 17, 2026
88da458
Merge branch 'master' into fleksy-swipe-mode
ndom91 Mar 29, 2026
6b07e0e
Merge branch 'master' into fleksy-swipe-mode
ndom91 Apr 29, 2026
92b276b
Merge branch 'master' into fleksy-swipe-mode
ndom91 May 10, 2026
c85fef2
Fix swipe-up autocorrect revert for split words
ndom91 May 16, 2026
43b3b93
Merge remote-tracking branch 'origin/master' into fleksy-swipe-mode
ndom91 May 16, 2026
f81ba4a
Merge branch 'fleksy-swipe-mode' of github.com:ndom91/android-keyboar…
ndom91 May 16, 2026
2acdbfb
Fix build after upstream merge
ndom91 May 17, 2026
ec4f946
Add swipe autocorrect replacement session
ndom91 May 17, 2026
123ae23
Merge remote-tracking branch 'origin/master' into fleksy-swipe-mode
ndom91 May 29, 2026
048ed36
Merge remote-tracking branch 'origin/master' into fleksy-swipe-mode
ndom91 Jul 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions FLEKSY_AUTOCORRECT_HISTORY_NOTES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Fleksy Autocorrect Revert History Notes

Current swipe-up autocorrect revert is intentionally span/text based, not word-boundary based. This is required for corrections where one typed token becomes multiple committed words, e.g. `alot` -> `a lot`.

Potential future improvement: keep a small history of recent revertable autocorrect commits instead of only relying on the latest `LastComposedWord`.

Each history entry should store:

- originally typed text, e.g. `alot`
- committed text, e.g. `a lot`
- separator string, usually a space
- active/consumed state
- optional cursor/end offset or timestamp if useful

Important constraint: saving more words only helps if revert matching is still validated against actual editor text. Do not revert an old entry unless the text around the cursor still matches the stored committed span. Word-boundary matching is not enough for split-word autocorrections.

Likely implementation shape:

- Keep existing `mLastComposedWord` behavior for backspace undo to minimize risk.
- Add a separate capped deque/list of recent autocorrect commits, probably 3-5 entries.
- Push entries when `commitChosenWord(...)` creates a revertable autocorrect.
- On swipe-up, scan newest to oldest and revert the first entry whose committed text plus optional separator matches before the cursor.
- Mark entries consumed/inactive after reverting so stale history cannot repeatedly mutate text.

Avoid broadening normal backspace undo until swipe-up history is proven safe; backspace currently assumes a single most recent commit.
2 changes: 1 addition & 1 deletion java/res-large
Submodule res-large updated from d87d9d to 17f303
12 changes: 11 additions & 1 deletion java/res/values/strings-uix.xml
Original file line number Diff line number Diff line change
Expand Up @@ -454,6 +454,16 @@
<string name="morekey_settings_kind_misc_common">Misc. letters from common languages</string>
<string name="morekey_settings_kind_misc_common_example">e.g. [ß] on [s] in all Latin script languages</string>

<!-- swiping settings -->
<!-- When translating, rename it to gesture typing if it makes more sense for that language -->
<string name="swipe_input_settings_title">Swipe input modes</string>
<string name="swipe_input_settings_swipe">Swipe Typing (alpha)</string>
<string name="swipe_input_settings_swipe_disabled">Disabled</string>
<string name="swipe_input_settings_swipe_subtitle">Allow swiping from key to key to write words.</string>
<string name="swipe_input_settings_swipe_actions_mode">Swipe Actions (alpha)</string>
<string name="swipe_input_settings_swipe_actions_mode_subtitle">Fleksy-style directional action swipes.</string>
<string name="swipe_input_settings_swipe_disabled_subtitle">Turn off swipe typing and swipe actions.</string>

<!-- typing settings -->
<string name="typing_settings_title">Typing preferences</string>
<string name="typing_settings_suggest_emojis">Emoji Suggestions</string>
Expand Down Expand Up @@ -699,4 +709,4 @@ Default is %1$s</string>
<string name="personal_dictionary_delete_additional_file">Delete extra dictionary file?</string>
<!-- %1$s will be replaced with the custom dictionary name -->
<string name="personal_dictionary_delete_additional_file_text">%1$s will be deleted</string>
</resources>
</resources>
1 change: 1 addition & 0 deletions java/src/org/futo/inputmethod/engine/IMEInterface.kt
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ interface IMEInterface {
fun onUpWithDeletePointerActive()
fun onUpWithPointerActive()
fun onSwipeLanguage(direction: Int)
fun onSwipeAction(direction: Int)
fun onMovingCursorLockEvent(canMoveCursor: Boolean)
fun clearUserHistoryDictionaries()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ class ActionInputTransactionIME(val helper: IMEHelper) : IMEInterface, ActionInp
override fun onUpWithDeletePointerActive() {}
override fun onUpWithPointerActive() {}
override fun onSwipeLanguage(direction: Int) {}
override fun onSwipeAction(direction: Int) {}
override fun onMovingCursorLockEvent(canMoveCursor: Boolean) {}
override fun clearUserHistoryDictionaries() {}
override fun requestSuggestionRefresh() {}
Expand Down Expand Up @@ -111,4 +112,4 @@ class ActionInputTransactionIME(val helper: IMEHelper) : IMEInterface, ActionInp
fun ensureFinished() {
isFinished = true
}
}
}
4 changes: 3 additions & 1 deletion java/src/org/futo/inputmethod/engine/general/ChineseIME.kt
Original file line number Diff line number Diff line change
Expand Up @@ -902,6 +902,8 @@ class ChineseIME(val helper: IMEHelper) : IMEInterface, SuggestionStripViewAcces
switchToNextLanguage(helper.context, direction)
}

override fun onSwipeAction(direction: Int) {}

private var prevSuggest: SuggestedWords? = null
private val blacklist = SuggestionBlacklist(Settings.getInstance(), helper.context, helper.lifecycleScope)
override fun setNeutralSuggestionStrip() {
Expand Down Expand Up @@ -948,4 +950,4 @@ class ChineseIME(val helper: IMEHelper) : IMEInterface, SuggestionStripViewAcces

val debugInfo: String
get() = "configuration=${prevConfiguration}\nlayoutHint=${layoutHint}\nlocale=${Settings.getInstance().current.mLocale}\nisSimplified=${isSimplifiedChinese(Settings.getInstance().current.mLocale)}\nrawInput=${rawInput.text}"
}
}
Loading