You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
We are committed to making our apps as powerful and polished as possible. As an entirely community-funded project, we rely on your support to keep going, please consider becoming a sponsor. A huge thank you to all our current supporters!
🚀 What's New in v4.0.1
🛠️ Bug Fixes & Stability Improvements
PointerTracker TimerProxy Safety: Fixed NullPointerException on TimerProxy.startTypingStateTimer by defensively defaulting static sTimerProxy to TimerProxy.NULL and guarding accesses when proxy map references are cleared during view teardowns or transitions.
Dynamic InputConnection & Long Press Fix: Fixed issue where re-opening the keyboard in Launcher or search fields dropped character input and long-press popup key selections by dynamically fetching the live system InputConnection.
We are committed to making our apps as powerful and polished as possible. As an entirely community-funded project, we rely on your support to keep going, please consider becoming a sponsor. A huge thank you to all our current supporters!
🚀 What's New in v4.0.0
🛠️ Bug Fixes & Major Stability Hardening
Native JNI Protection: Added isValidDictionary() guards and exception handling around BinaryDictionary JNI calls to prevent C++ native crashes from killing the keyboard process.
ANR & Thread Freeze Prevention: Added non-blocking timeouts to CountDownLatch.await() in backup/restore, file copy, and secondary dictionary lookup paths.
Gesture Index Thread Storm Fix: Switched gesture index building to managed KEYBOARD executor pool with atomic state tracking, eliminating CPU spikes and thread proliferation.
Memory & View Leak Fixes: Cleared static proxy references in PointerTracker.clearOldViewData(), enabled largeHeap, and trimmed memory when UI is hidden to fix OOMs on high-DPI devices.
PointerTracker & Settings Safety: Fixed NPEs during rapid view switches and made Settings.getValues() null-safe during layout inflation.
Screenshot Scanner Optimization: Replaced active background ContentObserver with an on-demand check to eliminate background CPU wakeups while typing.
Regional Dictionary Fallback & Aggregation: Aggregated main and emoji dictionaries across variant and language fallback directories (en-IN -> en) and fixed regional main dictionary variant detection.
Emoji Dictionary Persistence: Fixed issue where emoji_*.dict files failed to be recognized after downloading, and added preference tracking to prevent dictionary deletion on upgrade.
🤖 AI Enhancements
Proofread Anti-Answering Guard: Prevented models (Qwen, Llama) from expanding prompts into multi-paragraph answers during proofreading.
Clean Translation Output: Automatically strips section headers (Translated text:) and trailing reasoning/thinking blocks from translation outputs.
🌟 UI & Keyboard Improvements
First-Word Prediction Toggle: Added user setting to enable or disable suggestions for the first word in a text field.
Hardware Keyboard Mode: Added option to show only the toolbar when a physical keyboard is connected.
Toolbar Key Spacing: Added equal key distribution for unscrollable expanded and dual toolbars.
Thai Word Segmentation: Preserved Thai word boundaries and segmentation behavior when using text expansion.
We are committed to making our apps as powerful and polished as possible. As an entirely community-funded project, we rely on your support to keep going, please consider becoming a sponsor. A huge thank you to all our current supporters!
Note
Its beta3 even though it says beta2 ,
Also the version code accidently changed to 4001 on beta2, the stable version would be 4000 so if you can't downgrade you might need to backup and restore
If there is no crash reported, ill release the v4.0.0 stable today itself, since other users still downloading buggy v3.9.9
🚀 What's New
🛠️ Bug Fixes & Stability
PointerTracker Crash Fix: Fixed NullPointerException during rapid view switches and keyboard mode changes.
Settings Initialization Safety: Made Settings.getValues() null-safe to auto-load settings during layout inflation, preventing InflateException crashes.
Emoji Dictionary Detection & Persistence: Fixed issue where emoji_*.dict files failed to be recognized after downloading. Added preference tracking to prevent emoji and custom dictionaries from being wiped on app upgrade or cache cleanup.
Regional Locale Dictionary Aggregation: Resolved issue where regional locales (e.g. English (India) / en-IN) only displayed the emoji dictionary tab by aggregating main and emoji dictionaries across variant and language fallback directories (en-US, en).
⚡ Performance & Battery Optimization
On-Demand Screenshot Scanning: Replaced continuous background MediaStore ContentObserver callbacks with an on-demand background query when input starts, eliminating unnecessary CPU wakeups while typing.
We are committed to making our apps as powerful and polished as possible. As an entirely community-funded project, we rely on your support to keep going, please consider becoming a sponsor. A huge thank you to all our current supporters!
🚀 What's New
🛠️ Bug Fixes & Stability
Memory & Crash Fix: Fixed OutOfMemoryError crashes on high-DPI Android 16 devices by enabling largeHeap and trimming memory when UI is hidden.
Multilingual ANR Fix: Prevented deadlock hangs during secondary dictionary lookups.
Clipboard & Threading: Optimized thread pooling and scoped MediaStore observers to keyboard visibility.
🤖 AI Enhancements
Proofread Anti-Answering Guard: Prevented models (Qwen, Llama) from turning questions into multi-paragraph essays during proofreading.
Clean Translation Parser: Automatically strips section headers (Translated text:) and trailing reasoning blocks from translation outputs.
🌟 UI & Keyboard Improvements
Hardware Keyboard Mode: Added setting to show only the toolbar when a physical keyboard is connected.
Toolbar Key Spacing: Added equal key distribution for unscrollable expanded and dual toolbars.
We are committed to making our apps as powerful and polished as possible. As an entirely community-funded project, we rely on your support to keep going, please consider becoming a sponsor. A huge thank you to all our current supporters!
🚀 What's New
🛠️ Bug Fixes & Stability
Battery & Threading Fix: Resolved a critical battery drain issue during fallback gesture typing by preventing redundant background threads from building the gesture index simultaneously.
Regional Dictionary Fallback: Fixed an issue where regional/variant main dictionaries (like Persian fa_IR) were downloaded but not detected by language-only keyboard layouts (like fa).
Floating Mode Selection Fix: Fixed text selection and deletion issues (including selection retrieval via getSelectedText) when the IME window is hidden in floating mode.
Backspace Selection Priority: Corrected the deletion priority of selected text when pressing backspace.
🌟 Features & Improvements
First-Word Suggestion Toggle: Added a user setting toggle to enable or disable suggestions for the first word in a text field.
Thai Word Segmentation: Preserved Thai word boundaries and segmentation behavior when using text expansion.
Toolbar Pref Update: Quick pin toolbar is now disabled by default to keep the interface clean out-of-the-box.
Documentation & Flavor Clarifications: Added explicit handwriting support notes for the standardfull flavor.
We are committed to making our apps as powerful and polished as possible. As an entirely community-funded project, we rely on your support to keep going, please consider becoming a sponsor. A huge thank you to all our current supporters!
🚀 What's New
🛠️ Crashes & ANR Fixes
Native JNI SIGABRT Fix: Fixed a native crash in the LatinIME keyboard library (libjni_latinime.so) caused by thread-unsafe memory access during dictionary word iteration.
Gesture Indexer ANR Fix: Prevented keyboard freezes and Application Not Responding (ANR) errors by running the fallback Java gesture indexer asynchronously on a background thread instead of blocking the main thread.
Asynchronous Dictionary Cleanup: Moved dictionary closing and cleanup to a background coroutine to prevent the main thread from blocking on JNI write locks when switching languages.
📖 Dictionary Preservation on Upgrade
Manual Import Preservation: Stopped the app from deleting manually imported or replaced custom dictionaries during version upgrades.
We are committed to making our apps as powerful and polished as possible. As an entirely community-funded project, we rely on your support to keep going, please consider becoming a sponsor. A huge thank you to all our current supporters!
🚀 What's New
🛠️ Kotlin Gesture Engine Clean Up
Removed Experimental Kotlin Engine: Fully removed the experimental Kotlin gesture typing engine (SwipeGestureEngineKotlin.kt), its settings (advanced toggle), its keycode (GESTURE_DEEP_SEARCH), and associated icons/resource strings.
🎨 User Interface & Split Toolbar
Translation Selector Fix: Fixed the target language list collapsing or showing only the close button in split/dual toolbar mode.
Top Toolbar Visibility: Kept the top toolbar row fully visible when expanding the translation target language selector in split toolbar mode.
⚙️ Database & Reliability
Restore SQLite DB Fix: Fixed database restore lockup and write crash (SQLITE_READONLY_DBMOVED) by closing helpers and active Room connections before deleting the database.
Native Dictionary SIGSEGV Fix: Prevented a native SIGSEGV crash during dictionary traversal by holding the read lock for the entire traversal duration.
⚡ Welcome Wizard & Setup
Wizard Crash Fix: Fixed a ConcurrentModificationException crash during step 3 of the Welcome Wizard when disabling/mutating enabled subtypes.
Default Gesture Engine: Changed the default gesture typing engine to "fallback" (pure Java engine) consistently so that it works out of the box, rather than attempting to load "native" when not configured.
We are committed to making our apps as powerful and polished as possible. As an entirely community-funded project, we rely on your support to keep going, please consider becoming a sponsor. A huge thank you to all our current supporters!
Notes : you can expect another build today itself
🚀 What's New
🛠️ Compatibility & Reproducible Builds
F-Droid Reproducible Build Fix: Forced android.enableR8.fullMode to false in settings.gradle to resolve compiler output differences between build environments, ensuring consistent build hashes.
⚡ Performance & Focus Latency
Android 17 Startup Optimization: Resolved IME startup and focus latency on Android 17 by caching layouts and state settings, bypassing redundant settings reloads.
🎨 User Interface & Styling
Themed Translation Bar Layout: Styled button layouts for the horizontal language selector bar and aligned text colors with standard key themes for higher contrast. Fixed horizontal width constraint that pushed the close button off-screen.
Toolbar Swipe-to-Dismiss: Added support for swiping to close/dismiss the toolbar.
Sorted Translation Target Languages: Sorted the translation language selector dynamically to show last used target languages first.
📖 Language & Corrective Dictionaries
Turkish Case-Folding Blacklist Fix: Fixed Turkish word blacklist filtering by processing case-folding logic using the Turkish locale directly, correctly treating dotless ı and dotted i as independent characters.
Dictionary Upgrade & Protection: Added support for in-app dictionary upgrades and protected user-downloaded dictionaries from accidental deletion.
Multilingual Settings Visibility: Fixed the multilingual settings option to show when at least one secondary language/layout is enabled.
Immediate Download Status Refresh: Ensured the dictionary installation status refreshes immediately after downloading from the missing dictionary dialog.
We are committed to making our apps as powerful and polished as possible. As an entirely community-funded project, we rely on your support to keep going, please consider becoming a sponsor. A huge thank you to all our current supporters!
🚀 What's New
🎨 Customization & Appearance
System Emoji Font Toggle: Added a new setting under Appearance settings to use your system's custom emoji font (respects custom emoji modules like Magisk) in the app UI, settings, and search input fields instead of forcing the default compatibility emoji font.
App Language Preference: Added a setting under Preferences to select LeanType's display language independent of the overall Android system language.
⌨️ Layouts & Keyboard Behavior
Multi-Row Number Rows: Added layout support for multi-row number row configurations.
Language Key Switch: Fixed direct IME switch targeting when mapping actions to the language key.
Gesture Typing Default: Gesture typing is now disabled by default.
⚡ Performance & Spellchecking
Spellcheck Optimizations: Improved spellcheck performance by adding cache lookups, personal dictionary validation, and optimizing regex matching.
We are committed to making our apps as powerful and polished as possible. As an entirely community-funded project, we rely on your support to keep going, please consider becoming a sponsor. A huge thank you to all our current supporters!
🚀 What's New
⌨️ Input Method & Keyboard Switching (buggy for now)
Direct Switch Target IME: Added a new settings preference to configure a target input method (and subtype) to switch to directly.
Custom Switching Keycode: Added a new custom keycode -10076 (SWITCH_TO_USER_IME) that can be mapped to any toolbar key (either click or long-press) to trigger the direct IME switch immediately without showing the system picker.
🎨 Custom Layouts & Navigation
Custom Layout Persistence: Track the active custom layout index to ensure that custom layouts are correctly restored after switching between alphabet/symbols or after device orientation changes.
Shift Key Behavior: Improved shift key press and release tracking for custom layout states.
🛠️ Bug Fixes & Toggles
Toggles & Settings: Added some toggles for more customization