From cb01695c0e9725e430eec2e7eceb61e73907821b Mon Sep 17 00:00:00 2001 From: limuzi013 <128580527+limuzi013@users.noreply.github.com> Date: Sun, 4 Oct 2026 15:14:41 +0800 Subject: [PATCH 1/3] Release 0.0.4-beta.1: no lost tail words, offline punctuation, redesigned app pages - Stop the microphone the instant the space key is released and decode the already-recorded audio to the end. Streaming Paraformer needs is_final to decode its last short chunk; without it trailing words were dropped. The 300 ms post-release capture is gone and media volume returns when capture actually stops. - Add the CT-Transformer INT8 punctuation model (offline, loaded on demand) and apply "punctuation as space" after punctuation restoration. - Batch PCM copies, reuse inference buffers and report buffer overflow as an error instead of committing a truncated result. - Redesign the app home and settings pages (16dp margins, switch and pill button styling, skin sub-page, large-font and wide-screen layouts). - Keep switch colours and layout text sizes in the design tokens, and sync the trusted voice model catalog and its test with the four-file manifest. - Add a debug-only real-audio-to-editor E2E and scripts/beta4_e2e.py. Co-Authored-By: Claude Sonnet 5.5 --- CHANGELOG.md | 13 + CONTRIBUTING.md | 3 + THIRD_PARTY_NOTICES.md | 1 + VERSION | 2 +- app/src/debug/assets/voice-beta4.wav | Bin 0 -> 321744 bytes .../llc/slacker/openime/E2ETestReceiver.kt | 5 + .../java/llc/slacker/openime/VoiceAudioE2E.kt | 92 +++++++ .../licenses/ct-transformer-Apache-2.0.txt | 56 +++++ .../main/assets/models/voice/manifest.json | 11 +- .../models/voice/punctuation/model.int8.onnx | 3 + .../assets/models/voice/trusted-downloads.tsv | 2 +- .../slacker/openime/ImeSettingsActivity.kt | 2 +- .../slacker/openime/LocalVoiceImeService.kt | 10 +- .../java/llc/slacker/openime/MainActivity.kt | 56 +++-- .../openime/keyboard/ImeKeyboardView.kt | 13 +- .../openime/keyboard/ImeThemeApplier.kt | 34 +-- .../openime/panel/SettingsPanelController.kt | 156 ++++++------ .../java/llc/slacker/openime/setup/SetupUi.kt | 53 ++-- .../slacker/openime/theme/ImeDesignTokens.kt | 16 +- .../openime/theme/ImeDrawableFactory.kt | 8 + .../openime/voice/LocalAudioVoiceBackend.kt | 113 +++++---- .../openime/voice/VoiceMediaMuteController.kt | 1 + .../voice/VoiceModelLifecycleManager.kt | 7 +- .../openime/voice/VoicePanelController.kt | 16 +- .../openime/voice/VoiceRecognitionBackend.kt | 47 +++- .../slacker/openime/voice/VoiceSessionHost.kt | 1 + .../openime/voice/VoiceTextProcessor.kt | 14 +- app/src/main/res/layout/activity_main.xml | 110 ++++---- app/src/main/res/values/dimens.xml | 1 + .../openime/VoiceModelTrustPolicyTest.kt | 7 +- docs/APP_UI_SPEC.md | 58 +++++ docs/BETA4_VOICE.md | 68 +++++ docs/LICENSING.md | 7 +- docs/README.md | 1 + scripts/beta4_e2e.py | 234 ++++++++++++++++++ 35 files changed, 962 insertions(+), 259 deletions(-) create mode 100644 app/src/debug/assets/voice-beta4.wav create mode 100644 app/src/debug/java/llc/slacker/openime/VoiceAudioE2E.kt create mode 100644 app/src/main/assets/licenses/ct-transformer-Apache-2.0.txt create mode 100644 app/src/main/assets/models/voice/punctuation/model.int8.onnx create mode 100644 docs/APP_UI_SPEC.md create mode 100644 docs/BETA4_VOICE.md create mode 100644 scripts/beta4_e2e.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 92c4a41b..cd52438e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,19 @@ GitHub Release 的发布说明;版本与发布流程见 [docs/RELEASE.md](docs ## [Unreleased] +## [0.0.4-beta.1] - 2026-10-04 + +第四个测试版:松开空格立即结束录音,已录音频继续完整转写;加入离线中英标点恢复,重新整理 App 首页与设置页。 + +- 修复 Streaming Paraformer 最后不足一块的已录音频没有解码,导致末尾丢字;松手只停止麦克风,排空 PCM 后再结束识别。取消仍丢弃本次语音。 +- 移除松手后的 300ms 实际录音,采集结束后即恢复原媒体音量;保留模型计算所需的纯静音尾垫,不再采集用户语音。 +- 新增 CT-Transformer INT8 本地标点模型,最终转写时恢复逗号与问号;“标点用空格代替”在标点恢复后生效,修复紧贴中文的英文标点漏转换,保留数字小数和网址。 +- PCM 批量拷贝、复用推理输入块;缓冲溢出报错,避免把缺字结果当成功上屏。 +- App 首页和设置页统一为键盘的灰色底板、小圆角白色按键、底边与蓝色主操作;复用键盘字号和间距;按 Apple HIG 调整胶囊主/次按钮及绿色开关、白色滑块,补齐开关读屏状态;皮肤设置独立为二级页面;支持系统字体缩放与窄屏,键盘保持既有设计。 +- 补齐 App 尺寸与位置规范:页面边距 16dp、组距 24dp、行距 8dp,宽屏内容最多 600dp 居中;首页卡片、输入框与主按钮对齐。修复 App 页沿用键盘参考画布和单手模式缩宽;2 倍字体分段选项纵排,避免截字。详见 `docs/APP_UI_SPEC.md`。 +- 新增真实 native 音频到编辑器的端到端验收和可重复脚本,保存 JSON、日志、截图与布局 XML。详见 `docs/BETA4_VOICE.md`。 + + ## [0.0.3-beta.1] - 2026-10-04 第三个公开测试版:空格滑动移光标、密码管理器的自动填充直接出现在键盘上、选词后的表情联想、26 键字母键上的数字和符号(上滑输入),以及语音输入的去语气词和“标点用空格代替”。仍是测试版,欢迎在 Issues 反馈问题。从 0.0.2-beta.1 覆盖安装即可,用户数据保留;升级后首次启动会重新部署词典,这段时间候选由备用词库提供。 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index aeebf175..e2f8e928 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,6 +6,7 @@ 2. 执行 `git lfs pull`,确认语音模型和 AAR 不是文本指针。 3. 先阅读 [README.md](README.md)、[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) 和 [docs/TEST_ARCHITECTURE.md](docs/TEST_ARCHITECTURE.md)。 +4. 修改 App 界面时按 [App 界面开发规范](docs/APP_UI_SPEC.md) 实现尺寸、间距、对齐、点击区及大字体适配;先复用现有令牌和资源,不自行引入一套数值。 ## 分支与提交 @@ -47,6 +48,8 @@ python3 scripts/release_check.py check 如果改动了布局或 Insets,再运行 `visual_check.ps1`,并在 PR 中说明测试设备的 Android 版本、窗口宽度和是否使用浮动键盘。 +App 界面同时按 `docs/APP_UI_SPEC.md` 检查普通屏、320dp 大字体和宽屏;运行 +`scripts/beta4_e2e.py` 并保存截图、UI XML、结果 JSON 和日志作为可重复的验收工件。 ## Pull Request diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md index 7311c725..a16eddfe 100644 --- a/THIRD_PARTY_NOTICES.md +++ b/THIRD_PARTY_NOTICES.md @@ -11,6 +11,7 @@ | Rime 基础数据 | `app/src/main/assets/rime/` | Rime / luna-pinyin / essay 等上游数据 | 以各目录 `AUTHORS` / 上游许可为准 | 已保留上游 AUTHORS;发布前不得删除这些归属文件 | | sherpa-onnx Android runtime | `app/libs/sherpa-onnx-1.13.6.aar` | https://github.com/k2-fsa/sherpa-onnx | Apache-2.0 | APK 包含 `assets/licenses/sherpa-onnx-Apache-2.0.txt` | | 中英双语 Streaming Paraformer INT8 语音模型 | `app/src/main/assets/models/voice/bilingual-paraformer/` | https://huggingface.co/csukuangfj/sherpa-onnx-streaming-paraformer-bilingual-zh-en | Apache-2.0 | 只打包 `encoder.int8.onnx`、`decoder.int8.onnx` 和 `tokens.txt`;APK 包含 `assets/licenses/paraformer-model-Apache-2.0.txt`,`manifest.json` 固定模型 ID/版本与文件哈希 | +| CT-Transformer 中英标点 INT8 模型 | `app/src/main/assets/models/voice/punctuation/` | https://modelscope.cn/models/iic/punc_ct-transformer_zh-cn-common-vocab272727-pytorch 、https://github.com/k2-fsa/sherpa-onnx/releases/tag/punctuation-models | Apache-2.0 | 固定 `2024-04-12-int8` 导出,清单包含文件哈希;APK 附 `ct-transformer-Apache-2.0.txt` | | Microsoft Fluent Emoji | `app/src/main/assets/emoji/fluent/` | https://github.com/microsoft/fluentui-emoji | MIT | 仅打包当前实际使用的基础情绪表情资源;APK 包含 `assets/licenses/fluent-emoji-MIT.txt` | ## 发布前检查 diff --git a/VERSION b/VERSION index 4c98a1d8..47875e82 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.0.3-beta.1 +0.0.4-beta.1 diff --git a/app/src/debug/assets/voice-beta4.wav b/app/src/debug/assets/voice-beta4.wav new file mode 100644 index 0000000000000000000000000000000000000000..6ef8fc2940e6b87d14ccd80274a50465ad978b35 GIT binary patch literal 321744 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

D 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 native model -> actual lab InputConnection replay. + * The fixture and hook are absent from release builds. No fake ASR callbacks. + */ +internal object VoiceAudioE2E { + fun replay(context: Context, punctuationOnly: Boolean, finished: () -> Unit) { + val service = LocalVoiceImeService.activeInstance + val reportFile = File(context.getExternalFilesDir(null), "beta4-audio-e2e.json") + reportFile.delete() + val handler = Handler(Looper.getMainLooper()) + val editor = service?.currentInputEditorInfo + if (service == null || editor?.packageName != context.packageName || editor.fieldId != R.id.lab_single) { + reportFile.writeText(JSONObject().put("error", "live lab editor required").toString()) + finished(); return + } + service.onVoiceSessionStarted(true) + Thread({ + val report = JSONObject().put("passed", false) + try { + val manager = service.javaClass.getDeclaredField("voiceLifecycle").apply { isAccessible = true } + .get(service) as VoiceModelLifecycleManager + val runtime = checkNotNull(manager.awaitRuntime()) + var lastPartial = "" + runtime.openSession("zh-CN", object : VoiceRecognitionEvents { + override fun onPartial(text: String) { + lastPartial = text + handler.post { service.onVoicePartial(text) } + } + override fun onFinal(text: String) = Unit + override fun onRms(rms: Float) = Unit + override fun onError(message: String) { error(message) } + override fun onReady() = Unit + }).use { session -> + val raw: String + if (punctuationOnly) { + raw = "今天天气很好我们一起去公园散步吧" + report.put("asciiSpace", session.punctuate("你好,今天很好.明天见!")) + .put("literalSpace", session.punctuate("价格3.5,访问https://a.b。")) + } else { + val wav = context.assets.open("voice-beta4.wav").use { it.readBytes() } + report.put("fixtureSha256", MessageDigest.getInstance("SHA-256").digest(wav).joinToString("") { "%02x".format(it) }) + val buffer = ByteBuffer.wrap(wav).order(ByteOrder.LITTLE_ENDIAN) + var offset = 12 + while (String(wav, offset, 4, Charsets.US_ASCII) != "data") { + val size = buffer.getInt(offset + 4); offset += 8 + size + size % 2 + } + val size = buffer.getInt(offset + 4) + val pcm = ByteBuffer.wrap(wav, offset + 8, size).order(ByteOrder.LITTLE_ENDIAN) + report.put("samplesFed", size / 2) + while (pcm.hasRemaining()) { + session.acceptWaveform(FloatArray(minOf(320, pcm.remaining() / 2)) { pcm.short / 32768f }) + } + report.put("partialBeforeFinish", lastPartial) + raw = session.inputFinished() + report.put("question", session.punctuate("你今天有时间吗")) + .put("clauses", session.punctuate("今天天气很好我们一起去公园散步吧")) + } + report.put("rawFinal", raw) + val final = HotwordRuntime.apply(VoiceCorrectionRepository.apply(session.punctuate(raw).orEmpty())) + report.put("final", final) + handler.post { + try { + check(LocalVoiceImeService.activeInstance === service && service.currentInputEditorInfo?.fieldId == R.id.lab_single) + service.onVoiceFinal(final) + report.put("passed", true) + } catch (error: Throwable) { report.put("error", error.toString()) } + finally { reportFile.writeText(report.toString(2)); finished() } + } + } + } catch (error: Throwable) { + handler.post { + service.onVoiceCaptureStopped() + report.put("error", error.toString()); reportFile.writeText(report.toString(2)); finished() + } + } + }, "openime-e2e-pcm").apply { isDaemon = true }.start() + } +} diff --git a/app/src/main/assets/licenses/ct-transformer-Apache-2.0.txt b/app/src/main/assets/licenses/ct-transformer-Apache-2.0.txt new file mode 100644 index 00000000..9f7a310e --- /dev/null +++ b/app/src/main/assets/licenses/ct-transformer-Apache-2.0.txt @@ -0,0 +1,56 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and + + 2. You must cause any modified files to carry prominent notices stating that You changed the files; and + + 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + +You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + diff --git a/app/src/main/assets/models/voice/manifest.json b/app/src/main/assets/models/voice/manifest.json index c2aa644e..5ff9a47b 100644 --- a/app/src/main/assets/models/voice/manifest.json +++ b/app/src/main/assets/models/voice/manifest.json @@ -1,15 +1,16 @@ { "modelId": "sherpa-onnx-streaming-paraformer-bilingual-zh-en-int8", - "modelVersion": "hf-8e40c43-int8", + "modelVersion": "hf-8e40c43-int8-punct-20240412", "language": "zh-CN,en-US", "modelType": "paraformer", "engineVersion": "sherpa-onnx-v1.13.6", - "fileHash": "b2a084021f5b4aa5293e750e0733b6a8819d37ddd6452518faffa0b3408c5263", - "supportsPunctuation": false, - "requiredMemory": 520000000, + "fileHash": "d0c0b806dffddbd953429b06dfd31197d19cb06d351c76a2f63d9b7c09fcd829", + "supportsPunctuation": true, + "requiredMemory": 620000000, "files": [ "models/voice/bilingual-paraformer/decoder.int8.onnx", "models/voice/bilingual-paraformer/encoder.int8.onnx", - "models/voice/bilingual-paraformer/tokens.txt" + "models/voice/bilingual-paraformer/tokens.txt", + "models/voice/punctuation/model.int8.onnx" ] } diff --git a/app/src/main/assets/models/voice/punctuation/model.int8.onnx b/app/src/main/assets/models/voice/punctuation/model.int8.onnx new file mode 100644 index 00000000..fbb56c3c --- /dev/null +++ b/app/src/main/assets/models/voice/punctuation/model.int8.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:65a3fb9f5ad7bfb96bf69e0dc4481df97f6ee60513c1d94ce981ba6effd524b1 +size 75519198 diff --git a/app/src/main/assets/models/voice/trusted-downloads.tsv b/app/src/main/assets/models/voice/trusted-downloads.tsv index 55e8d2ca..8512cd6d 100644 --- a/app/src/main/assets/models/voice/trusted-downloads.tsv +++ b/app/src/main/assets/models/voice/trusted-downloads.tsv @@ -1,3 +1,3 @@ # openIME trusted downloaded voice model catalog v1 # publishermanifest_fingerprint_sha256file_sizes_in_manifest_order -Slacker-LLC 46e714643e31aa2cba5524cc69bcda2a3c4c2d7e6f826d025c2d9d81473d4366 71664561,165462184,75756 +Slacker-LLC 2c33bc75c3c01dba9ba205ac75977de4a82fb76ccd793f91ba7ed468bac59100 71664561,165462184,75756,75519198 diff --git a/app/src/main/java/llc/slacker/openime/ImeSettingsActivity.kt b/app/src/main/java/llc/slacker/openime/ImeSettingsActivity.kt index b915279d..68a1abe9 100644 --- a/app/src/main/java/llc/slacker/openime/ImeSettingsActivity.kt +++ b/app/src/main/java/llc/slacker/openime/ImeSettingsActivity.kt @@ -144,7 +144,7 @@ class ImeSettingsActivity : Activity(), ImeKeyboardView.Listener { systemDark = systemDark, accentOverride = AccentPalette.parse(ImeSettingsRepository.loadSkinColor(this)), ) - val chrome = tokens.expandedBackground + val chrome = tokens.keyboardBackground host.setBackgroundColor(chrome) window.statusBarColor = chrome window.navigationBarColor = chrome diff --git a/app/src/main/java/llc/slacker/openime/LocalVoiceImeService.kt b/app/src/main/java/llc/slacker/openime/LocalVoiceImeService.kt index 6ac5072c..d3f5efe8 100644 --- a/app/src/main/java/llc/slacker/openime/LocalVoiceImeService.kt +++ b/app/src/main/java/llc/slacker/openime/LocalVoiceImeService.kt @@ -942,7 +942,6 @@ class LocalVoiceImeService : InputMethodService(), ImeKeyboardView.Listener, Can keyboardView?.startVoiceFromSpace() } else { keyboardView?.stopVoiceFromSpace() - voiceMediaMute.restore() } } @@ -967,12 +966,15 @@ class LocalVoiceImeService : InputMethodService(), ImeKeyboardView.Listener, Can } override fun stopVoiceRecognition() { - // Covers both the normal touch-release callback and accessibility's - // direct stop path, which can bypass onVoicePressChanged(false). - voiceMediaMute.restore() + // Stop capture immediately. Decoding still drains recorded audio; + // restore media when AudioRecord has actually stopped. if (::voiceLifecycle.isInitialized) voiceLifecycle.stop() } + override fun onVoiceCaptureStopped() { + voiceMediaMute.restore() + } + override fun cancelVoiceRecognition() { voiceMediaMute.restore() if (::voiceLifecycle.isInitialized) voiceLifecycle.cancel() diff --git a/app/src/main/java/llc/slacker/openime/MainActivity.kt b/app/src/main/java/llc/slacker/openime/MainActivity.kt index 21892556..1f4e4ff4 100644 --- a/app/src/main/java/llc/slacker/openime/MainActivity.kt +++ b/app/src/main/java/llc/slacker/openime/MainActivity.kt @@ -64,6 +64,22 @@ class MainActivity : Activity() { } insets } + findViewById(R.id.main_scroll).addOnLayoutChangeListener { view, _, _, _, _, _, _, _, _ -> + val width = minOf(view.width - view.paddingLeft - view.paddingRight, SetupUi.dp(this, 600)) + val content = findViewById(R.id.main_content) + (content.layoutParams as android.widget.FrameLayout.LayoutParams).let { params -> + if (params.width != width) { params.width = width; content.layoutParams = params } + } + val button = findViewById(R.id.open_app_settings) + (button.layoutParams as android.widget.LinearLayout.LayoutParams).let { params -> + val buttonWidth = (width - SetupUi.dp(this, 32)).coerceAtLeast(0) + if (params.width != buttonWidth) { + params.width = buttonWidth + params.gravity = android.view.Gravity.CENTER_HORIZONTAL + button.layoutParams = params + } + } + } setupClick(findViewById(R.id.open_ime_settings)) { startActivity(Intent(Settings.ACTION_INPUT_METHOD_SETTINGS)) } @@ -154,6 +170,11 @@ class MainActivity : Activity() { val enabled = status.enabled val selected = status.selected val accent = SetupUi.accent(this) + val tokens = SetupUi.tokens(this) + findViewById(R.id.main_scroll).setBackgroundColor(tokens.keyboardBackground) + window.statusBarColor = tokens.keyboardBackground + window.navigationBarColor = tokens.keyboardBackground + findViewById(R.id.voice_permission_card).background = SetupUi.keyBackground(this) val prefs = getPreferences(MODE_PRIVATE) val microphoneGranted = checkSelfPermission(Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED @@ -166,16 +187,15 @@ class MainActivity : Activity() { val testInput = findViewById(R.id.test_input) val testDone = testInput.text?.isNotBlank() == true - testInput.background = SetupUi.inputBackground(this) - testInput.setPadding(SetupUi.dp(this, 16), 0, SetupUi.dp(this, 16), 0) + testInput.background = SetupUi.keyBackground(this) + testInput.setPadding(SetupUi.dp(this, 16), SetupUi.dp(this, 8), SetupUi.dp(this, 16), SetupUi.dp(this, 8)) SetupUi.styleCursor(this, testInput) findViewById(R.id.status).setText( when { !enabled -> R.string.setup_enable !selected -> R.string.setup_choose - testDone -> R.string.setup_ready - else -> R.string.test_step + else -> R.string.setup_ready }, ) @@ -248,6 +268,7 @@ class MainActivity : Activity() { ) findViewById(R.id.voice_permission_actions).visibility = if (microphoneGranted || microphoneSkipped) View.GONE else View.VISIBLE findViewById(R.id.voice_permission_authorize).background = SetupUi.secondaryBackground(this) + findViewById(R.id.voice_permission_authorize).setTextColor(SetupUi.secondaryTextColor(this)) findViewById(R.id.voice_permission_skip).apply { visibility = if (selected && !microphoneGranted && !microphoneSkipped) { @@ -256,6 +277,7 @@ class MainActivity : Activity() { View.GONE } isEnabled = visibility == View.VISIBLE + (this as TextView).setTextColor(SetupUi.secondaryTextColor(this@MainActivity)) background = null } @@ -282,7 +304,8 @@ class MainActivity : Activity() { findViewById(R.id.open_app_settings).apply { isEnabled = ready alpha = if (ready) 1f else ImeSurfacePolicy.DISABLED_ALPHA - background = SetupUi.secondaryBackground(this@MainActivity) + background = SetupUi.buttonBackground(this@MainActivity, SetupUi.primaryButtonColor(this@MainActivity)) + (this as TextView).setTextColor(android.graphics.Color.WHITE) contentDescription = getString( if (ready) R.string.open_app_settings else R.string.setup_need_switch, ) @@ -348,7 +371,8 @@ class MainActivity : Activity() { // A completed setup step remains an action: users may need to revisit // the system picker or input-method settings after initial setup. row.isEnabled = true - row.background = null + val tokens = SetupUi.tokens(this) + row.background = if (row.id == R.id.voice_permission) null else SetupUi.keyBackground(this) label.text = if (done) doneText else activeText label.setTextColor(getColor(if (done || active) R.color.setup_title else R.color.setup_body)) // A completed step is easier to scan as a result than as an old @@ -361,20 +385,10 @@ class MainActivity : Activity() { } else null mark.setCompoundDrawablesRelative(drawable, null, null, null) mark.compoundDrawableTintList = ColorStateList.valueOf( - if (done) contrastText(getColor(R.color.setup_ready)) else getColor(R.color.setup_body), - ) - mark.background = android.graphics.drawable.GradientDrawable().apply { - shape = android.graphics.drawable.GradientDrawable.OVAL - setColor(if (done) getColor(R.color.setup_ready) else if (active) accent else getColor(R.color.setup_surface)) - if (!done && !active) setStroke(SetupUi.dp(this@MainActivity, 1), getColor(R.color.setup_input_line)) - } - mark.setTextColor( - when { - active -> contrastText(accent) - done -> contrastText(getColor(R.color.setup_ready)) - else -> getColor(R.color.setup_body) - }, + if (done || active) accent else tokens.keySecondaryText, ) + mark.background = SetupUi.rounded(tokens.functionKeyBackground, SetupUi.dp(this, ImeGeometryTokens.KEY_RADIUS_DP).toFloat()) + mark.setTextColor(if (active) accent else tokens.keySecondaryText) chevron?.imageTintList = ColorStateList.valueOf( getColor(R.color.setup_body), ) @@ -396,9 +410,9 @@ class MainActivity : Activity() { if (done) android.widget.LinearLayout.LayoutParams.WRAP_CONTENT else SetupUi.dp(this, 40), ) status.background = if (done) null else SetupUi.rounded( - if (active) accent else getColor(R.color.setup_disabled), SetupUi.dp(this, 12).toFloat(), + if (active) SetupUi.primaryButtonColor(this) else tokens.functionKeyBackground, SetupUi.dp(this, ImeGeometryTokens.PILL_RADIUS_DP).toFloat(), ) - status.setTextColor(if (done) getColor(R.color.setup_body) else if (active) contrastText(accent) else getColor(R.color.setup_disabled_text)) + status.setTextColor(if (done) getColor(R.color.setup_body) else if (active) android.graphics.Color.WHITE else getColor(R.color.setup_disabled_text)) } if (row.id == R.id.test_step) (row as android.widget.LinearLayout).getChildAt(2)?.visibility = View.GONE diff --git a/app/src/main/java/llc/slacker/openime/keyboard/ImeKeyboardView.kt b/app/src/main/java/llc/slacker/openime/keyboard/ImeKeyboardView.kt index dc12f19a..21bf9b14 100644 --- a/app/src/main/java/llc/slacker/openime/keyboard/ImeKeyboardView.kt +++ b/app/src/main/java/llc/slacker/openime/keyboard/ImeKeyboardView.kt @@ -293,7 +293,7 @@ open class ImeKeyboardView( private var keyboardHeightPercent = ImeSettingsRepository.loadKeyboardHeightPercent(context) private var floatingWidthPercent = ImeSettingsRepository.loadFloatingWidthPercent(context) private var floatingOpacityPercent = ImeSettingsRepository.loadFloatingOpacityPercent(context) - private var referenceScale = ImeReferenceSizing.scale(context) + private var referenceScale = if (standalonePanel) 1f else ImeReferenceSizing.scale(context) private var floatingWindowMode = false private var layoutMetrics = buildLayoutMetrics() /** Landscape uses compact rows, except in floating mode, which keeps portrait size. */ @@ -1034,7 +1034,7 @@ open class ImeKeyboardView( if (measuredWidthPx <= 0) return val dockWidthPx = - if (floatingKeyboardController.enabled || keyboardHandedness == ImeHandedness.STANDARD) { + if (standalonePanel || floatingKeyboardController.enabled || keyboardHandedness == ImeHandedness.STANDARD) { measuredWidthPx } else { (measuredWidthPx * 0.82f).toInt() @@ -1042,7 +1042,7 @@ open class ImeKeyboardView( .coerceAtMost(measuredWidthPx) } - val nextScale = ImeReferenceSizing.scale(context, dockWidthPx, landscapeCompact = !floatingWindowMode) + val nextScale = if (standalonePanel) 1f else ImeReferenceSizing.scale(context, dockWidthPx, landscapeCompact = !floatingWindowMode) // Configuration.screenWidthDp is a whole number while the measured width // is not (411dp vs 411.43dp on a 1080px / 420dpi screen), so the two // scales differ by up to 1/390 for the same window. That rounding noise @@ -1105,7 +1105,8 @@ open class ImeKeyboardView( return } val minimumInset = dp(0) - val maxWidth = (minOf(maxContentWidthDp.toFloat(), 390f * referenceScale) * resources.displayMetrics.density).toInt() + val maxWidth = if (standalonePanel) dp(maxContentWidthDp) + else (minOf(maxContentWidthDp.toFloat(), 390f * referenceScale) * resources.displayMetrics.density).toInt() contentInsetPx = maxOf(minimumInset, (dockWidthPx - maxWidth) / 2) keyboardBody.setPadding( contentInsetPx, @@ -2263,7 +2264,7 @@ open class ImeKeyboardView( text = textValue textSize = ImeTypographyTokens.SMALL_SP includeFontPadding = false - setPadding(dp(16), dp(4), 0, dp(8)) + setPadding(dp(16), dp(if (standalonePanel) 0 else 4), 0, dp(8)) tag = "panel-section-title" } @@ -3098,7 +3099,7 @@ open class ImeKeyboardView( mainDock.setBackgroundColor(t.keyboardBackground) keyboardBody.setBackgroundColor(t.keyboardBackground) topZone.setBackgroundColor(t.toolbarBackground) - expandedPanel.setBackgroundColor(if (standalonePanel) t.toolbarBackground else t.keyboardBackground) + expandedPanel.setBackgroundColor(t.keyboardBackground) candidateOverlay.setBackgroundColor(t.expandedBackground) themeApplier.apply(this, t) topZone.applyTokens(t) diff --git a/app/src/main/java/llc/slacker/openime/keyboard/ImeThemeApplier.kt b/app/src/main/java/llc/slacker/openime/keyboard/ImeThemeApplier.kt index 50ddb79c..7130c9cf 100644 --- a/app/src/main/java/llc/slacker/openime/keyboard/ImeThemeApplier.kt +++ b/app/src/main/java/llc/slacker/openime/keyboard/ImeThemeApplier.kt @@ -105,10 +105,7 @@ internal class ImeThemeApplier( view.applyMainTextScale(keyMainTextScale()) val keyFace = statefulRounded(color, pressedColor, skinRadiusPx()) - val keyEdge = ImeDrawableFactory.rounded(pressedColor, skinRadiusPx()) - val keyCap = LayerDrawable(arrayOf(keyEdge, keyFace)).apply { - setLayerInset(1, 0, 0, 0, toPx(1).coerceAtLeast(1)) - } + val keyCap = ImeDrawableFactory.keyCap(keyFace, pressedColor, skinRadiusPx(), toPx(1)) val halfGap = toPx(ImeGeometryTokens.KEY_GAP_DP) / 2 view.background = InsetDrawable(keyCap, halfGap, halfGap, halfGap, halfGap) view.background?.alpha = @@ -137,6 +134,14 @@ internal class ImeThemeApplier( private fun applyLinearLayout(view: LinearLayout, t: ImeTheme.Tokens) { when (view.tag) { + "app-setting-key" -> { + val radius = toPx(ImeGeometryTokens.KEY_RADIUS_DP) + view.background = ImeDrawableFactory.keyCap( + statefulRounded(t.keyBackground, t.keyPressedBackground, radius), + t.border, radius, toPx(1), + ) + } + "app-setting-group" -> view.background = null "candidate-first-row" -> { val selected = t.keyBackground view.background = statefulRounded( @@ -602,9 +607,12 @@ internal class ImeThemeApplier( ?.substringBefore(',') .orEmpty() val enabled = toggleState(seed) - view.background = ImeDrawableFactory.rounded( - if (enabled) t.primary else t.panelHeadBackground, - toPx(ImeGeometryTokens.PILL_RADIUS_DP), + view.background = paintedWithinTarget( + ImeDrawableFactory.rounded( + ImeSurfacePolicy.switchTrack(enabled, t), + toPx(ImeGeometryTokens.PILL_RADIUS_DP), + ), + ImeGeometryTokens.SWITCH_HEIGHT_DP, ) } } @@ -625,14 +633,8 @@ internal class ImeThemeApplier( ) } "toggle-knob" -> { - val parent = view.parent as? FrameLayout - val seed = parent?.contentDescription?.toString() - ?.substringBefore(',') - .orEmpty() - val trackColor = - if (toggleState(seed)) t.primary else t.panelHeadBackground view.background = ImeDrawableFactory.rounded( - ImeDrawableFactory.contrastText(trackColor), + Color.WHITE, toPx(ImeGeometryTokens.PILL_RADIUS_DP), ) } @@ -650,8 +652,8 @@ internal class ImeThemeApplier( drawable: android.graphics.drawable.Drawable, paintedDp: Int, ): InsetDrawable { - val inset = toPx((ImeGeometryTokens.TOUCH_TARGET_DP - paintedDp) / 2) - return InsetDrawable(drawable, 0, inset, 0, inset) + val extra = toPx(ImeGeometryTokens.TOUCH_TARGET_DP) - toPx(paintedDp) + return InsetDrawable(drawable, 0, extra / 2, 0, extra - extra / 2) } private fun hasAncestorTag(view: View, tag: String): Boolean { diff --git a/app/src/main/java/llc/slacker/openime/panel/SettingsPanelController.kt b/app/src/main/java/llc/slacker/openime/panel/SettingsPanelController.kt index f19d355d..a7fdc00c 100644 --- a/app/src/main/java/llc/slacker/openime/panel/SettingsPanelController.kt +++ b/app/src/main/java/llc/slacker/openime/panel/SettingsPanelController.kt @@ -32,6 +32,7 @@ import llc.slacker.openime.theme.ImeAppearance import llc.slacker.openime.theme.ImeDrawableFactory import llc.slacker.openime.theme.ImeGeometryTokens import llc.slacker.openime.theme.ImeMotionTokens +import llc.slacker.openime.theme.ImeSpacingTokens import llc.slacker.openime.theme.ImeTheme import llc.slacker.openime.theme.ImeTypographyTokens @@ -83,6 +84,9 @@ internal class SettingsPanelController( private val applyTheme: () -> Unit, private val onHierarchyRebuilt: () -> Unit, ) { + private val standalone = context is ImeSettingsActivity + private val stackControls: Boolean + get() = standalone && (context.resources.configuration.screenWidthDp < 360 || context.resources.configuration.fontScale >= 1.2f) private var storedScrollY = 0 private var settingsScroll: ScrollView? = null private var showingSkinOnly = false @@ -109,7 +113,7 @@ internal class SettingsPanelController( createHeader(if (skinOnly) "强调色与按键皮肤" else "偏好设置"), LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, - toPx(ImeGeometryTokens.TOP_BAR_HEIGHT_DP), + if (standalone) context.resources.getDimensionPixelSize(R.dimen.setup_top_bar_height) else toPx(ImeGeometryTokens.TOP_BAR_HEIGHT_DP), ), ) } else { @@ -131,7 +135,8 @@ internal class SettingsPanelController( val content = LinearLayout(context).apply { orientation = LinearLayout.VERTICAL - setPadding(toPx(12), toPx(12), toPx(12), toPx(18)) + val inset = toPx(if (standalone) ImeSpacingTokens.LG_DP else ImeSpacingTokens.MD_DP) + setPadding(inset, inset, inset, toPx(if (standalone) ImeSpacingTokens.XL_DP else 18)) tag = "settings-panel" } @@ -153,17 +158,8 @@ internal class SettingsPanelController( }, settingsSlider("键盘高度", 80, 120, currentKeyboardHeightPercent(), onKeyboardHeightChanged), ), groupParams()) - if (context !is ImeSettingsActivity) { - content.addView(createSectionTitle("更多外观"), wrapParams()) - content.addView(settingGroup(settingNavigationRow("强调色与按键皮肤", "颜色、圆角、不透明度与字号", onShowSkinSettings)), groupParams()) - } - - if (context is ImeSettingsActivity) { - content.addView(createSectionTitle("强调色"), wrapParams()) - content.addView(accentColorRow(), groupParams()) - content.addView(createSectionTitle("按键皮肤"), wrapParams()) - content.addView(skinSliders(), groupParams()) - } + content.addView(createSectionTitle("更多外观"), wrapParams()) + content.addView(settingGroup(settingNavigationRow("强调色与按键皮肤", "颜色、圆角、不透明度与字号", onShowSkinSettings)), groupParams()) content.addView(createSectionTitle("浮动键盘"), wrapParams()) content.addView(settingGroup( settingsSlider("浮动宽度", 72, 100, currentFloatingWidthPercent()) { onFloatingStyleChanged(it, currentFloatingOpacityPercent()) }, @@ -252,28 +248,35 @@ internal class SettingsPanelController( private fun segmentedSetting(label: String, labels: List, selected: String, onSelected: (String) -> Unit): View = LinearLayout(context).apply { - orientation = LinearLayout.HORIZONTAL + val verticalOptions = standalone && context.resources.configuration.fontScale >= 1.6f + orientation = if (stackControls) LinearLayout.VERTICAL else LinearLayout.HORIZONTAL gravity = Gravity.CENTER_VERTICAL - setPadding(toPx(16), 0, toPx(16), 0) - addView(labelText(label, ImeTypographyTokens.BODY_SP).apply { typeface = android.graphics.Typeface.DEFAULT_BOLD; gravity = Gravity.CENTER_VERTICAL }, - LinearLayout.LayoutParams(0, toPx(56), 1f)) + setPadding(toPx(16), toPx(if (standalone) 8 else 0), toPx(16), toPx(if (standalone) 8 else 0)) + addView(labelText(label, ImeTypographyTokens.BODY_SP).apply { + gravity = Gravity.CENTER_VERTICAL + if (!standalone) typeface = android.graphics.Typeface.DEFAULT_BOLD + }, + if (stackControls) LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT) + else if (standalone) LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1f).apply { marginEnd = toPx(ImeSpacingTokens.MD_DP) } + else LinearLayout.LayoutParams(0, toPx(56), 1f)) addView(LinearLayout(context).apply { - orientation = LinearLayout.HORIZONTAL - // The painted track is 34dp (inset in the theme) but every option is a - // full 48dp touch target. - tag = "segmented-track-tall" + orientation = if (verticalOptions) LinearLayout.VERTICAL else LinearLayout.HORIZONTAL + tag = if (verticalOptions) "segmented-track" else "segmented-track-tall" setPadding(toPx(2), toPx(2), toPx(2), toPx(2)) labels.forEach { value -> addView(TextView(context).apply { text = value; textSize = ImeTypographyTokens.BODY_SP; gravity = Gravity.CENTER; includeFontPadding = false minimumHeight = toPx(ImeGeometryTokens.TOUCH_TARGET_DP) - tag = if (value == selected) "segment-selected-tall" else "segment-option-tall" + tag = if (value == selected) { if (verticalOptions) "segment-selected" else "segment-selected-tall" } + else if (verticalOptions) "segment-option" else "segment-option-tall" contentDescription = "$value,${if (value == selected) "已选中" else "未选中"}" isClickable = true; isFocusable = true setOnClickListener { onFeedback(); onSelected(value) } - }, LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1f)) + }, if (verticalOptions) LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT) + else LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1f)) } - }, LinearLayout.LayoutParams(0, toPx(ImeGeometryTokens.TOUCH_TARGET_DP), 2f)) + }, if (stackControls) LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, if (verticalOptions) LinearLayout.LayoutParams.WRAP_CONTENT else toPx(ImeGeometryTokens.TOUCH_TARGET_DP)).apply { topMargin = toPx(ImeSpacingTokens.SM_DP) } + else LinearLayout.LayoutParams(0, toPx(ImeGeometryTokens.TOUCH_TARGET_DP), 2f)) } fun renderFuzzySettings() { @@ -281,7 +284,7 @@ internal class SettingsPanelController( createHeader("模糊音纠错"), LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, - toPx(ImeGeometryTokens.TOUCH_TARGET_DP), + if (standalone) context.resources.getDimensionPixelSize(R.dimen.setup_top_bar_height) else toPx(ImeGeometryTokens.TOUCH_TARGET_DP), ), ) val scroll = ScrollView(context).apply { @@ -291,7 +294,8 @@ internal class SettingsPanelController( } val content = LinearLayout(context).apply { orientation = LinearLayout.VERTICAL - setPadding(toPx(12), toPx(12), toPx(12), toPx(18)) + val inset = toPx(if (standalone) ImeSpacingTokens.LG_DP else ImeSpacingTokens.MD_DP) + setPadding(inset, inset, inset, toPx(if (standalone) ImeSpacingTokens.XL_DP else 18)) tag = "fuzzy-settings-panel" } content.addView( @@ -303,8 +307,8 @@ internal class SettingsPanelController( }, LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, - toPx(54), - ).apply { bottomMargin = toPx(10) }, + if (standalone) LinearLayout.LayoutParams.WRAP_CONTENT else toPx(54), + ).apply { bottomMargin = toPx(if (standalone) ImeSpacingTokens.XL_DP else 10) }, ) content.addView( settingGroup( @@ -313,7 +317,7 @@ internal class SettingsPanelController( LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, - ).apply { bottomMargin = toPx(14) }, + ).apply { bottomMargin = toPx(if (standalone) ImeSpacingTokens.XL_DP else 14) }, ) content.addView(createSectionTitle("当前规则"), wrapParams()) content.addView( @@ -326,7 +330,7 @@ internal class SettingsPanelController( LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, - ).apply { bottomMargin = toPx(14) }, + ).apply { bottomMargin = toPx(if (standalone) ImeSpacingTokens.XL_DP else 14) }, ) content.addView( TextView(context).apply { @@ -356,9 +360,9 @@ internal class SettingsPanelController( private fun settingGroup(vararg rows: View): LinearLayout = LinearLayout(context).apply { orientation = LinearLayout.VERTICAL - tag = "setting-group" + tag = if (standalone) "app-setting-group" else "setting-group" rows.forEachIndexed { index, row -> - if (index > 0) { + if (index > 0 && !standalone) { addView( View(context).apply { tag = "setting-divider" }, LinearLayout.LayoutParams( @@ -370,13 +374,14 @@ internal class SettingsPanelController( }, ) } + if (standalone) row.tag = "app-setting-key" addView( row, LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, if (row is TextView) toPx(54) else LinearLayout.LayoutParams.WRAP_CONTENT, - ), + ).apply { if (standalone && index > 0) topMargin = toPx(ImeSpacingTokens.SM_DP) }, ) } } @@ -416,16 +421,24 @@ internal class SettingsPanelController( row.apply { orientation = LinearLayout.HORIZONTAL gravity = Gravity.CENTER_VERTICAL - setPadding(toPx(14), 0, toPx(14), 0) + setPadding(toPx(if (standalone) 16 else 14), toPx(if (standalone) 8 else 0), toPx(if (standalone) 16 else 14), toPx(if (standalone) 8 else 0)) tag = "setting-row" minimumHeight = toPx(ImeGeometryTokens.SETTING_ROW_HEIGHT_DP) isClickable = true isFocusable = true + accessibilityDelegate = object : View.AccessibilityDelegate() { + override fun onInitializeAccessibilityNodeInfo(host: View, info: android.view.accessibility.AccessibilityNodeInfo) { + super.onInitializeAccessibilityNodeInfo(host, info) + info.className = "android.widget.Switch" + info.isCheckable = true + info.isChecked = toggleState(label) + } + } setOnClickListener { toggleView.performClick() } addView( settingIcon(label), - LinearLayout.LayoutParams(toPx(26), toPx(26)).apply { - marginEnd = toPx(8) + LinearLayout.LayoutParams(toPx(if (standalone) 24 else 26), toPx(if (standalone) 24 else 26)).apply { + marginEnd = toPx(if (standalone) 12 else 8) }, ) addView( @@ -435,7 +448,7 @@ internal class SettingsPanelController( addView(labelText(label, ImeTypographyTokens.BODY_SP), wrapParams()) addView( labelText(sub, ImeTypographyTokens.CAPTION_SP).apply { - setPadding(0, toPx(3), 0, 0) + setPadding(0, toPx(if (standalone) 4 else 3), 0, 0) }, wrapParams(), ) @@ -447,7 +460,7 @@ internal class SettingsPanelController( 1f, ), ) - addView(toggleView, wrapParams()) + addView(toggleView, wrapParams().apply { if (standalone) marginStart = toPx(ImeSpacingTokens.MD_DP) }) } updateRowAccessibility(toggleState(label)) return row @@ -461,7 +474,7 @@ internal class SettingsPanelController( LinearLayout(context).apply { orientation = LinearLayout.HORIZONTAL gravity = Gravity.CENTER_VERTICAL - setPadding(toPx(14), 0, toPx(14), 0) + setPadding(toPx(if (standalone) 16 else 14), toPx(if (standalone) 8 else 0), toPx(if (standalone) 16 else 14), toPx(if (standalone) 8 else 0)) tag = "setting-row" contentDescription = "$label,$sub,点击进入" minimumHeight = toPx(ImeGeometryTokens.SETTING_ROW_HEIGHT_DP) @@ -473,8 +486,8 @@ internal class SettingsPanelController( } addView( settingIcon(label), - LinearLayout.LayoutParams(toPx(26), toPx(26)).apply { - marginEnd = toPx(8) + LinearLayout.LayoutParams(toPx(if (standalone) 24 else 26), toPx(if (standalone) 24 else 26)).apply { + marginEnd = toPx(if (standalone) 12 else 8) }, ) addView( @@ -484,7 +497,7 @@ internal class SettingsPanelController( addView(labelText(label, ImeTypographyTokens.BODY_SP), wrapParams()) addView( labelText(sub, ImeTypographyTokens.CAPTION_SP).apply { - setPadding(0, toPx(3), 0, 0) + setPadding(0, toPx(if (standalone) 4 else 3), 0, 0) }, wrapParams(), ) @@ -510,7 +523,7 @@ internal class SettingsPanelController( importantForAccessibility = View.IMPORTANT_FOR_ACCESSIBILITY_NO tag = "setting-chevron" }, - LinearLayout.LayoutParams(toPx(28), toPx(44)), + LinearLayout.LayoutParams(toPx(if (standalone) 24 else 28), toPx(if (standalone) 48 else 44)).apply { if (standalone) marginStart = toPx(ImeSpacingTokens.MD_DP) }, ) } @@ -527,6 +540,7 @@ internal class SettingsPanelController( gravity = Gravity.START or Gravity.CENTER_VERTICAL } tag = "toggle-knob" + elevation = toPx(2).toFloat() translationX = if (isOn) toPx(ImeGeometryTokens.SWITCH_KNOB_TRAVEL_DP).toFloat() else 0f @@ -535,12 +549,12 @@ internal class SettingsPanelController( return FrameLayout(context).apply { setPadding( toPx(ImeGeometryTokens.SWITCH_PADDING_DP), + 0, toPx(ImeGeometryTokens.SWITCH_PADDING_DP), - toPx(ImeGeometryTokens.SWITCH_PADDING_DP), - toPx(ImeGeometryTokens.SWITCH_PADDING_DP), + 0, ) minimumWidth = toPx(ImeGeometryTokens.SWITCH_WIDTH_DP) - minimumHeight = toPx(ImeGeometryTokens.SWITCH_HEIGHT_DP) + minimumHeight = toPx(ImeGeometryTokens.TOUCH_TARGET_DP) tag = "toggle" isClickable = true isFocusable = true @@ -815,28 +829,23 @@ internal class SettingsPanelController( onChange: (Int) -> Unit, ): LinearLayout { val row = LinearLayout(context).apply { - orientation = LinearLayout.HORIZONTAL + orientation = if (stackControls) LinearLayout.VERTICAL else LinearLayout.HORIZONTAL gravity = Gravity.CENTER_VERTICAL - setPadding(toPx(16), toPx(4), toPx(16), toPx(4)) + setPadding(toPx(16), toPx(if (standalone) 8 else 4), toPx(16), toPx(if (standalone) 8 else 4)) tag = "setting-row" minimumHeight = toPx(ImeGeometryTokens.SETTING_ROW_HEIGHT_DP) } - row.addView( - TextView(context).apply { - text = labelText - textSize = ImeTypographyTokens.PANEL_BODY_SP - typeface = android.graphics.Typeface.DEFAULT_BOLD - }, - LinearLayout.LayoutParams( - toPx(72), - LinearLayout.LayoutParams.WRAP_CONTENT, - ), - ) + val title = TextView(context).apply { + text = labelText + textSize = ImeTypographyTokens.PANEL_BODY_SP + if (!standalone) typeface = android.graphics.Typeface.DEFAULT_BOLD + } val valueView = TextView(context).apply { tag = "setting-value" textSize = ImeTypographyTokens.BODY_SP gravity = Gravity.CENTER includeFontPadding = false + if (standalone) setSingleLine() minWidth = toPx(ImeGeometryTokens.TOUCH_TARGET_DP) contentDescription = "$labelText 当前值" } @@ -875,18 +884,19 @@ internal class SettingsPanelController( }, ) } - row.addView( - seekBar, - LinearLayout.LayoutParams( - 0, - LinearLayout.LayoutParams.WRAP_CONTENT, - 1f, - ), - ) - row.addView( - valueView, - LinearLayout.LayoutParams(toPx(44), toPx(ImeGeometryTokens.TOUCH_TARGET_DP)), - ) + if (stackControls) { + row.addView(LinearLayout(context).apply { + orientation = LinearLayout.HORIZONTAL + gravity = Gravity.CENTER_VERTICAL + addView(title, LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1f)) + addView(valueView, wrapParams()) + }, LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)) + row.addView(seekBar, LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)) + } else { + row.addView(title, LinearLayout.LayoutParams(toPx(if (standalone) 80 else 72), LinearLayout.LayoutParams.WRAP_CONTENT).apply { if (standalone) marginEnd = toPx(ImeSpacingTokens.MD_DP) }) + row.addView(seekBar, LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 1f)) + row.addView(valueView, LinearLayout.LayoutParams(if (standalone) LinearLayout.LayoutParams.WRAP_CONTENT else toPx(44), toPx(ImeGeometryTokens.TOUCH_TARGET_DP))) + } val initialDescription = "$labelText,${seekBar.progress}$suffix" valueView.text = "${seekBar.progress}$suffix" @@ -928,13 +938,13 @@ internal class SettingsPanelController( LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, toPx(ImeGeometryTokens.TOUCH_TARGET_DP), - ).apply { bottomMargin = toPx(12) } + ).apply { bottomMargin = toPx(if (standalone) ImeSpacingTokens.XL_DP else ImeSpacingTokens.MD_DP) } private fun groupParams() = LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, - ).apply { bottomMargin = toPx(12) } + ).apply { bottomMargin = toPx(if (standalone) ImeSpacingTokens.XL_DP else ImeSpacingTokens.MD_DP) } private fun wrapParams() = LinearLayout.LayoutParams( diff --git a/app/src/main/java/llc/slacker/openime/setup/SetupUi.kt b/app/src/main/java/llc/slacker/openime/setup/SetupUi.kt index be137867..9f2c7154 100644 --- a/app/src/main/java/llc/slacker/openime/setup/SetupUi.kt +++ b/app/src/main/java/llc/slacker/openime/setup/SetupUi.kt @@ -21,7 +21,6 @@ import llc.slacker.openime.theme.AccentPalette import llc.slacker.openime.theme.ImeAppearance import llc.slacker.openime.theme.ImeDrawableFactory import llc.slacker.openime.theme.ImeGeometryTokens -import llc.slacker.openime.theme.ImeReferenceSizing import llc.slacker.openime.theme.ImeSpacingTokens import llc.slacker.openime.theme.ImeSurfacePolicy import llc.slacker.openime.theme.ImeTheme @@ -39,11 +38,6 @@ object SetupUi { ImeAppearance.SYSTEM -> configuration.uiMode and android.content.res.Configuration.UI_MODE_NIGHT_MASK } configuration.uiMode = (configuration.uiMode and android.content.res.Configuration.UI_MODE_NIGHT_MASK.inv()) or night - val metrics = context.resources.displayMetrics - val density = metrics.density * ImeReferenceSizing.scale(context) - configuration.densityDpi = kotlin.math.round(density * 160f).toInt() - configuration.screenWidthDp = kotlin.math.round(metrics.widthPixels / density).toInt() - configuration.screenHeightDp = kotlin.math.round(metrics.heightPixels / density).toInt() return context.createConfigurationContext(configuration) } @@ -54,13 +48,20 @@ object SetupUi { fun accent(context: Context): Int = tokensForAccent(context).primary + internal fun primaryButtonColor(context: Context): Int = + ImeSurfacePolicy.accentTextOn(accent(context), Color.WHITE) + + internal fun secondaryTextColor(context: Context): Int = tokens(context).let { + ImeSurfacePolicy.accentTextOn(it.primary, ImeSurfacePolicy.subtleAccentSurface(it)) + } + private fun tokensForAccent(context: Context): ImeTheme.Tokens = ImeTheme.IOS.tokens( ImeSettingsRepository.loadAppearance(context), context.resources.configuration.uiMode and android.content.res.Configuration.UI_MODE_NIGHT_MASK == android.content.res.Configuration.UI_MODE_NIGHT_YES, AccentPalette.parse(ImeSettingsRepository.loadSkinColor(context)), ) - private fun tokens(context: Context): ImeTheme.Tokens { + internal fun tokens(context: Context): ImeTheme.Tokens { val nightMask = context.resources.configuration.uiMode and android.content.res.Configuration.UI_MODE_NIGHT_MASK @@ -73,6 +74,19 @@ object SetupUi { fun contrastText(background: Int): Int = ImeDrawableFactory.contrastText(background) + internal fun keyBackground(context: Context) = tokens(context).let { t -> + val radius = dp(context, ImeGeometryTokens.KEY_RADIUS_DP) + ImeDrawableFactory.keyCap( + ImeDrawableFactory.statefulRounded( + t.keyBackground, + t.keyPressedBackground, + radius, t.primary, dp(context, 1), + ), + t.border, + radius, dp(context, 1), + ) + } + fun rounded( color: Int, radiusPx: Float, @@ -91,7 +105,7 @@ object SetupUi { fun buttonBackground( context: Context, color: Int, - radiusDp: Float = ImeGeometryTokens.CONTROL_RADIUS_DP.toFloat(), + radiusDp: Float = ImeGeometryTokens.PILL_RADIUS_DP.toFloat(), ): StateListDrawable { val pressed = if (color == accent(context)) tokens(context).accentPressed else dim(color, 0.86f) @@ -129,12 +143,13 @@ object SetupUi { } } - /** Secondary rounded-rectangle control used by setup actions. */ + /** Tinted secondary action, sharing the primary button's capsule shape. */ fun secondaryBackground(context: Context): StateListDrawable { - val surface = context.getColor(R.color.setup_muted) - val pressed = context.getColor(R.color.setup_muted_pressed) + val t = tokens(context) + val surface = ImeSurfacePolicy.subtleAccentSurface(t) + val pressed = ImeSurfacePolicy.pressedSurface(surface, t) val accent = accent(context) - val radius = dp(context, ImeGeometryTokens.CONTROL_RADIUS_DP).toFloat() + val radius = dp(context, ImeGeometryTokens.PILL_RADIUS_DP).toFloat() return StateListDrawable().apply { addState( intArrayOf(android.R.attr.state_enabled, android.R.attr.state_pressed), @@ -170,7 +185,7 @@ object SetupUi { setPadding(dp(context, 8), 0, dp(context, 8), 0) val accent = accent(context) background = secondaryBackground(context) - setTextColor(context.getColor(R.color.setup_title)) + setTextColor(secondaryTextColor(context)) setOnClickListener { performHapticFeedback(android.view.HapticFeedbackConstants.VIRTUAL_KEY) onClick() @@ -223,8 +238,8 @@ object SetupUi { minHeight = dp(context, ImeGeometryTokens.PRIMARY_ROW_HEIGHT_DP) background = buttonBackground( context, - accent(context), - ImeGeometryTokens.CONTROL_RADIUS_DP.toFloat(), + primaryButtonColor(context), + ImeGeometryTokens.PILL_RADIUS_DP.toFloat(), ) val accent = accent(context) setTextColor( @@ -235,7 +250,7 @@ object SetupUi { ), intArrayOf( context.getColor(R.color.setup_muted_text), - contrastText(accent), + Color.WHITE, ), ), ) @@ -308,8 +323,8 @@ object SetupUi { LinearLayout(context).apply { orientation = LinearLayout.HORIZONTAL gravity = Gravity.CENTER_VERTICAL - minimumHeight = dp(context, ImeGeometryTokens.TOP_BAR_HEIGHT_DP) - setPadding(dp(context, 4), 0, dp(context, 4), 0) + minimumHeight = context.resources.getDimensionPixelSize(R.dimen.setup_top_bar_height) + setPadding(dp(context, ImeSpacingTokens.LG_DP), 0, dp(context, ImeSpacingTokens.LG_DP), 0) addView( ImageButton(context).apply { @@ -353,6 +368,8 @@ object SetupUi { TextView(context).apply { text = title textSize = ImeTypographyTokens.TITLE_SP + maxLines = 1 + ellipsize = android.text.TextUtils.TruncateAt.END setTextColor(context.getColor(R.color.setup_title)) typeface = android.graphics.Typeface.DEFAULT_BOLD gravity = Gravity.CENTER_VERTICAL diff --git a/app/src/main/java/llc/slacker/openime/theme/ImeDesignTokens.kt b/app/src/main/java/llc/slacker/openime/theme/ImeDesignTokens.kt index fd186d3f..90c51afa 100644 --- a/app/src/main/java/llc/slacker/openime/theme/ImeDesignTokens.kt +++ b/app/src/main/java/llc/slacker/openime/theme/ImeDesignTokens.kt @@ -25,14 +25,14 @@ internal object ImeGeometryTokens { const val TOUCH_TARGET_DP = 48 const val FIELD_HEIGHT_DP = 56 - const val PRIMARY_ROW_HEIGHT_DP = 56 + const val PRIMARY_ROW_HEIGHT_DP = 52 const val SETTING_ROW_HEIGHT_DP = 56 const val TOOL_CARD_HEIGHT_DP = 92 const val VOICE_CONTROL_HEIGHT_DP = TOUCH_TARGET_DP - const val SWITCH_WIDTH_DP = 48 - const val SWITCH_HEIGHT_DP = 28 - const val SWITCH_KNOB_DP = 20 - const val SWITCH_PADDING_DP = 4 + const val SWITCH_WIDTH_DP = 51 + const val SWITCH_HEIGHT_DP = 31 + const val SWITCH_KNOB_DP = 27 + const val SWITCH_PADDING_DP = 2 const val SWITCH_KNOB_TRAVEL_DP = SWITCH_WIDTH_DP - SWITCH_PADDING_DP * 2 - SWITCH_KNOB_DP const val KEY_GAP_DP = 6 const val KEY_ROW_GAP_DP = KEY_GAP_DP @@ -296,6 +296,12 @@ internal object ImeSurfacePolicy { fun destructiveLabel(tokens: ImeTheme.Tokens): Int = if (isDark(tokens)) Color.parseColor("#FF6771") else Color.parseColor("#D60016") + /** iOS-style switch track: green when on, neutral grey when off. */ + fun switchTrack(on: Boolean, tokens: ImeTheme.Tokens): Int = when { + on -> if (isDark(tokens)) Color.parseColor("#30D158") else Color.parseColor("#34C759") + else -> if (isDark(tokens)) Color.parseColor("#39393D") else Color.parseColor("#E9E9EB") + } + fun destructiveText(tokens: ImeTheme.Tokens): Int { val surface = destructiveSurface(tokens) return if (ImeContrastPolicy.contrastRatio(tokens.destructive, surface) >= 4.5) { diff --git a/app/src/main/java/llc/slacker/openime/theme/ImeDrawableFactory.kt b/app/src/main/java/llc/slacker/openime/theme/ImeDrawableFactory.kt index 191304c8..0f12f067 100644 --- a/app/src/main/java/llc/slacker/openime/theme/ImeDrawableFactory.kt +++ b/app/src/main/java/llc/slacker/openime/theme/ImeDrawableFactory.kt @@ -3,6 +3,8 @@ package llc.slacker.openime.theme import android.graphics.Color import android.graphics.drawable.GradientDrawable import android.graphics.drawable.StateListDrawable +import android.graphics.drawable.Drawable +import android.graphics.drawable.LayerDrawable import llc.slacker.openime.R /** @@ -10,6 +12,12 @@ import llc.slacker.openime.R * Radius and stroke values are pixels; callers keep density conversion. */ internal object ImeDrawableFactory { + /** The same one-dp bottom edge as the keyboard's key caps. */ + fun keyCap(face: Drawable, edgeColor: Int, radiusPx: Int, edgePx: Int): LayerDrawable = + LayerDrawable(arrayOf(rounded(edgeColor, radiusPx), face)).apply { + setLayerInset(1, 0, 0, 0, edgePx.coerceAtLeast(1)) + } + fun rounded( color: Int, radiusPx: Int, diff --git a/app/src/main/java/llc/slacker/openime/voice/LocalAudioVoiceBackend.kt b/app/src/main/java/llc/slacker/openime/voice/LocalAudioVoiceBackend.kt index 45c8b9a2..b8d70de7 100644 --- a/app/src/main/java/llc/slacker/openime/voice/LocalAudioVoiceBackend.kt +++ b/app/src/main/java/llc/slacker/openime/voice/LocalAudioVoiceBackend.kt @@ -11,7 +11,6 @@ import android.os.SystemClock import android.util.Log import llc.slacker.openime.hotword.HotwordRuntime import java.util.concurrent.Executors -import java.util.concurrent.TimeUnit import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicLong import kotlin.math.sqrt @@ -48,7 +47,7 @@ class PcmRingBuffer(private val capacitySamples: Int) { var sourceOffset = offset var accepted = length if (accepted >= capacitySamples) { - droppedSamples += (accepted - capacitySamples).toLong() + droppedSamples += count.toLong() + (accepted - capacitySamples).toLong() sourceOffset += accepted - capacitySamples accepted = capacitySamples readIndex = 0 @@ -63,10 +62,10 @@ class PcmRingBuffer(private val capacitySamples: Int) { droppedSamples += overflow.toLong() } - repeat(accepted) { index -> - buffer[writeIndex] = samples[sourceOffset + index] - writeIndex = (writeIndex + 1) % capacitySamples - } + val first = minOf(accepted, capacitySamples - writeIndex) + samples.copyInto(buffer, writeIndex, sourceOffset, sourceOffset + first) + samples.copyInto(buffer, 0, sourceOffset + first, sourceOffset + accepted) + writeIndex = (writeIndex + accepted) % capacitySamples count += accepted (this as java.lang.Object).notifyAll() return accepted @@ -76,6 +75,19 @@ class PcmRingBuffer(private val capacitySamples: Int) { @Synchronized fun awaitAndDrain(maxSamples: Int, timeoutMs: Long): ShortArray { require(maxSamples > 0) { "maxSamples must be positive" } + awaitDataLocked(timeoutMs) + return drainLocked(maxSamples) + } + + /** Drain into the inference worker's reusable PCM block. */ + @Synchronized + internal fun awaitAndDrainInto(target: ShortArray, offset: Int, timeoutMs: Long): Int { + require(offset >= 0 && offset < target.size) { "invalid PCM target offset" } + awaitDataLocked(timeoutMs) + return drainIntoLocked(target, offset, target.size - offset) + } + + private fun awaitDataLocked(timeoutMs: Long) { if (count == 0 && timeoutMs > 0) { try { (this as java.lang.Object).wait(timeoutMs) @@ -83,7 +95,6 @@ class PcmRingBuffer(private val capacitySamples: Int) { Thread.currentThread().interrupt() } } - return drainLocked(maxSamples) } @Synchronized @@ -109,13 +120,19 @@ class PcmRingBuffer(private val capacitySamples: Int) { val take = minOf(maxSamples, count) if (take == 0) return ShortArray(0) val result = ShortArray(take) - repeat(take) { index -> - result[index] = buffer[readIndex] - readIndex = (readIndex + 1) % capacitySamples - } - count -= take + drainIntoLocked(result, 0, take) return result } + + private fun drainIntoLocked(target: ShortArray, offset: Int, maxSamples: Int): Int { + val take = minOf(maxSamples, count) + val first = minOf(take, capacitySamples - readIndex) + buffer.copyInto(target, offset, readIndex, readIndex + first) + buffer.copyInto(target, offset + first, 0, take - first) + readIndex = (readIndex + take) % capacitySamples + count -= take + return take + } } /** Android/ASR audio constants kept in one place for model integration. */ @@ -183,8 +200,8 @@ class LocalAudioVoiceBackend( private val startGeneration = AtomicLong(0L) private val stopRequestedGeneration = AtomicLong(-1L) private val stopRequestedAtMs = AtomicLong(0L) - private val stopExecutor = Executors.newSingleThreadScheduledExecutor { runnable -> - Thread(runnable, "local-voice-tail-stop").apply { isDaemon = true } + private val stopExecutor = Executors.newSingleThreadExecutor { runnable -> + Thread(runnable, "local-voice-capture-stop").apply { isDaemon = true } } private val routeManager = VoiceAudioRouteManager(context) @@ -333,7 +350,12 @@ class LocalAudioVoiceBackend( } startCaptureThread(session) events.onReady() - if (session.stopRequested.get()) scheduleCaptureStop(session, generation) + if (session.stopRequested.get()) dispatchCaptureStop(session, generation) + + if (session.cancelled.get() || session.failed.get()) { + cleanupStartingSession(session) + return + } // Waiting for verification/model mapping is safe here: capture is // already live and the bounded ring keeps the spoken prefix. @@ -371,7 +393,7 @@ class LocalAudioVoiceBackend( if (current == null) return current.releaseAtMs = releasedAt current.stopRequested.set(true) - if (current.running.get()) scheduleCaptureStop(current, generation) + if (current.running.get()) dispatchCaptureStop(current, generation) if (current.modelReady.get()) startInferenceThread(current) // If the first model load is still running, initializeSession keeps // this session alive, then drains the buffered PCM and emits one final. @@ -421,22 +443,18 @@ class LocalAudioVoiceBackend( session.captureThread?.interrupt() } - private fun scheduleCaptureStop(session: Session, generation: Long) { + private fun dispatchCaptureStop(session: Session, generation: Long) { if (!session.captureStopScheduled.compareAndSet(false, true)) return - stopExecutor.schedule( - { - if ( - isCurrent(generation, session) && - session.stopRequested.get() && - !session.cancelled.get() && - !session.failed.get() - ) { - requestCaptureStop(session) - } - }, - TAIL_CAPTURE_MILLIS, - TimeUnit.MILLISECONDS, - ) + stopExecutor.execute { + if ( + isCurrent(generation, session) && + session.stopRequested.get() && + !session.cancelled.get() && + !session.failed.get() + ) { + requestCaptureStop(session) + } + } } private fun startCaptureThread(session: Session) { @@ -459,6 +477,7 @@ class LocalAudioVoiceBackend( when { read > 0 -> { VoicePerformanceTrace.markFirstPcm(session.traceToken) + session.capturedSamples.addAndGet(read.toLong()) val droppedBefore = session.ring.droppedSamples session.ring.offer(pcm, 0, read) if ( @@ -469,6 +488,8 @@ class LocalAudioVoiceBackend( TAG, "PCM pipeline degraded droppedPcmSamples=${session.ring.droppedSamples}", ) + fail(session, "语音处理跟不上录音,音频不完整,请分短句重试") + break } var sum = 0.0 repeat(read) { index -> @@ -491,33 +512,40 @@ class LocalAudioVoiceBackend( // to be offered to the ring before ASR finalization. session.ring.wake() runCatching { session.record.release() } + val captureDelay = if (session.releaseAtMs > 0L) { + SystemClock.elapsedRealtime() - session.releaseAtMs + } else { + -1L + } + Log.i(TAG, "captureFinished releaseToCaptureMs=$captureDelay capturedSamples=${session.capturedSamples.get()}") + session.events.onCaptureStopped() } } private fun inferenceLoop(session: Session) { val voiceSession = checkNotNull(session.voiceSession) { "本地语音模型尚未连接" } val pending = ShortArray(LocalVoiceAudioSpec.CHUNK_SAMPLES) + val waveform = FloatArray(LocalVoiceAudioSpec.CHUNK_SAMPLES) var pendingCount = 0 + var decodedSamples = 0L try { while (!session.captureFinished.get() || session.ring.size > 0) { - val part = session.ring.awaitAndDrain( - LocalVoiceAudioSpec.CHUNK_SAMPLES - pendingCount, - 50, - ) - if (part.isNotEmpty()) { - part.copyInto(pending, pendingCount) - pendingCount += part.size - } + if (session.cancelled.get() || session.failed.get()) return + pendingCount += session.ring.awaitAndDrainInto(pending, pendingCount, 50) if (pendingCount == 0) continue if (pendingCount < pending.size && !session.captureFinished.get()) continue - val chunk = pending.copyOf(pendingCount) + val chunk = if (pendingCount == waveform.size) waveform else FloatArray(pendingCount) + repeat(pendingCount) { index -> chunk[index] = pending[index] / 32768f } pendingCount = 0 VoicePerformanceTrace.markFirstDecode(session.traceToken) - voiceSession.acceptWaveform(pcm16ToFloat(chunk)) + voiceSession.acceptWaveform(chunk) + decodedSamples += chunk.size } + if (session.cancelled.get() || session.failed.get()) return if (pendingCount > 0) { VoicePerformanceTrace.markFirstDecode(session.traceToken) voiceSession.acceptWaveform(pcm16ToFloat(pending.copyOf(pendingCount))) + decodedSamples += pendingCount } if ( !session.failed.get() && @@ -530,6 +558,7 @@ class LocalAudioVoiceBackend( TAG, "inputFinished begin releaseAtMs=${session.releaseAtMs} " + "nowMs=$finalizeStartedAt ringRemainingSamples=$remainingBeforeFinish " + + "capturedSamples=${session.capturedSamples.get()} decodedSamples=$decodedSamples " + "droppedSamples=${session.ring.droppedSamples} " + "lastPartialLength=${session.lastPartial.length}", ) @@ -591,6 +620,7 @@ class LocalAudioVoiceBackend( var voiceSession: StreamingVoiceModelSession? = null val running = AtomicBoolean(false) val captureFinished = AtomicBoolean(false) + val capturedSamples = AtomicLong(0L) val stopRequested = AtomicBoolean(false) val cancelled = AtomicBoolean(false) val modelReady = AtomicBoolean(false) @@ -608,6 +638,5 @@ class LocalAudioVoiceBackend( private companion object { const val TAG = "OpenImeVoicePerf" - const val TAIL_CAPTURE_MILLIS = 300L } } diff --git a/app/src/main/java/llc/slacker/openime/voice/VoiceMediaMuteController.kt b/app/src/main/java/llc/slacker/openime/voice/VoiceMediaMuteController.kt index 80fa9ab4..b644695c 100644 --- a/app/src/main/java/llc/slacker/openime/voice/VoiceMediaMuteController.kt +++ b/app/src/main/java/llc/slacker/openime/voice/VoiceMediaMuteController.kt @@ -137,5 +137,6 @@ internal class VoiceMediaMuteController(context: Context) { }.onFailure { Log.w(TAG, "restoreFailed", it) } + Log.i(TAG, "mediaRestored") } } diff --git a/app/src/main/java/llc/slacker/openime/voice/VoiceModelLifecycleManager.kt b/app/src/main/java/llc/slacker/openime/voice/VoiceModelLifecycleManager.kt index 0112dfa6..ebaf5c37 100644 --- a/app/src/main/java/llc/slacker/openime/voice/VoiceModelLifecycleManager.kt +++ b/app/src/main/java/llc/slacker/openime/voice/VoiceModelLifecycleManager.kt @@ -109,9 +109,10 @@ internal object VoiceMemoryAdmissionPolicy { // memoryClass does not cap native ONNX allocations, but an extremely // small heap class is a strong signal that loading a 400+ MB runtime is // unsafe even when cached pages temporarily make availMem look large. + // Punctuation is native too; do not treat its size as a Java heap limit. if ( snapshot.memoryClassBytes > 0L && - snapshot.memoryClassBytes < requiredMemory / 2L + snapshot.memoryClassBytes < minOf(requiredMemory / 2L, 256L * 1024L * 1024L) ) { return VoiceMemoryAdmission( false, @@ -385,6 +386,10 @@ class VoiceModelLifecycleManager( events.onModelReady() } } + + override fun onCaptureStopped() { + if (isCurrentSession(token)) events.onCaptureStopped() + } }) } diff --git a/app/src/main/java/llc/slacker/openime/voice/VoicePanelController.kt b/app/src/main/java/llc/slacker/openime/voice/VoicePanelController.kt index f5d68f02..4a2b47c9 100644 --- a/app/src/main/java/llc/slacker/openime/voice/VoicePanelController.kt +++ b/app/src/main/java/llc/slacker/openime/voice/VoicePanelController.kt @@ -101,7 +101,7 @@ internal class VoicePanelController( "松开空格结束语音并自动上屏,上滑取消", ) setModelStatus("正在使用离线模型 · 音频不出设备") - setTranscript("正在聆听… 松开空格结束") + setTranscript("正在准备麦克风…") listener.onVoiceSessionStarted(true) listener.startVoiceRecognition( @@ -118,7 +118,7 @@ internal class VoicePanelController( stopRequested = true refreshLanguageControl() setModelStatus("正在整理识别结果…") - onInlineState("正在识别…", false, false, null) + onInlineState(recognizedText.ifBlank { "正在转写已录音频…" }, false, false, null) } fun cancel() { @@ -212,7 +212,7 @@ internal class VoicePanelController( "整理识别结果…", "正在整理语音识别结果,请稍候", ) - onInlineState("正在识别…", false, false, null) + onInlineState(text.ifBlank { "正在转写已录音频…" }, false, false, null) } else { setModelStatus("正在聆听 · 松开空格结束") setMicState(R.drawable.ic_stop, "语音输入进行中,松开空格结束,上滑取消") @@ -330,6 +330,7 @@ internal class VoicePanelController( override fun onReady() { expandedPanel.post { if (generation != eventGeneration || cancelled) return@post + pending = false if (active && !stopRequested) { setMicState(R.drawable.ic_stop, "语音输入进行中,松开空格结束,上滑取消") setGestureHint( @@ -337,6 +338,7 @@ internal class VoicePanelController( "松开空格结束语音并自动上屏,上滑取消", ) setModelStatus("正在录音 · 本地模型准备中") + setTranscript("可以说话了 · 松开空格结束") onInlineState( "正在录音 · 模型准备中…", false, @@ -355,6 +357,13 @@ internal class VoicePanelController( } } + override fun onCaptureStopped() { + expandedPanel.post { + if (generation != eventGeneration || !active || cancelled) return@post + listener.onVoiceCaptureStopped() + } + } + override fun onModelReady() { expandedPanel.post { if (generation != eventGeneration) return@post @@ -434,6 +443,7 @@ internal class VoicePanelController( } private fun conciseVoiceError(message: String): String = when { + message.contains("音频不完整") -> "语音不完整 · 请分短句重试" message.contains("模型") -> "语音不可用 · 请检查本地模型" message.contains("麦克风") || message.contains("权限") -> "语音不可用 · 请检查麦克风权限" diff --git a/app/src/main/java/llc/slacker/openime/voice/VoiceRecognitionBackend.kt b/app/src/main/java/llc/slacker/openime/voice/VoiceRecognitionBackend.kt index 46bad2db..955321c4 100644 --- a/app/src/main/java/llc/slacker/openime/voice/VoiceRecognitionBackend.kt +++ b/app/src/main/java/llc/slacker/openime/voice/VoiceRecognitionBackend.kt @@ -7,6 +7,9 @@ import com.k2fsa.sherpa.onnx.OnlineModelConfig import com.k2fsa.sherpa.onnx.OnlineParaformerModelConfig import com.k2fsa.sherpa.onnx.OnlineRecognizer import com.k2fsa.sherpa.onnx.OnlineRecognizerConfig +import com.k2fsa.sherpa.onnx.OfflinePunctuation +import com.k2fsa.sherpa.onnx.OfflinePunctuationConfig +import com.k2fsa.sherpa.onnx.OfflinePunctuationModelConfig import com.k2fsa.sherpa.onnx.OnlineStream import java.io.File import java.util.concurrent.atomic.AtomicBoolean @@ -23,6 +26,8 @@ interface VoiceRecognitionEvents { fun onError(message: String) /** Microphone capture is live; model loading may still be in progress. */ fun onReady() + /** Capture has ended; decoding may still be draining buffered audio. */ + fun onCaptureStopped() {} /** The buffered audio is now connected to the local recognizer. */ fun onModelReady() {} } @@ -184,6 +189,7 @@ private class SherpaOnnxStreamingRuntime( private var modelFiles: SherpaRuntimeModelFiles? = resolveSherpaRuntimeModelFiles(initialSelection, downloadedRoot) private var recognizer: OnlineRecognizer? = null + private var punctuation: OfflinePunctuation? = null private val activeSessions = mutableSetOf() private var legacySession: SherpaSession? = null @@ -250,6 +256,8 @@ private class SherpaOnnxStreamingRuntime( legacySession = null recognizer?.release() recognizer = null + punctuation?.release() + punctuation = null } private fun ensureRecognizerLocked(): OnlineRecognizer { @@ -322,6 +330,10 @@ private class SherpaOnnxStreamingRuntime( // silence before InputFinished so the last chunk can flush. currentStream.acceptWaveform(FloatArray(PARAFORMER_TAIL_PADDING_SAMPLES), SAMPLE_RATE) currentStream.inputFinished() + // InputFinished ends feature extraction, but Paraformer's + // IsReady accepts the remaining short chunk only with this + // option. Otherwise already-recorded tail frames stay undecoded. + currentStream.setOption("is_final", "1") val decoded = decodeReadyLocked(currentRecognizer, currentStream) val recognizerFinal = currentRecognizer.getResult(currentStream).text.trim() val usedFallback = recognizerFinal.isBlank() && lastPartial.isNotBlank() @@ -340,7 +352,40 @@ private class SherpaOnnxStreamingRuntime( return result } - override fun punctuate(text: String): String = VoiceTextProcessor.process(text, languageTag) + override fun punctuate(text: String): String { + val policy = VoiceTextProcessingPolicy( + autoTerminalPunctuation = VoiceEditorContext.allowNaturalPunctuation(), + stripFillers = VoiceEditorContext.stripFillers(), + punctuationAsSpace = VoiceEditorContext.punctuationAsSpace(), + ) + val prepared = VoiceTextProcessor.process(text, languageTag, policy.copy( + autoTerminalPunctuation = false, punctuationAsSpace = false, + )) + // Preserve explicitly dictated marks and structured editor values. + val restored = if (policy.autoTerminalPunctuation && prepared.none { it in ",。!?;:,.!?;:" }) { + synchronized(runtimeLock) { + checkOpenLocked() + runCatching { + val model = punctuation ?: OfflinePunctuation(context.assets, + OfflinePunctuationConfig(model = OfflinePunctuationModelConfig( + ctTransformer = "models/voice/punctuation/model.int8.onnx", + numThreads = 2, + )), + ).also { punctuation = it } + model.addPunctuation(prepared) + }.onFailure { Log.w("OpenImeVoicePerf", "punctuation failed; keeping transcript", it) } + .getOrNull() + } + } else null + val normalized = if (prepared.none { it in '\u4e00'..'\u9fff' }) { + (restored ?: prepared).replace(',', ',').replace('。', '.') + .replace('?', '?').replace('!', '!').replace(':', ':').replace(';', ';') + } else restored ?: prepared + return VoiceTextProcessor.process(normalized, languageTag, policy.copy( + autoTerminalPunctuation = restored == null && policy.autoTerminalPunctuation, + stripFillers = false, + )) + } override fun close() { synchronized(runtimeLock) { diff --git a/app/src/main/java/llc/slacker/openime/voice/VoiceSessionHost.kt b/app/src/main/java/llc/slacker/openime/voice/VoiceSessionHost.kt index 681dac1b..2cc67993 100644 --- a/app/src/main/java/llc/slacker/openime/voice/VoiceSessionHost.kt +++ b/app/src/main/java/llc/slacker/openime/voice/VoiceSessionHost.kt @@ -8,6 +8,7 @@ package llc.slacker.openime.voice interface VoiceSessionHost { /** Kept for compatibility; production voice always commits on release of space. */ fun onVoiceSessionStarted(autoCommitOnFinal: Boolean) {} + fun onVoiceCaptureStopped() {} fun onVoicePartial(text: String) {} fun onVoiceFinal(text: String) {} fun onVoiceError(message: String) {} diff --git a/app/src/main/java/llc/slacker/openime/voice/VoiceTextProcessor.kt b/app/src/main/java/llc/slacker/openime/voice/VoiceTextProcessor.kt index c7cd1e45..90017cc1 100644 --- a/app/src/main/java/llc/slacker/openime/voice/VoiceTextProcessor.kt +++ b/app/src/main/java/llc/slacker/openime/voice/VoiceTextProcessor.kt @@ -9,8 +9,8 @@ internal data class VoiceTextProcessingPolicy( /** * Fast, deterministic post-processing kept between ASR and InputConnection. * - * The APK currently ships a streaming recognition model without a separate - * punctuation model. Spoken punctuation is interpreted conservatively and + * The streaming runtime restores punctuation before this final formatting step. + * Spoken punctuation is interpreted conservatively and * terminal punctuation is enabled only for prose-like EditorInfo contexts. */ object VoiceTextProcessor { @@ -80,7 +80,7 @@ object VoiceTextProcessor { if ( policy.autoTerminalPunctuation && text.length >= 4 && - text.last() !in "。!?…" + text.last() !in "。!?….!?" ) { text += if (text.endsWith("吗") || text.endsWith("呢") || text.endsWith("么")) { "?" @@ -127,6 +127,8 @@ object VoiceTextProcessor { private fun punctuationToSpaces(value: String): String { var text = value .replace(Regex("[,。!?;:、]+|…+|—{2,}"), " ") + // ASCII clause marks next to Chinese are punctuation too. + .replace(Regex("(?<=[\\u4e00-\\u9fff])[,.!?;:]+|[,.!?;:]+(?=[\\u4e00-\\u9fff])"), " ") // Latin marks only when they end a word, so 3.5 and a.b stay intact. .replace(Regex("(?<=\\S)[,.!?;:]+(?=\\s|$)"), " ") text = text.replace(Regex("\\s+"), " ").trim() @@ -155,7 +157,7 @@ object VoiceTextProcessor { private fun collapsePunctuation(value: String): String = value .replace(Regex("[。]{2,}"), "。") - .replace(Regex("[!!]{2,}"), "!") - .replace(Regex("[??]{2,}"), "?") - .replace(Regex("[,,]{2,}"), ",") + .replace(Regex("[!!]{2,}")) { it.value.take(1) } + .replace(Regex("[??]{2,}")) { it.value.take(1) } + .replace(Regex("[,,]{2,}")) { it.value.take(1) } } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index e0a6444b..6c8880c4 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,55 +1,61 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +