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
Aggressive Google Play Protect Flagging: On modern Android (Android 14, 15, and 16 / SDK 36), Google Play Protect applies aggressive install-time heuristics against sideloaded Input Method Editors (IMEs). Combining BIND_INPUT_METHOD with REQUEST_INSTALL_PACKAGES and SYSTEM_ALERT_WINDOW triggers automated threat detection:
Play Protect rejects the install session (INSTALL_FAILED_VERIFICATION_FAILURE, code -22).
The Android 16 system PackageInstaller abruptly crashes or dismisses without rendering an error message.
Current Implementation: FloatingKeyboardManager currently creates a standalone TYPE_APPLICATION_OVERLAY window, which mandates android.permission.SYSTEM_ALERT_WINDOW.
Target Implementation: Migrate to the standard Android IME architecture:
Render the floating keyboard within the IME's native TYPE_INPUT_METHOD window.
Use InputMethodService.onComputeInsets() with TOUCHABLE_INSETS_REGION to define touch boundaries, passing all touches outside the floating keyboard directly to the underlying app.
Result: Complete removal of SYSTEM_ALERT_WINDOW. The floating keyboard will function out of the box with zero permissions required in system settings.
User Migration Impact
Seamless transition: Both standard and standardfull share the exact same package name (com.leanbitlab.leantype) and signing key.
Existing standardfull users will be able to update directly to standard without losing any settings, themes, or personal dictionaries.
The Problem with
REQUEST_INSTALL_PACKAGESBIND_INPUT_METHODwithREQUEST_INSTALL_PACKAGESandSYSTEM_ALERT_WINDOWtriggers automated threat detection:INSTALL_FAILED_VERIFICATION_FAILURE, code-22).PackageInstallerabruptly crashes or dismisses without rendering an error message.Proposed Solution
Phase 1: Consolidate Flavors & Remove
REQUEST_INSTALL_PACKAGESapp/src/standardfull/and theREQUEST_INSTALL_PACKAGESpermission entirely from the project.standardfullfrombuild.gradle.ktsand GitHub Actions release workflows.Phase 2: Migrate Floating Keyboard & Remove
SYSTEM_ALERT_WINDOWFloatingKeyboardManagercurrently creates a standaloneTYPE_APPLICATION_OVERLAYwindow, which mandatesandroid.permission.SYSTEM_ALERT_WINDOW.TYPE_INPUT_METHODwindow.InputMethodService.onComputeInsets()withTOUCHABLE_INSETS_REGIONto define touch boundaries, passing all touches outside the floating keyboard directly to the underlying app.SYSTEM_ALERT_WINDOW. The floating keyboard will function out of the box with zero permissions required in system settings.User Migration Impact
standardandstandardfullshare the exact same package name (com.leanbitlab.leantype) and signing key.standardfullusers will be able to update directly tostandardwithout losing any settings, themes, or personal dictionaries.