Type
Bug
现象
移动端阅读器实际上已经实现了音量键翻页的完整逻辑与原生桥接,但阅读设置面板里没有对应的开关,而该设置项默认值为 false,导致用户永远无法启用这个功能——表现上看就是「移动端不支持音量键翻页」,实质是设置面板漏接了一个 toggle。
复现步骤
- 移动端打开任意书籍进入阅读器;
- 打开阅读设置面板(
ReaderSettingsPanel);
- 可以看到「顶部标题与进度」「底部时间与电量」「跟随系统字号」等开关,唯独没有「音量键翻页」开关;
- 由于设置项
volumeButtonsPageTurn 默认 false 且无任何 UI 入口可改,按音量键不会翻页。
根因分析
功能逻辑、原生桥接、文案均已就位,只差设置面板里的一个开关:
- 核心逻辑已实现:
packages/app-expo/src/screens/reader/useVolumeButtonPaging.ts —— 拦截硬件音量键、抑制系统音量 UI、按音量增减方向判定上/下翻页、翻页后恢复音量、120ms 去抖,逻辑完整。
- 启用条件已接好:
packages/app-expo/src/screens/ReaderScreen.tsx(约 886–901 行)读取 readSettings.volumeButtonsPageTurn,并在 VolumeManager 原生模块可用、WebView 就绪、无搜索/目录/TTS 等遮挡层、TTS 处于 stopped 等条件下激活 useVolumeButtonPaging。
- 设置字段已存在:
packages/app-expo/src/stores/settings-store.ts:56 定义 volumeButtonsPageTurn,默认 false。
- i18n 文案已存在:
settings.volumeButtonsPageTurn(中文「音量键翻页」)在所有语言包均已定义。
- 唯独缺少 UI 开关:
packages/app-expo/src/screens/reader/ReaderSettingsPanel.tsx(约 214–255 行)渲染了 showTopTitleProgress / showBottomTimeBattery / followSystemFontScale 三个 toggle,没有 volumeButtonsPageTurn 的 toggle;全包内也没有任何组件写入该设置,导致它恒为默认 false。
可能的修复方向(仅建议)
在 ReaderSettingsPanel.tsx 照搬「底部时间与电量」那段(约 225–235 行)新增一个 settingRow,绑定到 volumeButtonsPageTurn,文案直接复用现成的 t("settings.volumeButtonsPageTurn"):
<View style={s.settingRow}>
<Text style={s.settingLabel}>{t("settings.volumeButtonsPageTurn")}</Text>
<TouchableOpacity
style={[s.settingToggleBtn, !!volumeButtonsPageTurn && s.settingToggleBtnActive]}
onPress={() => onUpdateSetting("volumeButtonsPageTurn", !volumeButtonsPageTurn)}
>
<Text style={[s.settingToggleText, !!volumeButtonsPageTurn && s.settingToggleTextActive]}>
{volumeButtonsPageTurn ? t("settings.enabled") : t("settings.disabled")}
</Text>
</TouchableOpacity>
</View>
并在顶部从 readSettings 解构出 volumeButtonsPageTurn(约 38–45 行)。
设备
- Platform: Mobile (Expo / React Native)
- App: v1.3.2
- 说明:基于源码核实(main 最新提交 a7f30ce),非真机复现;现象在源码层面可确认(设置面板无对应 toggle、默认值 false)。
Type
Bug
现象
移动端阅读器实际上已经实现了音量键翻页的完整逻辑与原生桥接,但阅读设置面板里没有对应的开关,而该设置项默认值为
false,导致用户永远无法启用这个功能——表现上看就是「移动端不支持音量键翻页」,实质是设置面板漏接了一个 toggle。复现步骤
ReaderSettingsPanel);volumeButtonsPageTurn默认false且无任何 UI 入口可改,按音量键不会翻页。根因分析
功能逻辑、原生桥接、文案均已就位,只差设置面板里的一个开关:
packages/app-expo/src/screens/reader/useVolumeButtonPaging.ts—— 拦截硬件音量键、抑制系统音量 UI、按音量增减方向判定上/下翻页、翻页后恢复音量、120ms 去抖,逻辑完整。packages/app-expo/src/screens/ReaderScreen.tsx(约 886–901 行)读取readSettings.volumeButtonsPageTurn,并在VolumeManager原生模块可用、WebView 就绪、无搜索/目录/TTS 等遮挡层、TTS 处于 stopped 等条件下激活useVolumeButtonPaging。packages/app-expo/src/stores/settings-store.ts:56定义volumeButtonsPageTurn,默认false。settings.volumeButtonsPageTurn(中文「音量键翻页」)在所有语言包均已定义。packages/app-expo/src/screens/reader/ReaderSettingsPanel.tsx(约 214–255 行)渲染了showTopTitleProgress/showBottomTimeBattery/followSystemFontScale三个 toggle,没有volumeButtonsPageTurn的 toggle;全包内也没有任何组件写入该设置,导致它恒为默认false。可能的修复方向(仅建议)
在
ReaderSettingsPanel.tsx照搬「底部时间与电量」那段(约 225–235 行)新增一个 settingRow,绑定到volumeButtonsPageTurn,文案直接复用现成的t("settings.volumeButtonsPageTurn"):并在顶部从
readSettings解构出volumeButtonsPageTurn(约 38–45 行)。设备