Skip to content

Release 0.0.7-beta.1: nine-key pre-edit letters, rail fixes, full emoji and symbols, toolchain bump - #131

Merged
Slacker-LLC merged 13 commits into
mainfrom
feat/beta7
Oct 5, 2026
Merged

Slacker-LLC merged 13 commits into
mainfrom
feat/beta7

Conversation

@Slacker-LLC

@Slacker-LLC Slacker-LLC commented Oct 5, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • Nine-key pre-edit is always letters. It fell back to the raw digits whenever no word read every digit (669, or a long string whose top candidate covers only its start). The local decoder now spells any digits (spellDigits: whole syllables, the start of an unfinished one), and alignment to Rime's top candidate (readingForPrefix) takes its characters as far as they fit by full reading, cut reading or initial (669 → 模型 → mo'x), then spells the rest.
  • Tapping a bare initial in the nine-key rail works: it is fixed like a syllable, so candidates start with it (6 → m → 没). Before, the pre-edit snapped back to Rime's top candidate.
  • Symbol rails (nine-key, stroke, numeric) are one panel with hairlines, faded edges and flat items, three to the rail; the editor cell is a circled plus.
  • Nine-key action column: 删除 · 重输 · 0 · 确定.
  • Emoji: Unicode 18.0's base emoji (scripts/generate_emoji_catalog.py → assets/emoji/unicode_emoji.tsv), curated order kept, filtered by what the font can draw, loaded in the background.
  • Symbols: SymbolCatalog adds Chinese marks, special signs, ~100 kaomoji and new 拼音 / 日文 / 注音 / 制表 categories; long items (kaomoji) get three wide cells instead of being cut off.
  • Icons: the keyboard switcher's five icons share the toolbar keyboard's frame; tile icons are 28dp on both tile pages.
  • Switches on iOS geometry: a 51×31 track with a 27 knob, 2dp from every edge whether on or off; a soft shadow; the knob stretches while pressed. Fuzzy per-pair switches that are off no longer show a blue track in dark mode.
  • New brand mark: "IME" on a white tile, with the I drawn as a blue text cursor. The same mark is used for the launcher icon (at 3/4 scale inside the mask), the in-app header, the splash screen and the README images, plus a monochrome layer for themed icons.
  • One grid for preferences and home:
    • Icons are centred on their row.
    • 音效 / 震动手感 / 震动强度 nest under their switch instead of repeating its icon.
    • Switches, chevron glyphs and buttons end on the 16dp line.
    • Slider tracks span the text column.
    • Row padding is even.
    • Hairlines start on the text of the row above.
    • Home step marks, the voice icon and the ready mark are all 32dp.
    • PreferencesGeometryInstrumentedTest pins these rules on the preferences and fuzzy pages.
  • Toolchain (Dependabot build: bump the gradle-minor-and-patch group across 2 directories with 5 updates #128): Gradle 8.14.5, AGP 8.13.2, Kotlin 2.4.20, androidx.test 1.3/1.7. The new GestureBackNavigation lint is suppressed with a reason on the three activities that already register OnBackInvokedCallback on 33+.
  • Version 0.0.7-beta.1 (versionCode 701), CHANGELOG and NINE_KEY_REFERENCE updated.

Test plan

  • Unit tests (incl. 3000 random digit strings always spelled with letters, alignment cases, emoji/symbol catalogs) and lint
  • Full instrumented suite on the API 36 emulator (132 tests, rerunning on the final head)
  • scripts/typing_stress_e2e.py, new cases: nine-key pre-edit never shows digits, every rail reading responds (1–18 digits), symbol panel (13 categories), emoji, rail + 0, candidate expand, swipe-up clear, landscape, dark mode

🤖 Generated with Claude Code

dependabot Bot and others added 13 commits October 5, 2026 02:27
…h 5 updates

Bumps the gradle-minor-and-patch group with 5 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| com.android.application | `8.7.3` | `8.13.2` |
| [org.jetbrains.kotlin.android](https://github.com/JetBrains/kotlin) | `2.1.0` | `2.4.20` |
| androidx.test.ext:junit | `1.2.1` | `1.3.0` |
| androidx.test:runner | `1.6.2` | `1.7.0` |
| [gradle-wrapper](https://github.com/gradle/gradle) | `8.11.1` | `8.14.5` |

Bumps the gradle-minor-and-patch group with 2 updates in the /app directory: androidx.test.ext:junit and androidx.test:runner.


Updates `com.android.application` from 8.7.3 to 8.13.2

Updates `org.jetbrains.kotlin.android` from 2.1.0 to 2.4.20
- [Release notes](https://github.com/JetBrains/kotlin/releases)
- [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md)
- [Commits](JetBrains/kotlin@v2.1.0...v2.4.20)

Updates `androidx.test.ext:junit` from 1.2.1 to 1.3.0

Updates `androidx.test:runner` from 1.6.2 to 1.7.0

Updates `gradle-wrapper` from 8.11.1 to 8.14.5
- [Release notes](https://github.com/gradle/gradle/releases)
- [Commits](gradle/gradle@v8.11.1...v8.14.5)

Updates `androidx.test.ext:junit` from 1.2.1 to 1.3.0

Updates `androidx.test:runner` from 1.6.2 to 1.7.0

---
updated-dependencies:
- dependency-name: com.android.application
  dependency-version: 8.13.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gradle-minor-and-patch
- dependency-name: org.jetbrains.kotlin.android
  dependency-version: 2.4.20
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gradle-minor-and-patch
- dependency-name: androidx.test.ext:junit
  dependency-version: 1.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gradle-minor-and-patch
- dependency-name: androidx.test:runner
  dependency-version: 1.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gradle-minor-and-patch
- dependency-name: gradle-wrapper
  dependency-version: 8.14.5
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gradle-minor-and-patch
- dependency-name: androidx.test.ext:junit
  dependency-version: 1.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gradle-minor-and-patch
- dependency-name: androidx.test:runner
  dependency-version: 1.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gradle-minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
…a choice

The pre-edit fell back to the raw digits whenever no word read every digit
(669, or a long string whose top candidate covers only its start). The
local decoder now spells any digits with letters (whole syllables, the
start of an unfinished one), and alignment to Rime's top candidate takes
its characters as far as they fit, by full reading, cut reading or
initial (669 -> 模型 as mo'x), and spells the rest.

Tapping a bare initial (m, n ...) in the left rail only showed it: Rime
still read the digit and the pre-edit snapped back (6 -> o). It is now
fixed like a syllable, so the candidates start with it (m -> 没).

Also: the new AGP's GestureBackNavigation lint is suppressed on the
three activities that already register OnBackInvokedCallback on 33+.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… responds

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…full emoji; more symbols

- Symbol rails are one panel with hairlines and flat items, cells 3.5 to
  the rail so the next one peeks out, edges fade; the editor cell is a
  circled plus icon.
- Nine-key action column: 删除 · 重输 · 0 · 确定.
- Symbol categories with long items (kaomoji) use three wide cells and a
  smaller size; five narrow cells cut them off.
- Emoji panel: curated order plus the rest of Unicode 18.0's base emoji
  (scripts/generate_emoji_catalog.py -> assets/emoji/unicode_emoji.tsv),
  filtered by what the font can draw, loaded in the background.
- SymbolCatalog: more Chinese marks, special signs and ~100 kaomoji, and
  new 拼音 / 日文 / 注音 / 制表 categories.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…le pages

Every keyboard icon is the toolbar keyboard's frame with what that
keyboard shows inside (rows, 3x3 keys, 一丨丿, Aa, 123).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…r, landscape, dark

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… recents test

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…their state

The track drawable replaced the switch's 2dp side padding (InsetDrawable
pads its view), so the knob sat 0 from the left when off and 4 from the
right when on. The track no longer pads; the knob's travel comes from
the laid-out pixels; sizes follow iOS (51x31 track, 27 knob, 2 on every
side); the knob has a soft shadow and stretches toward its travel while
pressed. The theme looked up 模糊音 pairs by label in a table that
answered true for anything unknown, so every pair's track was blue.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
One mark for the launcher, the in-app header, the splash screen and the
README images, plus a monochrome layer for themed icons. The launcher
layer draws the mark at 3/4 scale so it sits like the system icons inside
the 72dp mask.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Icons centre on their row; 音效, 震动手感 and 震动强度 nest under their
switch instead of repeating its icon; switches, chevron glyphs and buttons
end on the 16dp line; slider tracks span the text column; row padding is
even. Home step marks, the voice icon and the ready mark are all 32dp so
the cards share one text column. A geometry test pins the rules.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Icon-less rows (the fuzzy rules) had hairlines inset for an icon they do
not have. The geometry test now walks the fuzzy page too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Slacker-LLC
Slacker-LLC merged commit 459a861 into main Oct 5, 2026
7 checks passed
@Slacker-LLC
Slacker-LLC deleted the feat/beta7 branch October 5, 2026 16:39
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