Skip to content

Release LeanTypeDual 3.11.0#120

Draft
AsafMah wants to merge 6 commits into
devfrom
chore/release-3.11.0
Draft

Release LeanTypeDual 3.11.0#120
AsafMah wants to merge 6 commits into
devfrom
chore/release-3.11.0

Conversation

@AsafMah

@AsafMah AsafMah commented Jul 12, 2026

Copy link
Copy Markdown
Owner

Upstream integration complete: #122 and #124 are merged into dev; this branch is reconciled through LeanBitLab v4.0.2. Signing and physical-device release gates remain.

Summary

  • Bump LeanTypeDual to 3.11.0 (versionCode 4100) after the pinned LeanBitLab/LeanType v4.0.2 integrations in merge: sync LeanBitLab v3.9.9 #122 and merge: stack LeanBitLab v4.0.2 #124.
  • Add dated changelog, Fastlane metadata, and release notes for direct IME switching, persistent custom layouts, suggestion controls, Java gesture improvements, Text Expander fixes, and dictionary hardening.
  • Refresh the downloadable dictionary catalog to the current repository inventory and fix tools/release.py to read dictionary metadata as UTF-8 on Windows.
  • Fix direct target-IME switching on Android 6–8 by routing through the legacy InputMethodManager APIs, with positive and null-token SDK-27 regressions.
  • Keep ordinary lowercase words such as to, no, and meet lowercase when typing or swiping without Shift, while preserving I, acronyms, mixed-case words, and shifted/locked behavior.

Refs #119.

Verification completed

  • ./gradlew.bat :app:assembleRelease --no-daemon --console=plain — all four variants build successfully.
  • Focused offline-debug regressions pass: KeySpecParserTest, KeyboardStateTest, DirectImeSwitchTest, ImeCompatTest, SuggestTest, SwipeGestureEngineTest, DictionaryGroupTest, and SettingsContainerTest.
  • Capitalization regression suites pass for exact tap/swipe samples, captured OFF/AUTO_SHIFTED/SHIFT_LOCKED modes, I/RJ/iPhone, live-converge behavior, leading punctuation, supplementary-plane letters, and Turkish dotted-I; broader runTests variants of SuggestTest, InputLogicTest, and StringUtilsTest pass.
  • python -m unittest tools.test_release passes.
  • Full Offline debug baseline comparison after v4.0.2 reconciliation: release branch 313 tests / 10 known failures / 1 skipped versus current origin/dev 309 tests / the same 10 failures / 1 skipped.
  • All four release variants rebuild successfully after reconciliation; all remain unsigned and fail apksigner verify as expected until the established signing credentials are supplied.
  • GitHub Actions Unit tests run #30170663607 passes for reconciled commit df47ad044.
  • All 276 dictionary catalog URLs were HEAD-checked: 145 emoji CLDR, 50 experimental, and 81 main; no failures.
  • APK manifests report 3.11.0 / 4100, expected package IDs and minSdk values, and no INTERNET permission in Offline/Offline Lite.
  • High-effort independent cross-model reviews completed. The pre-Android-9 direct-IME, null-token, tap/swipe capitalization, and first-letter Unicode findings were reproduced, fixed, and regression-tested; final assessments had no unresolved correctness blocker.

Hard release gates — do not merge/tag/publish yet

  • Signing identity unavailable: the local keystore.properties contains placeholder credentials, and all four final APKs fail apksigner verify --verbose --print-certs with no release signature. Do not generate a replacement key; obtain the established LeanTypeDual release credentials, rebuild, and confirm the certificate fingerprint.
  • Physical-device smoke unavailable: wireless ADB endpoints for both phone and tablet are offline. Signed APKs must be installed and exercised on both devices before merge/tag/publication.
  • Translation refresh was not applied because Weblate returned a bot-challenge HTML payload instead of the ZIP.
  • Khipro mapping refresh was not applied because the configured upstream touchscreen.json source has been retired (404); the checked-in mapping is unchanged.

Required device smoke

On both phone and tablet with a correctly signed Standard Full APK:

  • Confirm upgrade install succeeds and settings/dictionaries are retained.
  • Enable/select LeanTypeDual and type in a real editor.
  • Verify direct IME switching with both an IME-only target and a target subtype.
  • Verify a custom layout slot survives symbols mode, rotation, and keyboard reload.
  • Toggle multi-word suggestion filtering and verify visible behavior.
  • Verify to, no, and meet remain lowercase for both taps and swipes without Shift; verify shifted and locked gesture casing still produces title case and all caps.
  • Re-run apksigner verify --verbose --print-certs on every release APK and compare the certificate SHA-256 to the established release identity.

After those gates pass: mark this PR ready, merge into dev, promote dev to main, tag v3.11.0, and publish the signed artifacts.

@AsafMah AsafMah mentioned this pull request Jul 12, 2026
14 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant