Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ and this project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html)

## [Unreleased]

## [0.3.0] - 2026-08-20

### Upstream
- Merged **LeanBitLab/LeanType v4.1.2** (pinned at `8720abeb`, covering v4.0.9–v4.1.2, 200 commits) — adds a clipboard edit mode, a personal-dictionary learning threshold, physical-keyboard and suggestion fixes, and Compose localization. LeanTypeDual retains its distinct `applicationId`, fork version, privacy tiers, Java fallback gesture engine, two-thumb typing, and persistent custom layout slots. (#137)

Expand All @@ -25,6 +27,7 @@ and this project uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
### Reliability & testing
- **Dropped both `runTests` skip guards for defects inherited from upstream** — subtype edit persistence and symbol-prefixed regex expansion are both fixed in upstream v4.1.2. Verified twice: on a pristine upstream checkout at the tag, and in the merged tree. Those two tests now actually execute on CI instead of returning early. (#137)
- **Fixed a latent test-harness bug** where `setText` accepted a `requireIdle` parameter it never passed through, so `reset()` could not tolerate leftover delayed messages. Harmless until the merge shifted JUnit's hash-based test ordering, at which point it failed an unrelated backspace test. (#137)
- **Test results are now gated rather than eyeballed** — `tools/check_test_results.py` refuses to report when the results are untrustworthy (any file predating the run, so a Gradle `UP-TO-DATE` task can't pass off a stale green report; or its own enumeration disagreeing with the totals the suites declare). It then diffs failing test *names* against a checked-in baseline and quarantines network-dependent tests so they are never counted as a regression or as a fix. Runs as the authoritative gate in CI. (#139)

## [0.2.0] - 2026-08-06

Expand Down
4 changes: 2 additions & 2 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ android {
applicationId = "com.asafmah.leantypedual"
minSdk = 21
targetSdk = 35
versionCode = 4200
versionName = "0.2.0"
versionCode = 4300
versionName = "0.3.0"

proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")

Expand Down
27 changes: 27 additions & 0 deletions docs/releasenote/release_notes_v0.3.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# LeanTypeDual 0.3.0

Brings the fork up to **LeanBitLab/LeanType v4.1.2**, covering 200 upstream commits from v4.0.9 onwards, plus fixes for two fork features the merge would otherwise have broken.

## Highlights

- **Clipboard edit mode** — edit a clipboard entry in place, with cursor movement driven from the keyboard.
- **Voice recognition language selector** — auto-detect plus 99+ Whisper languages, chosen independently of the typing language.
- **Personal dictionary learning threshold** — decide how many times a word has to be typed before it is added, instead of it being added immediately.
- **Physical keyboard suggestions** — pick a suggestion with a shortcut key when a hardware keyboard is attached.
- **Localized settings** — the Compose settings screens are translated.
- More reliable text-expander regex shortcuts, and a range of emoji and clipboard layout fixes.

## Fixed

- **Held backspace no longer mis-deletes emoji.** The accelerated second deletion measured the character from *before* the first deletion rather than the one it was about to remove, so it could cut a multi-code-point emoji in half. The same defect exists upstream and is reported as `LeanBitLab/LeanType#423`.
- **Whole-word backspace keeps working.** Upstream's fix for a single backspace bulk-deleting numeric sequences would have stopped the two-thumb whole-word delete from clearing the composing span, leaving partial words behind. Both behaviours now coexist.
- **Custom layouts still restore after symbol mode.** Upstream resets the remembered custom layout when switching back to the alphabet, which conflicts with this fork's persistent custom layout slots.

## Under the hood

- Both defects this fork had been carrying from upstream — subtype edit persistence and symbol-prefixed regex expansion — are fixed in v4.1.2, so their CI skip guards are gone and those tests genuinely run again.
- Test-result analysis is now gated by `tools/check_test_results.py`, which refuses to report on stale or self-inconsistent results and diffs failing test names against a checked-in baseline.

## Unchanged

LeanTypeDual keeps its own `applicationId`, its own version line, the privacy tiers (`standard` / `standardfull` / `offline` / `offlinelite`, with network access only in the two standard builds), the Java fallback gesture engine, two-thumb typing, and persistent custom layout slots.
14 changes: 14 additions & 0 deletions fastlane/metadata/android/en-US/changelogs/4300.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
Upstream LeanType v4.1.2 merged in.

New:
• Clipboard entries can be edited in place, with cursor control from the keyboard
• Voice recognition language selector with auto-detect and 99+ Whisper languages
• Personal dictionary learning threshold - choose how many times a word must be typed before it is saved
• Suggestions can be picked with shortcut keys from a connected physical keyboard
• Settings screens are localized

Fixed:
• Held backspace no longer cuts an emoji in half
• Whole-word backspace after a swipe no longer leaves part of the word behind
• Custom layouts still restore after leaving symbol mode
• Text expander regex shortcuts expand more reliably
Loading