46f6d818b8
Present the skipped 1.7 work as one user-focused 1.8 update and record the real keyboard UI for AI, clipboard, and skills walkthroughs.
681 lines
34 KiB
HTML
681 lines
34 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-Hans" data-theme="light">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
||
<title>OSGKeyboard — What's New / 更新说明</title>
|
||
<meta name="robots" content="noindex">
|
||
<meta name="color-scheme" content="light dark">
|
||
<style>
|
||
:root {
|
||
--bg: #f7f7f5;
|
||
--text: #1a1a1a;
|
||
--text-secondary: #5c5c5c;
|
||
--text-tertiary: #8a8a8a;
|
||
--card: #ffffff;
|
||
--border: rgba(0, 0, 0, 0.08);
|
||
--accent: #2f6fed;
|
||
--chip-bg: rgba(47, 111, 237, 0.1);
|
||
}
|
||
|
||
html[data-theme="dark"] {
|
||
--bg: #0a0a0b;
|
||
--text: #f2f2f2;
|
||
--text-secondary: #b0b0b0;
|
||
--text-tertiary: #7a7a7a;
|
||
--card: #161618;
|
||
--border: rgba(255, 255, 255, 0.1);
|
||
--accent: #6b9fff;
|
||
--chip-bg: rgba(107, 159, 255, 0.16);
|
||
}
|
||
|
||
* { box-sizing: border-box; }
|
||
|
||
html, body {
|
||
margin: 0;
|
||
padding: 0;
|
||
background: var(--bg);
|
||
color: var(--text);
|
||
font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "PingFang SC",
|
||
"Hiragino Sans GB", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||
-webkit-text-size-adjust: 100%;
|
||
line-height: 1.5;
|
||
}
|
||
|
||
body {
|
||
/* Fixed bottom padding only — App WKWebView already lays out above the home indicator. */
|
||
padding: 20px 16px 28px;
|
||
max-width: 720px;
|
||
margin: 0 auto;
|
||
}
|
||
|
||
.page-header {
|
||
margin-bottom: 20px;
|
||
}
|
||
|
||
.page-header h1 {
|
||
margin: 0 0 6px;
|
||
font-size: 1.5rem;
|
||
font-weight: 700;
|
||
letter-spacing: -0.02em;
|
||
}
|
||
|
||
.page-header .subtitle {
|
||
margin: 0;
|
||
color: var(--text-secondary);
|
||
font-size: 0.95rem;
|
||
}
|
||
|
||
.empty {
|
||
display: none;
|
||
margin-top: 40px;
|
||
text-align: center;
|
||
color: var(--text-secondary);
|
||
font-size: 0.95rem;
|
||
}
|
||
|
||
.empty.visible { display: block; }
|
||
|
||
.version-block {
|
||
display: none;
|
||
background: var(--card);
|
||
border: 1px solid var(--border);
|
||
border-radius: 16px;
|
||
padding: 18px 16px 8px;
|
||
margin-bottom: 16px;
|
||
}
|
||
|
||
.version-block.visible { display: block; }
|
||
|
||
.version-chip {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
padding: 4px 10px;
|
||
border-radius: 999px;
|
||
background: var(--chip-bg);
|
||
color: var(--accent);
|
||
font-size: 0.8rem;
|
||
font-weight: 650;
|
||
letter-spacing: 0.01em;
|
||
margin-bottom: 14px;
|
||
}
|
||
|
||
.section { margin-bottom: 16px; }
|
||
|
||
.section h2 {
|
||
margin: 0 0 8px;
|
||
font-size: 1.05rem;
|
||
font-weight: 700;
|
||
}
|
||
|
||
.group { margin-bottom: 12px; }
|
||
|
||
.group-title {
|
||
margin: 0 0 6px;
|
||
font-size: 0.95rem;
|
||
font-weight: 650;
|
||
color: var(--text);
|
||
}
|
||
|
||
ul {
|
||
margin: 0;
|
||
padding: 0 0 0 1.15em;
|
||
}
|
||
|
||
li {
|
||
margin: 0 0 6px;
|
||
color: var(--text-secondary);
|
||
font-size: 0.92rem;
|
||
}
|
||
|
||
li strong {
|
||
color: var(--text);
|
||
font-weight: 600;
|
||
}
|
||
|
||
.lang-block { display: none; }
|
||
.lang-block.visible { display: block; }
|
||
|
||
/* Inline demo media directly under a group title. */
|
||
.wn-media {
|
||
margin: 2px 0 12px;
|
||
text-align: center;
|
||
}
|
||
|
||
.wn-media video,
|
||
.wn-media img {
|
||
display: block;
|
||
width: 100%;
|
||
max-width: 260px;
|
||
height: auto;
|
||
margin: 0 auto;
|
||
border-radius: 14px;
|
||
border: 1px solid var(--border);
|
||
background: #000;
|
||
}
|
||
|
||
/* Landscape-ish clip (near-square) can sit a bit wider. */
|
||
.wn-media.wide video,
|
||
.wn-media.wide img {
|
||
max-width: 340px;
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<header class="page-header">
|
||
<div class="lang-block" data-lang="zh">
|
||
<h1>更新说明</h1>
|
||
<p class="subtitle">本页展示当前版本及更早版本的更新内容</p>
|
||
</div>
|
||
<div class="lang-block" data-lang="en">
|
||
<h1>What's New</h1>
|
||
<p class="subtitle">Notes for this version and earlier releases</p>
|
||
</div>
|
||
</header>
|
||
|
||
<p class="empty" id="empty-zh">暂无与当前版本匹配的更新说明。</p>
|
||
<p class="empty" id="empty-en">No release notes match this app version.</p>
|
||
|
||
<!-- ========== 1.8.0 ========== -->
|
||
<article class="version-block" data-version="1.8.0">
|
||
<div class="version-chip">1.8.0</div>
|
||
|
||
<div class="lang-block" data-lang="zh">
|
||
<section class="section">
|
||
<h2>新功能</h2>
|
||
|
||
<div class="group">
|
||
<p class="group-title">AI 与语音助手</p>
|
||
<div class="wn-media wide">
|
||
<video src="assets/whats-new/ai-voice-assistant-zh.mp4" autoplay muted loop playsinline preload="metadata"></video>
|
||
</div>
|
||
<ul>
|
||
<li>键盘可切换到 <strong>AI</strong>:对着麦克风提问,回答会在键盘中实时出现,方便查看后再写入</li>
|
||
<li>在即时通信等输入框中,先点白色<strong>「插入」</strong>,再点绿色<strong>「发送」</strong>;只有真正插入的内容会进入历史与字数统计</li>
|
||
<li>AI 空闲时会轮播常用提问和热点建议,点一下即可生成回答;需要天气、新闻等最新资料时会联网查找,失败会自动换方式重试</li>
|
||
<li>设置 → <strong>AI Agent</strong> 可调节<strong>「回复篇幅」</strong>:简短 / 中等 / 详细</li>
|
||
<li>刚输入过内容时,<strong>长按麦克风</strong>说出修改要求,可预览后替换原文或追加新内容</li>
|
||
<li>润色会保留原本的提问语气,不再把「你能听到吗」等问句改写成回答</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">剪贴板与技能</p>
|
||
<div class="wn-media wide">
|
||
<video src="assets/whats-new/clipboard-skills-zh.mp4" autoplay muted loop playsinline preload="metadata"></video>
|
||
</div>
|
||
<ul>
|
||
<li>在设置 → <strong>剪贴板</strong>开启<strong>「历史记录」</strong>(默认关闭),可在本机保存最近 15 条纯文本;页面也可直接前往系统设置,将「从其他 App 粘贴」设为允许</li>
|
||
<li>键盘顶栏的<strong>剪贴板</strong>按钮可打开历史,点一条即可插入;开启<strong>「建议条」</strong>后,最新复制内容会显示在键盘上方</li>
|
||
<li>复制文字后约 30 秒内切到 AI,可直接选择<strong>回复、总结或翻译</strong>;也可以说出「回复剪贴板」或「翻译剪贴板」</li>
|
||
<li>App 新增<strong>技能</strong>页,可管理最多 8 个键盘技能,并通过长按拖动调整顺序</li>
|
||
<li>右上角 <strong>+</strong> 可自定义技能名称、图标和提示词,也可连接自己的 iCloud 快捷指令</li>
|
||
<li>内置技能可从复制内容<strong>提取待办、写入日历、存入备忘录</strong>,或识别地址后打开高德、百度与 Apple 地图导航</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>全新 App 界面</h2>
|
||
<ul>
|
||
<li>首页改为信息总览:使用统计、听写历史和个性词库集中显示为资料卡,点按后使用标准返回按钮进入完整列表</li>
|
||
<li>iPhone 底部导航重做为 <strong>首页 / 技能 / 风格 / 设置</strong>四栏 Liquid Glass Dock,绿色胶囊清楚标示当前页面</li>
|
||
<li>技能与润色风格统一为卡片式管理:点按选择、右上角编辑、右下角显示启用状态;技能支持像主屏幕图标一样长按拖动排序</li>
|
||
<li>设置入口重新整理,AI Agent、剪贴板、语音与文字输入等页面更容易找到,当前设置摘要直接显示在导航行右侧</li>
|
||
<li>iPad 改为侧栏 + 内容区布局,增大导航触控区域并统一图标对齐;翻译移到麦克风旁与撤销对称,顶栏原位置改为剪贴板入口</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>中英文输入全面升级</h2>
|
||
<ul>
|
||
<li>英文键盘新增类 QuickType 候选栏,同时显示原词、纠错和补全;约 4 万词离线词表会结合系统词库、通讯录名称与文本替换提供建议</li>
|
||
<li>英文邻键纠错更贴合真实键盘位置,并减少对专名、短词和全大写词的误改;拒绝纠错后会学习保留原词</li>
|
||
<li>拼音优化 <code>wom</code> 等混合简拼排序,并支持 <code>zh</code>、<code>ch</code>、<code>sh</code> 两键简拼;中文候选频率和英文选择偏好会保存在本机</li>
|
||
<li>支持叠指连打、英文双空格句号,以及根据输入框显示前往、搜索、发送、完成、下一项等回车键文案</li>
|
||
<li>iPad 键盘横竖屏均铺满可用宽度,底行加入逗号、句号和系统地球键,并提供撤销、重做、复制和剪切</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>更稳定、更可控</h2>
|
||
<ul>
|
||
<li>听写、AI 回答、编辑结果和剪贴板粘贴现在都可通过同一个撤销键一次回滚</li>
|
||
<li>长按麦克风现在用于<strong>编辑上次输入</strong>;旧的长按剪贴板语音流程已由剪贴板历史和快捷技能替代</li>
|
||
<li>中文输入资源会在 App 中自动完成初始化,部署完成后已打开的键盘也会自行恢复,无需反复重启</li>
|
||
<li>修复跨设备剪贴板导致键盘卡住、切换键盘崩溃、录音取消不及时,以及 AI 会话结束后麦克风不可用等问题</li>
|
||
<li>默认继续使用设备端语音识别;AI 使用你自己的 API Key,未配置时首页和麦克风上方会提示;剪贴板默认关闭,内容只在你主动操作后交给所配置的服务商</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
|
||
<div class="lang-block" data-lang="en">
|
||
<section class="section">
|
||
<h2>New Features</h2>
|
||
|
||
<div class="group">
|
||
<p class="group-title">AI and voice assistant</p>
|
||
<div class="wn-media wide">
|
||
<video src="assets/whats-new/ai-voice-assistant-en.mp4" autoplay muted loop playsinline preload="metadata"></video>
|
||
</div>
|
||
<ul>
|
||
<li>Switch the keyboard to <strong>AI</strong>, ask with the microphone, and watch the answer appear on the keyboard before writing it into the current app</li>
|
||
<li>In messaging fields, tap white <strong>Insert</strong>, then green <strong>Send</strong>; only inserted answers count toward history and character statistics</li>
|
||
<li>Idle AI rotates useful prompts and current topics that can be sent with one tap; questions that need weather, news, or other current information use web search with automatic fallback</li>
|
||
<li>In Settings → <strong>AI Agent</strong>, choose <strong>Response length</strong>: Short / Medium / Detailed</li>
|
||
<li>Right after entering text, <strong>hold the microphone</strong>, describe the change, then preview and replace the original or append the result</li>
|
||
<li>Polish preserves your original question instead of rewriting prompts such as “Can you hear me?” into answers</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">Clipboard and Skills</p>
|
||
<div class="wn-media wide">
|
||
<video src="assets/whats-new/clipboard-skills-en.mp4" autoplay muted loop playsinline preload="metadata"></video>
|
||
</div>
|
||
<ul>
|
||
<li>Turn on <strong>History</strong> in Settings → <strong>Clipboard</strong> (off by default) to keep the latest 15 plain-text copies on this device; the same page opens system Settings for Paste from Other Apps permission</li>
|
||
<li>Open history from the keyboard's top-bar <strong>Clipboard</strong> button and tap an item to insert it; the optional <strong>Suggestion strip</strong> keeps the newest copy above the keyboard</li>
|
||
<li>Within about 30 seconds of copying text, switch to AI and choose <strong>Reply, Summarize, or Translate</strong>, or say “reply to the clipboard” or “translate my clipboard”</li>
|
||
<li>The new <strong>Skills</strong> page manages up to eight keyboard skills and reorders them with a long-press drag</li>
|
||
<li>Use the top-right <strong>+</strong> to create a skill with your own name, icon, and prompt, with an optional iCloud Shortcut connection</li>
|
||
<li>Built-in skills can <strong>extract to-dos, add calendar events, save to Notes</strong>, or recognize an address and open Amap, Baidu Maps, or Apple Maps</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>A New App Interface</h2>
|
||
<ul>
|
||
<li>Home becomes a true overview: usage statistics, dictation history, and Personal Dictionary appear together as preview cards that open full lists with standard back navigation</li>
|
||
<li>The iPhone dock is rebuilt around four Liquid Glass destinations — <strong>Home / Skills / Styles / Settings</strong> — with a green capsule marking the current page</li>
|
||
<li>Skills and polish styles share one card-based interaction: tap to select, edit from the top-right, and see enabled status at the bottom-right; skills reorder with a Home Screen-style long-press drag</li>
|
||
<li>Settings navigation is reorganized so AI Agent, Clipboard, Speech, and Text Input are easier to find, with current summaries shown directly beside each row</li>
|
||
<li>iPad uses a sidebar + detail layout with larger, aligned navigation rows; Translation moves beside the microphone opposite Undo, and its former top-bar slot becomes Clipboard</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>Chinese and English Typing, Rebuilt</h2>
|
||
<ul>
|
||
<li>The English keyboard adds a QuickType-style bar for the typed word, correction, and completion; an offline list of about 40,000 words works with the system lexicon, contact names, and text replacements</li>
|
||
<li>Neighbor-key correction follows the physical keyboard while autocorrect makes fewer unwanted changes to names, short words, and all-caps text; rejecting a correction teaches the original</li>
|
||
<li>Pinyin improves mixed abbreviations such as <code>wom</code> and supports two-key <code>zh</code>, <code>ch</code>, and <code>sh</code>; Chinese candidate frequency and English choices learn locally</li>
|
||
<li>Overlapping key presses, the English double-space period, and contextual Go / Search / Send / Done / Next Return labels make typing feel closer to the system keyboard</li>
|
||
<li>On iPad, the keyboard fills portrait and landscape width, adds comma, period, and the system globe key, plus undo, redo, copy, and cut</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>More Stable, More Controllable</h2>
|
||
<ul>
|
||
<li>One Undo key now rolls back dictation, AI answers, edit results, and clipboard pastes</li>
|
||
<li>Holding the microphone now <strong>edits the last input</strong>; Clipboard History and quick skills replace the previous hold-to-command clipboard flow</li>
|
||
<li>Chinese input resources initialize automatically in the app, and an already-open keyboard recovers after deployment without repeated restarts</li>
|
||
<li>Fixes Universal Clipboard freezes, keyboard-switch crashes, delayed recording cancellation, and a microphone that could remain unavailable after AI sessions</li>
|
||
<li>On-device speech recognition remains the default; AI uses your own API key, with setup tips on Home and above the microphone when missing; Clipboard stays off until enabled and sends text only after your action</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
</article>
|
||
|
||
<!-- ========== 1.6.6 ========== -->
|
||
<article class="version-block" data-version="1.6.6">
|
||
<div class="version-chip">1.6.6</div>
|
||
|
||
<div class="lang-block" data-lang="zh">
|
||
<section class="section">
|
||
<h2>新功能</h2>
|
||
|
||
<div class="group">
|
||
<p class="group-title">全新保活流程</p>
|
||
<ul>
|
||
<li>键盘保活流程全新升级,大幅提升后台保活逻辑,大幅降低耗电量并提升稳定性</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">新增键盘输入功能</p>
|
||
<div class="wn-media wide">
|
||
<video src="assets/whats-new/keyboard-typing.mp4" autoplay muted loop playsinline preload="metadata"></video>
|
||
</div>
|
||
<ul>
|
||
<li>新增<strong>拼音</strong>与<strong>英文</strong>键盘:支持全拼、微软/搜狗双拼、词组候选、可选模糊音;拼音与英文均支持自定义词库</li>
|
||
<li>键盘布局整体升级,语音 / 中文 / 英文外观统一;左侧 Logo 可跳转主 App,右侧改为输入方式切换与翻译入口</li>
|
||
<li>新增<strong>中文候选词面板</strong>,候选池更大,长词和更多备选更容易找到;多字输入时可分词选择</li>
|
||
<li>新增英文联想补全、自动纠错与候选撤销,输入更快更准</li>
|
||
<li>新增键盘防误触和误输入纠正,整体体验更接近系统键盘</li>
|
||
<li>新增<strong>按键音效与震动</strong>,以及轻 / 强震动设置</li>
|
||
<li>新增长按删除加速,改长文更高效</li>
|
||
<li>新增英文键盘智能大写:连续大写、句首自动大写</li>
|
||
<li>新增<strong>撤销上次输入</strong>按钮:麦克风旁可一键撤回最近一次听写或编辑结果</li>
|
||
<li>新增<strong>键盘偏好</strong>设置,支持记住上次使用的语音或文字界面,再次打开无需反复切换</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">编辑上次输入</p>
|
||
<div class="wn-media wide">
|
||
<video src="assets/whats-new/edit-last-input-zh.mp4" autoplay muted loop playsinline preload="metadata"></video>
|
||
</div>
|
||
<ul>
|
||
<li>刚用 OSGKeyboard 输入过内容时,麦克风上方会提示<strong>「长按可编辑上一条」</strong></li>
|
||
<li><strong>长按</strong>麦克风进入编辑,说出想怎么改(如「改得更正式些」「结尾加一句问候」);<strong>短按</strong>仍是普通听写</li>
|
||
<li>说完<strong>再点一下</strong>结束录音,稍候即可左右滑动对比<strong>原文 / 编辑后</strong></li>
|
||
<li>确认后点<strong>应用编辑</strong>替换原文,或选择<strong>插入当前位置</strong>;右上角关闭可放弃本次编辑</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">润色模式整体升级</p>
|
||
<div class="wn-media">
|
||
<img src="assets/whats-new/polish-styles-zh.png" alt="润色风格列表" loading="lazy">
|
||
</div>
|
||
<ul>
|
||
<li>大幅升级<strong>趣味润色</strong>(含直男癌等),风格更鲜明,同时减少事实失真</li>
|
||
<li>润色强度简化为轻度 / 重度:轻度优先保真,重度释放五种趣味风格的完整创意</li>
|
||
<li>新增<strong>同音 / 近音纠错</strong>,语音识别后的错字修复更准</li>
|
||
<li>长文本润色与翻译分段更清晰,列表结构更易读,翻译后保留段落格式</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">应用内更新说明</p>
|
||
<ul>
|
||
<li>版本更新后自动展示更新说明;设置页版本行也可随时查看,跟随应用内语言与深浅色</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">设置优化</p>
|
||
<ul>
|
||
<li>设置页层级与卡片布局更清晰,转写与润色入口更好找</li>
|
||
<li>简化首次设置:未完成语音配置时仍可正常打字</li>
|
||
<li>文本输入设置页的方案、模糊音与资源文案跟随应用内语言</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>问题修复</h2>
|
||
<ul>
|
||
<li>修复润色代答问句:口述问句(如「你能听到我说话吗?」)时不再被改写成一句回答,全部风格与强度都会保留问句本身</li>
|
||
<li>修复自定义润色风格编辑偶发显示空白模板</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>稳定性与可靠性</h2>
|
||
<ul>
|
||
<li>重构蓝牙与音频路由处理:切换蓝牙设备(耳机)后,录音恢复更可靠</li>
|
||
<li>修复录音启动 / 取消竞态,减少识别完成后卡在润色阶段的问题</li>
|
||
<li>Apple 本地识别改用降噪接口:同房间旁人说话时,更倾向听清你的近讲声音</li>
|
||
<li>为识别与润色增加明确超时与原文兜底,网络不稳时不再无限等待</li>
|
||
<li>加强主 App 与键盘的结果确认与恢复,降低结果丢失或无法上屏的概率</li>
|
||
<li>修复火山 ASR 连接问题;修复云端 ASR 配置验证误报</li>
|
||
<li>重构键盘启动流程、降低内存峰值,减少闪退与被系统终止</li>
|
||
<li>输入引擎按需加载,语音与文字切换更快、更省内存</li>
|
||
<li>未使用麦克风时,不主动拉起主 App 占用内存</li>
|
||
<li>移除冗余多步引导;优化会话未完成时的体验</li>
|
||
<li>自定义词 / 本地识别相关能力打包更完整</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
|
||
<div class="lang-block" data-lang="en">
|
||
<section class="section">
|
||
<h2>New Features</h2>
|
||
|
||
<div class="group">
|
||
<p class="group-title">Redesigned keep-alive flow</p>
|
||
<ul>
|
||
<li>Keyboard keep-alive is rebuilt for more reliable background continuity, lower power use, and better stability</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">Typing keyboards</p>
|
||
<div class="wn-media wide">
|
||
<video src="assets/whats-new/keyboard-typing.mp4" autoplay muted loop playsinline preload="metadata"></video>
|
||
</div>
|
||
<ul>
|
||
<li>New <strong>Pinyin</strong> and <strong>English</strong> keyboards: full Pinyin, Microsoft/Sogou double Pinyin, phrase candidates, optional fuzzy Pinyin; both support custom dictionaries</li>
|
||
<li>Unified keyboard chrome across Voice / Chinese / English; left logo opens the main app; right side switches input mode and opens translation</li>
|
||
<li>New <strong>Chinese candidate panel</strong> with a larger pool for long phrases and alternatives; multi-character input supports segmented selection</li>
|
||
<li>English autocomplete, autocorrect, and candidate undo for faster, more accurate typing</li>
|
||
<li>Anti-mis-tap and mistype correction for a closer-to-system keyboard feel</li>
|
||
<li>New <strong>key sounds and haptics</strong>, with light / strong haptic options</li>
|
||
<li>Accelerating long-press delete for faster long-text edits</li>
|
||
<li>Smarter English capitalization: caps lock and sentence-start autocapitalization</li>
|
||
<li>New <strong>undo last input</strong> button beside the mic to roll back the latest dictation or edit result</li>
|
||
<li>New <strong>Keyboard Preferences</strong>: remember the last Voice or Typing surface so you don’t keep switching</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">Edit last input</p>
|
||
<div class="wn-media wide">
|
||
<video src="assets/whats-new/edit-last-input-en.mp4" autoplay muted loop playsinline preload="metadata"></video>
|
||
</div>
|
||
<ul>
|
||
<li>Right after you insert text with OSGKeyboard, the mic shows <strong>“Hold to edit your last input”</strong></li>
|
||
<li><strong>Long-press</strong> the mic to start editing and say how to change it (e.g. “make it more formal”, “add a greeting at the end”); a <strong>short press</strong> is still plain dictation</li>
|
||
<li><strong>Tap once more</strong> to finish, then swipe to compare <strong>Original / Edited</strong></li>
|
||
<li>Confirm to <strong>apply the edit</strong> (replace), or choose <strong>insert at cursor</strong>; close from the top-right to discard</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">Polish upgrades</p>
|
||
<div class="wn-media">
|
||
<img src="assets/whats-new/polish-styles-en.png" alt="Polish styles list" loading="lazy">
|
||
</div>
|
||
<ul>
|
||
<li>Stronger <strong>fun polish</strong> styles (including Straight-Talk Rescue / 直男癌), with clearer voice and less factual drift</li>
|
||
<li>Intensity simplified to Light / Heavy: Light prioritizes fidelity; Heavy unlocks the full creativity of the five fun styles</li>
|
||
<li>New <strong>homophone / near-homophone correction</strong> after speech recognition</li>
|
||
<li>Clearer segmentation for long polish and translation; lists read better; translations keep paragraph structure</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">In-app release notes</p>
|
||
<ul>
|
||
<li>Release notes appear automatically after an update, and the Settings version row opens them any time, following your in-app language and theme</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="group">
|
||
<p class="group-title">Settings</p>
|
||
<ul>
|
||
<li>Clearer Settings hierarchy and cards; transcription and polish are easier to find</li>
|
||
<li>Simpler first-run setup: you can type even before voice setup is finished</li>
|
||
<li>Schema, fuzzy-Pinyin, and resource strings on the Text Input settings page follow the in-app language</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>Bug Fixes</h2>
|
||
<ul>
|
||
<li>Fixed polish answering a question: dictating a question (e.g. “Can you hear me?”) is no longer rewritten into an answer — the question is preserved across every style and intensity</li>
|
||
<li>Fixed the custom polish style editor occasionally opening a blank template</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>Stability & Reliability</h2>
|
||
<ul>
|
||
<li>Rebuilt Bluetooth / audio-route handling so recording recovers more reliably after switching headsets</li>
|
||
<li>Fixed start / cancel races that could leave the UI stuck in polish after recognition finished</li>
|
||
<li>Apple on-device recognition uses voice-processing / noise reduction so your near-talk mic is preferred over other speakers in the room</li>
|
||
<li>Explicit timeouts and original-text fallback for recognition and polish — no endless waits on flaky networks</li>
|
||
<li>Stronger host ↔ keyboard result confirmation and recovery to reduce lost or uninsertable text</li>
|
||
<li>Fixed Volcengine ASR connection issues and false cloud ASR config-validation failures</li>
|
||
<li>Rebuilt keyboard launch path with lower peak memory to reduce crashes and jetsams</li>
|
||
<li>Input engines load on demand — faster Voice ↔ Typing switches and lower memory use</li>
|
||
<li>Does not wake the host app just to hold memory when the mic isn’t used</li>
|
||
<li>Removed redundant multi-step prompts; smoother experience when a session isn’t finished</li>
|
||
<li>More complete packaging for custom words and on-device recognition assets</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
</article>
|
||
|
||
<!-- ========== 1.1.0 ========== -->
|
||
<article class="version-block" data-version="1.1.0">
|
||
<div class="version-chip">1.1.0</div>
|
||
|
||
<div class="lang-block" data-lang="zh">
|
||
<section class="section">
|
||
<h2>新功能</h2>
|
||
<ul>
|
||
<li>新增「润色风格包」:内置轻度清理、清晰结构、正式表达、日常聊天,并支持 iCloud 同步</li>
|
||
<li>新增「趣味润色风格」:直男癌拯救器、装逼指南、大厂黑话、帝吧大神、小红书集美五种润色风格</li>
|
||
<li>新增自定义润色风格功能</li>
|
||
<li>新增「画中画」保活,并作为默认风格,支持在设置中切换回灵动岛;关掉画中画即可结束会话</li>
|
||
<li>云端识别支持真流式(百炼 / 火山 / OpenAI),说话时文字会实时上屏</li>
|
||
<li>新增历史记录可按天删除(只清当天)</li>
|
||
<li>设置里对流式 ASR 供应商显示「流式识别」标签;OpenAI 云端识别默认走流式</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>体验改进</h2>
|
||
<ul>
|
||
<li>设置页重新设计,结构更清晰</li>
|
||
<li>灵动岛保活默认改为 5 分钟(更省隐私与电量),支持多种时长设置</li>
|
||
<li>更新 iPhone 历史、词库 Tab 图标,与 Mac / iPad 统一</li>
|
||
<li>润色风格卡片与设置摘要更简洁,少装饰、少冗余状态字</li>
|
||
<li>设置、风格等相关页面统一卡片留白与圆角</li>
|
||
<li>更新权限与隐私说明</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>问题修复</h2>
|
||
<ul>
|
||
<li>完成新手引导后不再卡在最后一页</li>
|
||
<li>删除重装后会重新出现欢迎引导</li>
|
||
<li>松手后尾音更不容易丢字;识别过短时会整句再识别一次兜底</li>
|
||
<li>按下录音时麦克风预热阶段的开头语音更不易被丢掉</li>
|
||
<li>末段识别为空时,不再把前面已经识别好的字抹掉</li>
|
||
<li>修复趣味润色在短句时的失真问题</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
|
||
<div class="lang-block" data-lang="en">
|
||
<section class="section">
|
||
<h2>New Features</h2>
|
||
<ul>
|
||
<li>Polish style packs: Light Cleanup, Clear Structure, Formal, and Casual Chat, with iCloud sync</li>
|
||
<li>Fun polish styles: Straight-Talk Rescue, Flex Guide, Big-Tech Buzzwords, Tieba Legend, and Xiaohongshu Vibes</li>
|
||
<li>Custom polish styles</li>
|
||
<li>Picture-in-Picture keep-alive as the default, with Dynamic Island as an option in Settings; ending PiP ends the session</li>
|
||
<li>True streaming cloud ASR (Bailian / Volcengine / OpenAI) with live on-screen text while you speak</li>
|
||
<li>Delete history by day (clear only that day)</li>
|
||
<li>Settings shows a “Streaming ASR” badge for streaming providers; OpenAI cloud ASR defaults to streaming</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>Improvements</h2>
|
||
<ul>
|
||
<li>Redesigned Settings with a clearer structure</li>
|
||
<li>Dynamic Island keep-alive defaults to 5 minutes (more privacy- and battery-friendly), with multiple duration options</li>
|
||
<li>Updated iPhone History and Dictionary tab icons to match Mac / iPad</li>
|
||
<li>Simpler polish-style cards and Settings summaries — less decoration and fewer status words</li>
|
||
<li>Consistent card padding and corner radius across Settings and style pages</li>
|
||
<li>Updated permission and privacy copy</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section class="section">
|
||
<h2>Fixes</h2>
|
||
<ul>
|
||
<li>Onboarding no longer sticks on the last page after completion</li>
|
||
<li>Welcome onboarding shows again after delete-and-reinstall</li>
|
||
<li>Less end-of-utterance truncation on release; very short captures retry the whole phrase</li>
|
||
<li>Speech at the start of mic warm-up is less likely to be dropped</li>
|
||
<li>An empty final segment no longer wipes earlier recognized text</li>
|
||
<li>Fixed fun-polish distortion on short sentences</li>
|
||
</ul>
|
||
</section>
|
||
</div>
|
||
</article>
|
||
|
||
<script>
|
||
(function () {
|
||
function parseVersion(raw) {
|
||
if (!raw) return null;
|
||
var parts = String(raw).trim().split(".").map(function (p) {
|
||
var n = parseInt(p, 10);
|
||
return Number.isFinite(n) ? n : 0;
|
||
});
|
||
while (parts.length < 3) parts.push(0);
|
||
return parts.slice(0, 3);
|
||
}
|
||
|
||
function compareVersions(a, b) {
|
||
for (var i = 0; i < 3; i++) {
|
||
if (a[i] !== b[i]) return a[i] - b[i];
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
function readParams() {
|
||
var params = new URLSearchParams(window.location.search);
|
||
var lang = (params.get("lang") || "").toLowerCase();
|
||
if (lang.indexOf("zh") === 0) lang = "zh";
|
||
else if (lang.indexOf("en") === 0) lang = "en";
|
||
else lang = (navigator.language || "").toLowerCase().indexOf("zh") === 0 ? "zh" : "en";
|
||
|
||
var theme = (params.get("theme") || "").toLowerCase();
|
||
if (theme !== "light" && theme !== "dark") {
|
||
theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
||
}
|
||
|
||
var version = params.get("v") || params.get("version") || "";
|
||
return { lang: lang, theme: theme, version: version };
|
||
}
|
||
|
||
var cfg = readParams();
|
||
document.documentElement.lang = cfg.lang === "zh" ? "zh-Hans" : "en";
|
||
document.documentElement.setAttribute("data-theme", cfg.theme);
|
||
|
||
document.querySelectorAll(".lang-block").forEach(function (el) {
|
||
el.classList.toggle("visible", el.getAttribute("data-lang") === cfg.lang);
|
||
});
|
||
|
||
var current = parseVersion(cfg.version);
|
||
var blocks = Array.prototype.slice.call(document.querySelectorAll(".version-block"));
|
||
var visibleCount = 0;
|
||
|
||
blocks
|
||
.map(function (el) {
|
||
return { el: el, version: parseVersion(el.getAttribute("data-version")) };
|
||
})
|
||
.filter(function (item) {
|
||
if (!item.version) return false;
|
||
// No v= → show all; otherwise only versions <= current app version.
|
||
if (!current) return true;
|
||
return compareVersions(item.version, current) <= 0;
|
||
})
|
||
.sort(function (a, b) {
|
||
return compareVersions(b.version, a.version);
|
||
})
|
||
.forEach(function (item) {
|
||
item.el.classList.add("visible");
|
||
// Re-append in newest → oldest order.
|
||
item.el.parentNode.appendChild(item.el);
|
||
visibleCount += 1;
|
||
});
|
||
|
||
var empty = document.getElementById(cfg.lang === "zh" ? "empty-zh" : "empty-en");
|
||
if (empty) empty.classList.toggle("visible", visibleCount === 0);
|
||
})();
|
||
</script>
|
||
</body>
|
||
</html>
|