Skip to content

merge: sync LeanBitLab v3.9.9#122

Open
AsafMah wants to merge 37 commits into
devfrom
merge/upstream-v3.9.9
Open

merge: sync LeanBitLab v3.9.9#122
AsafMah wants to merge 37 commits into
devfrom
merge/upstream-v3.9.9

Conversation

@AsafMah

@AsafMah AsafMah commented Jul 17, 2026

Copy link
Copy Markdown
Owner

Summary

Merge the pinned LeanBitLab/LeanType v3.9.9 release (adb7c3755) into LeanTypeDual without pulling the eight newer upstream/main commits that already belong to v4.0.0-beta1.

The update adds system-emoji and app-language settings, multi-row number rows, toolbar swipe-to-dismiss, translation and spellcheck improvements, asynchronous fallback-gesture indexing, dictionary upgrade preservation, and native dictionary crash/ANR fixes. LeanTypeDual's identity, privacy flavors, toolbar/two-thumb features, badges, screenshots, and Fastlane release history remain fork-owned.

Fixes #121.

Merge decisions

  • Kept com.asafmah.leantypedual, version 3.10.0 / code 4000, compileSdk 36, and targetSdk 35.
  • Combined upstream swipe-down dismissal with the fork's toolbar auto-show/hide and hardware-keyboard settings.
  • Accepted the upstream fallback-gesture default and translation-language history resolution after auditing Mergiraf output.
  • Removed an auto-merged duplicate AndroidX Startup provider while retaining both WorkManager and EmojiCompat initializer removals.
  • Excluded LeanBitLab Fastlane changelogs, screenshots, and live badge assets; retained technical upstream release-note documents.

Reliability fixes found during integration

  • Use APK asset / paths instead of host File.separator for dictionary upgrade/extraction, with red-to-green behavior coverage.
  • Preserve upstream's legacy-first direct-IME switching order while making pre-Android-9 no-token paths safe no-ops; SDK-27 and modern direct-switch tests pass.
  • Release main-dictionary load waiters in finally on failure.
  • Make parallel multilingual suggestion workers snapshot-consistent, isolate mutable JNI weight arrays, omit/log failed secondary locales, and always release their latch; failure-path tests prove primary results return instead of hanging.
  • Clear file-global InputLogic shadow-handler queues between scenarios to remove full-suite order leakage.

Verification

  • All flavor gates pass: compileOfflineRunTestsKotlin, compileOfflineliteRunTestsKotlin, compileStandardRunTestsKotlin, and compileStandardfullRunTestsKotlin.
  • Final full Offline debug suite: 294 tests, 11 failed, 1 skipped; failing names exactly match the origin/dev baseline (284 tests, 11 failed, 1 skipped). All ten added tests pass.
  • Final Offline runTests suite: 294 tests, 4 failed, 1 skipped; the same four environment-dependent parser failures as the origin/dev baseline (284 tests, 4 failed, 1 skipped).
  • Merged manifests retain the expected LeanTypeDual IDs and version, exactly one AndroidX Startup provider, and INTERNET only in Standard/Standard Full.
  • High-effort independent review completed; its missing-final-suite evidence finding was resolved with the post-fix full debug run.
  • GitHub Actions Unit tests run #29598368167 passes for merge commit 8cc6ebe62.

Known test-harness note

The merged full suites can print Robolectric DefaultDispatcher-worker teardown warnings without adding test failures. Temporary labeled handlers on both changed dictionary scopes caught no exception, and a RichInputMethodManager diagnostic changed teardown scheduling without reporting a scoped error. No diagnostic handlers are retained.

Release sequencing

Draft release PR #120 remains based on pre-v3.9.9 dev and separately changes ImeCompat, LatinIME, and Suggest. Merge this PR into dev first; then reconcile/update #120 so LeanTypeDual 3.11.0 contains v3.9.9 plus the verified lowercase suggestion fix without duplicating integration history.

github-actions Bot and others added 30 commits July 12, 2026 02:56
github-actions Bot and others added 7 commits July 16, 2026 02:45
- synchronize JNI dictionary iteration to prevent memory corruption

- make fallback gesture indexer build asynchronously to prevent UI freeze

- check asset extraction markers and size to preserve manual imports
- move dictionary cleanup out of main thread to prevent UI freeze during language switches
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.

2 participants