Skip to content

Commit 58bb849

Browse files
committed
fix: label clipboard media tiles
1 parent 31cfa44 commit 58bb849

14 files changed

Lines changed: 257 additions & 37 deletions

File tree

AGENTS.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ and sourced reasoning; mine them for *why*, but pick the next task from
1818
`ROADMAP.md`.
1919

2020
1. [`PROJECT_CONTEXT.md`](PROJECT_CONTEXT.md) — single-page consolidated
21-
project context. Pins the load-bearing invariants, current v1.8.237
21+
project context. Pins the load-bearing invariants, current v1.8.238
2222
stack, the module layout, roadmap-file routing, and current source-of-truth
2323
state.
2424
2. [`ARCHITECTURE.md`](ARCHITECTURE.md) — contributor-facing module,
@@ -91,7 +91,7 @@ evidence. A matching `fastlane/metadata/android/en-US/changelogs/<versionCode>.t
9191

9292
`gradle.properties` `projectVersionCode` + `projectVersionName` bump in lockstep
9393
with the changelog commit. Tag the release commit at the same time
94-
(`git push --tags`). HEAD is `v1.8.237` (versionCode 2037) as of 2026-06-04.
94+
(`git push --tags`). HEAD is `v1.8.238` (versionCode 2038) as of 2026-06-04.
9595

9696
### 5. Definition of Done (per [ROADMAP.md](ROADMAP.md) §15)
9797

ARCHITECTURE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# SwiftFloris Architecture
22

3-
Last updated: 2026-06-04, against the v1.8.237 codebase.
3+
Last updated: 2026-06-04, against the v1.8.238 codebase.
44

55
This file is the fast architectural map for contributors. It is intentionally
66
shorter than `ROADMAP.md` and more code-oriented than `PROJECT_CONTEXT.md`.

CHANGELOG.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,48 @@
22

33
All SwiftFloris release history is consolidated here. This replaces the former root-level `RELEASE_NOTES_v*.md` file-per-release pattern.
44

5+
<a id="v1.8.238"></a>
6+
## v1.8.238
7+
8+
Released: 2026-06-04
9+
10+
### Clipboard media accessibility
11+
12+
R4-2 is closed. Clipboard image and video history tiles now expose localized TalkBack labels with the media type, Pinned/Recent/Other group context when shown, and copied-time context, while thumbnail and video overlay icons remain decorative.
13+
14+
### Changes
15+
16+
- **`ClipboardInputLayout.kt`** - adds media-specific accessibility descriptions for clipboard image/video tiles, threads Pinned/Recent/Other group context into the grid item renderer, and keeps thumbnail/video overlay icons `contentDescription = null`.
17+
- **`strings.xml`** - adds localized clipboard image/video media labels and media-item accessibility templates with and without history group context.
18+
- **`ClipboardMediaAccessibilityTest.kt`** - adds JUnit/Robolectric coverage for media-kind classification, real resource strings, and source-level semantics/decorative-overlay wiring.
19+
- **`docs/ACCESSIBILITY.md`** - adds clipboard media history to the manual TalkBack QA checklist.
20+
- **`README.md` / `PROJECT_CONTEXT.md` / `AGENTS.md` / `ARCHITECTURE.md` / `ROADMAP.md` / `COMPLETED.md` / `RESEARCH_REPORT.md` / `gradle.properties` / fastlane metadata** - advances the release marker to v1.8.238 / versionCode 2038 and closes R4-2.
21+
22+
### Verification
23+
24+
- `cmd /c ".\gradlew.bat --no-daemon --no-parallel --max-workers=1 -Dorg.gradle.jvmargs=-Xmx1536m -Dkotlin.daemon.jvm.options=-Xmx1536m :app:testDebugUnitTest --tests dev.patrickgold.florisboard.ime.clipboard.ClipboardMediaAccessibilityTest"` - PASS in 1m33s after making the new `@StringRes` annotation targets explicit.
25+
- Initial focused run passed in 4m47s but exposed new Kotlin annotation-target warnings from the first enum annotation form; those warnings were removed before the final focused run.
26+
- `git diff --check` - PASS.
27+
- `bash scripts/check-fastlane-metadata.sh` - PASS for versionCode 2038.
28+
- APK assembly and manual clipboard TalkBack smoke were intentionally skipped in this local batch per operator request to avoid repeated heavy Android builds.
29+
30+
### Files Touched
31+
32+
- `AGENTS.md`
33+
- `ARCHITECTURE.md`
34+
- `CHANGELOG.md`
35+
- `COMPLETED.md`
36+
- `PROJECT_CONTEXT.md`
37+
- `README.md`
38+
- `RESEARCH_REPORT.md`
39+
- `ROADMAP.md`
40+
- `app/src/main/kotlin/dev/patrickgold/florisboard/ime/clipboard/ClipboardInputLayout.kt`
41+
- `app/src/main/res/values/strings.xml`
42+
- `app/src/test/kotlin/dev/patrickgold/florisboard/ime/clipboard/ClipboardMediaAccessibilityTest.kt` (new)
43+
- `docs/ACCESSIBILITY.md`
44+
- `fastlane/metadata/android/en-US/changelogs/2038.txt` (new)
45+
- `gradle.properties` (versionCode 2037->2038, versionName 1.8.237->1.8.238)
46+
547
<a id="v1.8.237"></a>
648
## v1.8.237
749

COMPLETED.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ Consolidated from the archived open-work checklist (closed items). Full per-rele
7676
- [x] RA-4 (P2) — Settings search now has TalkBack-oriented field labels/state, polite result-status live regions, merged button-role result labels, focused accessibility contract coverage, and manual QA checklist coverage. Shipped v1.8.235. — *Source: ROADMAP.md Researcher Queue Cycle 1.*
7777
- [x] R9-1 (P2) — Suggestion candidate generation now snapshots request-scoped incognito, no-personalized-learning/editor sensitivity, suggestion enabled, offensive-content, and emoji-count inputs before async provider, trace, and ghost-text work begins. Shipped v1.8.236. — *Source: ROADMAP.md Researcher Queue Cycle 9.*
7878
- [x] RA-9 (P2) — Settings search destination highlights now consume the process-wide target once into local screen state, expose a close action, and do not reappear on later visits without a new search. Shipped v1.8.237. — *Source: ROADMAP.md Researcher Queue Cycle 1.*
79+
- [x] R4-2 (P3) — Clipboard image/video history tiles now expose localized TalkBack labels with media type, history group, and copied-time context while keeping thumbnail/video overlay icons decorative. Shipped v1.8.238. — *Source: ROADMAP.md Researcher Queue Cycle 4.*
7980
- [x] F1, F2, F15, F16, F17, F19, F20, F25, F26, F32, F34, F35, F36, F41, F42, EI8, EI11, EI4 (doc) — Closed across v1.8.174 -> v1.8.187. — *Source: TODO_2026-06-03.md*
8081
- [x] IMPROVEMENT_PLAN Workstreams 1, 3, 4, 5, 6 complete; Workstream 2 (lint) monotonically decreasing. — *Source: IMPROVEMENT_PLAN_2026-05-18.md*
8182

PROJECT_CONTEXT.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
**Maintained at root for fast onboarding.**
44
**Last consolidated:** 2026-06-04 (from the autonomous research run at
55
[`.ai/research/2026-05-17/`](.ai/research/2026-05-17/) plus follow-up slices
6-
through v1.8.237).
6+
through v1.8.238).
77

88
This file is the single fastest read for an AI session, new contributor, or
99
maintainer-context refresh. It does **not** replace [ROADMAP.md](ROADMAP.md),
@@ -47,7 +47,7 @@ them requires changing both the relevant code *and* the gate.
4747
If a proposed change conflicts with any of these, the answer is "move that
4848
feature into an addon" — never "loosen the invariant."
4949

50-
## 3. Stack at HEAD (v1.8.237)
50+
## 3. Stack at HEAD (v1.8.238)
5151

5252
```
5353
Kotlin 2.3.21 · Compose BOM 2026.05.01 · Material 3 + material-kolor 4.1.1
@@ -204,7 +204,7 @@ and in [`ROADMAP.md` §0 v5.5 + v5.4](ROADMAP.md). Net deltas to invariants:
204204
at `docs/outreach/2026-05-17-swiftkey-migration/` covering
205205
AlternativeTo, BGR, Android Authority, and r/Swiftkey.
206206

207-
**v1.8.104 - v1.8.237** ships the seventh research-pass privacy,
207+
**v1.8.104 - v1.8.238** ships the seventh research-pass privacy,
208208
voice, clipboard, NLP, visual-regression, Addons trust/asset/catalog layer, and
209209
input-behavior testability plus conservative lint/dependency cleanup and
210210
performance-baseline / CI-quality / repo-hygiene / destructive-confirmation
@@ -538,7 +538,7 @@ keyboard preview field now renders as a distinct bottom surface, exposes
538538
ready/active focus-state feedback, preserves bottom-bar traversal ordering, and
539539
uses coroutine-safe feedback when Android cannot open the keyboard picker.
540540

541-
v1.8.171 through v1.8.237 refresh the release front door after the 2026-05-31
541+
v1.8.171 through v1.8.238 refresh the release front door after the 2026-05-31
542542
SwiftKey account-export cutoff, consolidate planning into `ROADMAP.md`,
543543
backfill audit docs, ship settings search and search polish, add hardware
544544
keyboard import and per-app language/accent discovery, harden release gates
@@ -592,6 +592,9 @@ provider, trace, and smart-compose ghost-text work begins.
592592
v1.8.237 closes the Settings search highlight lifecycle gap: destination cards
593593
consume the process-wide search target once into local screen state, expose a
594594
close action, and no longer reappear on later visits without a new search.
595+
v1.8.238 closes the clipboard media accessibility gap: image and video history
596+
tiles now announce localized media type, history group, and copied-time context
597+
while thumbnail/video overlay icons remain decorative.
595598

596599
## 4. Module layout
597600

README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# SwiftFloris
22

3-
![Version](https://img.shields.io/badge/version-v1.8.237-blue) ![License](https://img.shields.io/badge/license-Apache%202.0-green) ![Platform](https://img.shields.io/badge/platform-Android%208.0+-orange) ![Network](https://img.shields.io/badge/network-none-lightgrey) ![Dictionary imports](https://img.shields.io/badge/dictionary%20imports-local%20files-green)
3+
![Version](https://img.shields.io/badge/version-v1.8.238-blue) ![License](https://img.shields.io/badge/license-Apache%202.0-green) ![Platform](https://img.shields.io/badge/platform-Android%208.0+-orange) ![Network](https://img.shields.io/badge/network-none-lightgrey) ![Dictionary imports](https://img.shields.io/badge/dictionary%20imports-local%20files-green)
44

55
**SwiftFloris** is a privacy-first Android keyboard, forked from FlorisBoard and pushed toward SwiftKey-class multilingual typing without the cloud. It ships under Apache-2.0, holds no `INTERNET` permission, and binds zero accounts.
66

@@ -37,15 +37,15 @@
3737
3838
## Highlights
3939

40-
| Area | What's in v1.8.237 | Privacy posture |
40+
| Area | What's in v1.8.238 | Privacy posture |
4141
|------|-------------------|-----------------|
4242
| **Autocorrect / prediction** | SCOWL 117k English dictionary, SymSpell d1+d2, bigram + trigram next-word, capitalization-aware completions, contraction handling, instant-remember user-dictionary overlay | On-device |
4343
| **Multilingual typing** | Bilingual subtype presets (EN+ES / EN+FR / EN+DE), per-token Latin language identification, top-two straddle guard, sentence-local context scoring, and opt-in remembered keyboard language per app | On-device |
4444
| **Scripts** | Devanagari + Bengali + Tamil + Telugu + ... (63-script transliteration coverage); RTL Arabic shaper, Persian / Urdu / Hebrew normalisers, bundled Noto Nastaliq Urdu rendering for Urdu subtype key text | On-device |
4545
| **Gesture typing** | `StatisticalGlideTypingClassifier` over bounded EN / DE / ES / FR / IT / PT dictionaries with adaptive touch evidence | On-device |
4646
| **Voice input** | FUTO Voice Input handoff (live path), FUTO install guidance when no voice keyboard is available, plus preview-only local Whisper/Vosk route selector and model catalog until a recognizer runtime ships | SwiftFloris itself does not record audio |
4747
| **Emoji & stickers** | Emoji search/history/pinned groups with an in-keyboard pin-to-group sheet, bundled local sticker packs, and user-imported SAF sticker folders for PNG / WebP / JPEG / GIF files | Local folder URI only |
48-
| **Clipboard** | Room-backed history with pinning + per-app source tag, media/provider metadata, sensitive-item gates, startup/restore reconciliation, and in-keyboard text search with type-filter composition | On-device |
48+
| **Clipboard** | Room-backed history with pinning + per-app source tag, media/provider metadata, sensitive-item gates, startup/restore reconciliation, in-keyboard text search with type-filter composition, and TalkBack labels for image/video media history tiles | On-device |
4949
| **Productivity** | Calendar quick-insert reads local agenda entries for today + next 7 days; task quick-insert sends selected text to user-chosen task / note apps | Calendar permission is explicit opt-in; no network |
5050
| **Themes** | 21 bundled themes — SwiftKey Pure (Light/Dark + M3 Expressive), SwiftKey High Contrast (AAA), Aurora Animated, Floris Day/Night, Swift Glacier, Swift Slate, M3E Nord (light + dark), Tokyo Night, Dracula, Catppuccin Mocha; borderless variants where applicable; Snygg theme engine; per-app accent with Settings preview and one-time opt-in hint | No telemetry |
5151
| **MCP daemon bridge** | AIDL bridge to user-installed MCP daemons with per-daemon enable / disable in Settings → MCP daemon bridge | Local-only binder, no network |
@@ -287,6 +287,7 @@ Real device-number collection is tracked in [`docs/BENCHMARKS.md`](docs/BENCHMAR
287287

288288
The full release stream lives in [`CHANGELOG.md`](CHANGELOG.md) and on [GitHub Releases](https://github.com/SysAdminDoc/SwiftFloris/releases).
289289

290+
- **v1.8.238** (2026-06-04) — Clipboard image/video history tiles now expose localized TalkBack labels with media type, history group, and copied-time context while keeping decorative thumbnail overlays hidden. ([notes](CHANGELOG.md#v1.8.238))
290291
- **v1.8.237** (2026-06-04) — Settings search destination highlights are now one-shot and dismissible, so stale search-result cards do not reappear on later visits. ([notes](CHANGELOG.md#v1.8.237))
291292
- **v1.8.236** (2026-06-04) — Suggestion candidate generation now snapshots incognito, no-personalized-learning, preference, and ghost-text sensitivity inputs before async provider work begins. ([notes](CHANGELOG.md#v1.8.236))
292293
- **v1.8.235** (2026-06-04) — Settings search now exposes TalkBack field labels/state, polite result-status changes, and result rows with position, screen, title, and summary context. ([notes](CHANGELOG.md#v1.8.235))
@@ -467,7 +468,7 @@ limitations under the License.
467468

468469
## Status
469470

470-
🚀 **Active development.** Current release: **v1.8.237** (2026-06-04). The SwiftKey account export window closed on **2026-05-31**; local/on-device migration paths remain documented above.
471+
🚀 **Active development.** Current release: **v1.8.238** (2026-06-04). The SwiftKey account export window closed on **2026-05-31**; local/on-device migration paths remain documented above.
471472

472473
---
473474

0 commit comments

Comments
 (0)