Skip to content

merge: sync LeanBitLab v3.9.5#118

Merged
AsafMah merged 81 commits into
devfrom
merge/upstream-v3.9.3
Jul 12, 2026
Merged

merge: sync LeanBitLab v3.9.5#118
AsafMah merged 81 commits into
devfrom
merge/upstream-v3.9.3

Conversation

@AsafMah

@AsafMah AsafMah commented Jul 8, 2026

Copy link
Copy Markdown
Owner

Summary

This updates the existing upstream-sync PR to merge LeanBitLab/LeanType v3.9.5 into LeanTypeDual, pinned at release tag commit 8cfe7f1fc and including the still-unmerged v3.9.3/v3.9.4 syncs.

The v3.9.5 delta adds direct switching to a configured IME/subtype, persistent custom-layout state, a multi-word suggestion filter, and the v3.9.5 release notes. LeanTypeDual's fork identity remains unchanged: application id com.asafmah.leantypedual, version 3.10.0 / 4000, and no network permission in offline/offlinelite builds.

Integration notes

  • Kept LeanTypeDual version, application id, branding, privacy tiers, and fork-specific settings/features.
  • Preserved the prior v3.9.3/v3.9.4 conflict resolutions and the fallback suggestion-casing fix already on this PR.
  • Adopted upstream v3.9.5's canonical custom-layout codes CUSTOM1..CUSTOM5 = -10081..-10085 and direct-switch code SWITCH_TO_USER_IME = -10076 after auditing the entire fork KeyCode table for collisions.
  • The global KeySpecParserTest.keyCodeValuesAreUnique regression passes with those values.
  • Reviewed Mergiraf's README/FEATURES resolutions; direct-IME and custom-layout documentation was added once while retaining the fork feature guide.
  • Centralized all three multi-word filtering paths onto one tested helper.
  • Updated the Unreleased changelog with one cumulative ### Upstream marker for v3.9.5 (including v3.9.3/v3.9.4).

Independent review follow-up

A high-effort independent review completed and raised custom-layout persistence and missing coverage concerns. Code ownership inspection showed savedKeyboardState and lastCustomIndex share the same persistent KeyboardState instance; a real lifecycle regression test now locks that behavior down. The temporary -10100..-10104 values existed only on this still-unmerged PR, so no released-user migration is required when adopting v3.9.5's canonical values.

Added focused coverage for:

  • CUSTOM2 → symbols → save/load → alphabet restoring CUSTOM2
  • direct IME empty/missing no-op
  • external IME absent/invalid subtype fallback through switchInputMethod(id)
  • valid external IME + subtype switching
  • same-IME internal subtype selection
  • enabled/disabled multi-word suggestion filtering shared by normal, gesture, and next-word paths
  • full-suite-safe shared IMM shadow fixtures with per-test reset

The review follow-up request timed out, and a bounded fallback reviewer was unavailable/cancelled; the concrete findings from the completed review were nevertheless investigated and covered by passing regression tests.

Verification

Compile gates:

./gradlew.bat compileOfflineRunTestsKotlin --no-daemon --console=plain
BUILD SUCCESSFUL

./gradlew.bat compileStandardRunTestsKotlin compileStandardfullRunTestsKotlin compileOfflineliteRunTestsKotlin --no-daemon --console=plain
BUILD SUCCESSFUL

Focused regressions:

KeyboardStateTest
DirectImeSwitchTest
SuggestTest.multi-word filter removes phrases only when enabled
KeySpecParserTest.keyCodeValuesAreUnique

All focused tests pass, both alone and in the full suite.

Offline unit differential:

./gradlew.bat :app:testOfflineDebugUnitTest --continue --no-daemon --console=plain
Branch Tests Failed Skipped
pre-v3.9.5 PR baseline f09e33591 278 11 1
v3.9.5 updated merge 284 12 1

All 11 baseline failing names remain unchanged. The additional failure is XLinkTest.knownDictionaries, where an unchanged randomized external Codeberg URL (main_bn_bd.dict) currently returns 404; the asset/test source is identical on baseline and current. The six new behavioral tests pass.

Permission check:

app/src/standard/AndroidManifest.xml: android.permission.INTERNET
app/src/standardfull/AndroidManifest.xml: android.permission.INTERNET

No INTERNET permission is present in offline/offlinelite manifests.

github-actions Bot and others added 30 commits July 4, 2026 03:21
@AsafMah AsafMah changed the title merge: sync LeanBitLab v3.9.3 merge: sync LeanBitLab v3.9.4 Jul 10, 2026
@AsafMah AsafMah changed the title merge: sync LeanBitLab v3.9.4 merge: sync LeanBitLab v3.9.5 Jul 12, 2026
@AsafMah
AsafMah merged commit 7e09f3e into dev Jul 12, 2026
1 check passed
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