Skip to content

[Bug] 移动端音量键翻页功能已实现但阅读设置面板缺少开关,用户无法启用 / Volume-key paging is implemented on mobile but has no toggle in reader settings #379

@chy5301

Description

@chy5301

Type

Bug

现象

移动端阅读器实际上已经实现了音量键翻页的完整逻辑与原生桥接,但阅读设置面板里没有对应的开关,而该设置项默认值为 false,导致用户永远无法启用这个功能——表现上看就是「移动端不支持音量键翻页」,实质是设置面板漏接了一个 toggle。

复现步骤

  1. 移动端打开任意书籍进入阅读器;
  2. 打开阅读设置面板(ReaderSettingsPanel);
  3. 可以看到「顶部标题与进度」「底部时间与电量」「跟随系统字号」等开关,唯独没有「音量键翻页」开关
  4. 由于设置项 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)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions