Skip to content

we might need to combine standard and standardfull flavors into a single standard flavor #530

Description

@LeanBitLab

The Problem with REQUEST_INSTALL_PACKAGES

  • 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.

Proposed Solution

Phase 1: Consolidate Flavors & Remove REQUEST_INSTALL_PACKAGES

  • Delete app/src/standardfull/ and the REQUEST_INSTALL_PACKAGES permission entirely from the project.
  • Remove standardfull from build.gradle.kts and GitHub Actions release workflows.
  • The check for updates and download button still be there

Phase 2: Migrate Floating Keyboard & Remove SYSTEM_ALERT_WINDOW

  • 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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    ChangeSomething you want to change but its not a bug or a new feature

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions