- Replaced libswipetype with MornsGestureEngine — ported from
FlorisBoard's StatisticalGlideTypingClassifier (Apache 2.0)
- Uses combined shape + location Gaussian probability scoring
(SHAPE_STD=22.08, LOCATION_STD=0.5109) with 200-point sampling
- Gesture activates instantly on key change with velocity-based detection
- Trail draws from initial touch through entire glide
- Added Kotlin plugin to build (v2.1.20)
- 2000 word dictionary from cracklib-small
- Removed libswipetype dependency from glide flow
(libswipetype still present as submodule but unused)
submodule vendor/libswipetype now points to
http://10.0.1.49:3010/harley/libswipetype.git (commit e4aef2f)
instead of upstream github.com/libswipetype/libswipetype.
Key change: removed [0,1] bounding-box normalization from both
PathProcessor and IdealPathGenerator. Paths now stay in original dp
coordinates so DTW measures actual keyboard distance between keys.
- Moved gesture detection from Pointers (which didn't know key positions)
to Keyboard2View.onTouch() which has getKeyAtPosition()
- Tracks finger movement across letter keys using actual key positions
- Ignores corner-swipe mechanism — uses raw x,y + hit-testing
- Threshold: 3+ different letter keys visited → triggers glide mode
- Added SwipeTypeAdapter lifecycle in Keyboard2 (init, shutdown)
- Added swipe adapter to Pointers via Keyboard2View setter
- Gesture detection: tracks distinct letter keys visited (3+ triggers glide)
- On lift, processes gesture and commits top candidate via InputConnection
- Collects touch points during active glide gesture
- Engine loads en_us_sample.glide dictionary on startup
- '!' moved to bottom-left of '1' (q sw), removed from e ne
- Dash on o sw, underscore on o se
- ':' on l sw (replaced backslash)
- Bottom row: Ctrl | Alt | Space | Fn | Enter
- Fn moved right of space bar, corner swipes cleaned up
- Voice typing moved from Enter to Fn bottom-left (key6)
- Clipboard on Ctrl bottom-left (key6)
- New 'tux' key: META modifier displayed as Tux penguin (0xE002)
from special_font/002.svg, toggleable (latch+double-tap lock)
- Enter only has action corner (key2), no voice typing
- Config (settings) kept on Fn up-swipe (key1)
- Top row numbers moved from ne (top-right) to nw (top-left) per request
- Existing nw symbols (tilde, !) shifted to ne positions
- Shift restored in z-row (normal key width)
- Backspace now normal key width (no more 1.5x)
- Fn key now has corner swipes: config, change_method, emoji, switch_numeric
- Bottom row: Fn | Ctrl | Alt | Space | Enter
- Joypad no longer uses displacement-accumulation (useless on space bar).
- After long-press space bar, determine direction from finger offset vs origin.
- Direction locks, fires one cursor event, then auto-repeats at
longPressInterval rate via _longpress_handler.
- Changing finger direction updates the lock (fires in new dir immediately).
- Returning finger to dead zone stops auto-repeat.
- Removed SPEED_VERTICAL_MULT and startup threshold:space bar has no room.
- Space bar icon changed to 0xE001 (4-directional arrows).
- Space bar long-press now activates Joypad cursor mode
(long-press detected in handleLongPress before key-repeat)
- Removed separate cursor_joystick key from bottom row
- Widened space bar (4.2 → 6.0) to compensate
- Bottom row: Shift | Fn | Ctrl | Alt | Space (joypad on long-press) | Enter
- Removed redundant shift key from latn_qwerty_us.xml third row
(shift is now on the bottom row only)
- Rebuilt assets/special_font.ttf to include 001.svg (4-directional
joystick icon at codepoint 0xE001)
When the layout is split, insert a middle column showing the
complete_first, complete_second, etc.. keys.
These keys are rendered without borders and background with a new role.
The suggestion bar is hidden for split layouts. The intention is to gain
much needed vertical space.
* Add tests
* Fix compose-space sequences not working
KeyModifier didn't pass editing keys to ComposeKey.
* Cleanup test code
* Show the nbsp symbol when typing compose-space-space
The number pane and the pin entry layouts are split in landscape
orientation. Instead of inserting empty space in the middle of the
layout, the numpad is duplicated. The other keys are not duplicated.
This adds the new "Stateful" kind of keys, for which the symbol is
dynamically computed from the app's state. This is implemented with a
hook directly in KeyValue.
3 keys are added for accessing the 3 words on the candidates view.
* Automatically split layouts in landscape
This inserts empty space in the center of layouts when in landscape
orientation. The keys are smaller and pushed to the edges of the screen.
This way, the fingers don't have to reach the center of the screen,
which is inconvenient in landscape orientation.
* Duplicate keys that are on the middle
Keys that are almost aligned on the middle of the screen are duplicated
on both sides. These keys are most probably hit with both thumbs.
This is especially useful for large keys like the space bar on the
bottom row.
* Split the bottom row
* Add an option to control layout splitting
* Different color for action keys and space bar
Keys can be made darker or dimmer individually in layouts.
This is done by setting the new 'role' attributes. Roles are "normal",
"action" and "space_bar".
The "action" role is intended to be used for keys like shift, backspace
and other keys from the bottom row.
Themes and special layouts are updated.
* Set 'role="action"' for shift and backspace keys, the number row and numpad.
* check_layout.py: Check that some keys have a role
Since SDK 29, calling setSystemGestureExclusionRects is mandatory to
continue supporting the keyboard's gestures but since SDK 30, this is
done automatically.
The option can be set to "Show everything" to show the keyboard even
when a physical keyboard is present.
This is a list preference to allow adding a "Show suggestions" option
later.
* gen_method_xml.py: Add missing dictionary for English
* gen_method_xml.py: Propagate dictionary specified in default locales
For example, propagate the dictionary specified for 'en' to 'en-IN',
'en-NG', etc..
* Use the dictionary en_US for locale en_CA
* Refactor: Move DeviceLocales instance to Config
Allows accesses from CandidatesView.
* Show the current locale when no dictionary is installed
This helps understand why installing a dictionary doesn't remove the
message asking to install a dictionary.
The "Install" button is removed and the message is more informative.
* Update translation files
* Fix unwanted mutation of background drawable
* Add a background color under suggestions
Suggestions might be unreadable when the keyboard opacity is very low
(eg. black on black).
The new background is normally invisible, unless the opacity option is
not set to 100%. The corner are rounded like the keys on the keyboard.
* Add themes attributes for suggestion background
Future themes can use them.