Skip to content

Releases: TomoeMami/HomenaPod

v1.0.18 · 图标缩放比对齐旧版

Choose a tag to compare

@TomoeMami TomoeMami released this 12 Oct 16:50

1.0.17 以来的改动:

  • 修正分层图标的缩放观感,让图标的「内容 / 可见底板」比与旧版单层图标一致。

    实测依据(DevEco 模拟器 phone26 / HarmonyOS 7.0.0 / API 26,同一页同一槽位 Image [387,260][569,442] = 182×182):
    把 v1.0.16(单层、自绘 rx=220 圆角)重新装回模拟器截图,再换装 v1.0.17(分层)截图,逐像素比对:

    指标 v1.0.16 单层自绘圆角 v1.0.17 分层
    三环直径 142 / 107 / 72 px(瓦片的 78.0/58.8/39.6%) 142 / 107 / 72 px(完全一致)
    人物白色主体 71×95 px 71×94 px
    可见底板 ≈瓦片的 92%(自绘圆角 + 约 2% 内缩) ≈100%(背景满幅贴边)
    内容/底板比 ≈0.92 ≈0.84 ← 看起来"内容变小"的原因

    → 系统并没有缩放分层图标的前景层(两版内容 1:1 一致);差别在于旧单层图标自带圆角与留边,
    系统给它的可见底板只有瓦片的约 92%,而分层图标按上架规范背景必须满幅贴边(不允许资源内有内间距),
    底板变成 100%,于是「内容/底板」比下降了约 8%。

    修正:补偿加在前景层(规范禁止的是给资源加内间距,不是禁止构图缩放)——
    scripts/icon/foreground.svg 中把三环 + 人物 + 柔影整体包进
    <g transform="translate(512 512) scale(1.08) translate(-512 -512)">,重新生成两处 foreground.png
    (AppScope 与 entry 逐字节一致)。补偿后实测三环 150 / 115 / 77 px(瓦片的 82.4 / 63.2 / 42.3%),
    前景非透明 bbox 90.4% × 91.8%,距画布边缘约 9%,不会被裁切。

    启动页与应用内展示用的单层 app_icon.svg 不做该补偿:那两处的"底板"就是图稿本身,
    前后比例未变,保持与原图稿一致。

  • 背景层仍是纯色 #0056B3、前景层仍是透明 PNG、两层 1024×1024 满幅贴边 —— 上架分层资源的要求不变。
    若想把原图稿的蓝→紫对角渐变要回来:pwsh -File scripts/icon/gen-app-icon.ps1 -Background gradient 后重新构建。

版本:1.0.18 / 1000018(在 1.0.17 基础上仅做图标缩放修正,无功能改动)。

上机验证(模拟器 phone26,未签名 HAP):

  • 门禁:release assembleHap BUILD SUCCESSFUL(33 tasks);HAP 内 resources/base/media/ 四项齐全
    (background.png、foreground.png、layered_image.json、app_icon.svg)。
  • 安装:hdc install -r → install bundle successfully;bm dump -n com.homenapod.app →
    iconPath: $media:layered_image。
  • 桌面:图标瓦片 182×182,与系统「联系人」图标完全同尺寸;系统蒙版圆角正常、无双圆角/无透明缝/无黑带;
    缩放补偿后内容与底板的占比与旧版观感一致。

v1.0.17 · 应用图标改为上架要求的分层资源

Choose a tag to compare

@TomoeMami TomoeMami released this 11 Oct 05:37

1.0.16 以来的改动:

  • 应用图标改为上架要求的分层资源(前景图 + 背景图 + layered_image.json):

    • 新增 scripts/icon/:foreground.svg(声波三环 + 人物,透明前景)、background-solid.svg(纯色 #0056B3,默认)、
      background-gradient.svg(原图稿对角渐变,备选)与 gen-app-icon.ps1 —— 用 Chrome headless 栅格化为
      1024×1024 PNG 写入 AppScope 与 entry 两处 resources/base/media,并自校验尺寸与角点 alpha
      (背景四角必须 255、前景四角必须 0)。
    • 两层满幅贴边、不自绘圆角、不留内间距,对齐官方上架 FAQ《应用配置图标不符合UX设计规范要求尺寸1024px1024px该如何解决》:
      「必须分为前景图和背景图两层」「尺寸必须为 1024px
      1024px」「不允许自行裁剪圆角,不允许在资源内添加内间距」
      「背景图需为纯色(不能透明且不能包含其他图形)」「前景图需为透明的 PNG 格式」。
    • 接线:app.json5 的 app.icon 与 module.json5 的 abilities[0].icon 都改指 $media:layered_image
      (系统侧 module 优先,两处必须同改);startWindowIcon 保持 $media:app_icon。
  • 图标底色不再自绘圆角:两份 app_icon.svg 去掉 rx/ry,并统一为与背景层同色的纯色 #0056B3
    (供启动页与应用内 Image($r('app.media.app_icon')) 使用,这两处不走系统蒙版)。旧版自绘 rx=220
    会让四角 3.72% 像素变成透明区,在系统蒙版之上再叠一层「双圆角」。

  • docs/06-ui-design-spec.md §5 重写为分层图标章节(资源与接线表 / 可复现生成脚本 / 官方规范依据 / 上机验证记录)。

上机验证(DevEco 模拟器 phone26 / HarmonyOS 7.0.0(26.0.0) / API 26,未签名 HAP):

  • 构建:release assembleHap BUILD SUCCESSFUL;HAP 内 resources/base/media/ 含 background.png、foreground.png、
    layered_image.json、app_icon.svg 四项。
  • 安装:hdc install -r → install bundle successfully;bm dump -n com.homenapod.app →
    iconPath: $media:layered_image(iconId: 16777729),ability startWindowIcon: $media:app_icon。
  • 桌面:uitest dumpLayout 取到图标瓦片 Image [387,260][569,442] = 182×182,与系统自带「联系人」图标
    Image [88,260][270,442] = 182×182 完全同尺寸;放大截图确认系统蒙版圆角正常,无双圆角、无透明缝、无黑带。
  • 启动窗口:aa start + 即时 snapshot_display 抓到满幅直角方形纯色图(该处系统不套蒙版)。
  • 版本号:1.0.17 / 1000017。

未做 / 备注:

  • 启动页(startWindowIcon)不走系统蒙版,因此显示为直角方形;若要启动页也圆角,需另给一张自绘圆角的图。
  • 资源编译器会把 media 里的 PNG 压成 512×512 再打包(属 hvigor 打包行为);工程源文件仍是规范要求的 1024×1024。
  • 如需恢复原图稿的蓝→紫对角渐变背景,一条命令即可:
    pwsh -File scripts/icon/gen-app-icon.ps1 -Background gradient(随后重新 assembleHap)。

v1.0.16 · 订阅源 OPML 与整库数据的导入导出

Choose a tag to compare

@TomoeMami TomoeMami released this 10 Oct 22:48

1.0.15 以来的改动:

  • 新增「备份与恢复」页(设置 → 库与统计 → 备份与恢复),入口与屏内分组对齐上游
    preferences.xml 的 prefScreenImportExport("Backup & restore")与 preferences_import_export.xml:
    数据库导出 / 数据库导入 / OPML 导出 / OPML 导入。

  • 订阅源 OPML 导入导出(对照上游 storage/importexport 的 OpmlWriter / OpmlReader +
    OpmlImportActivity):

    • 导出文件名 homenapod-feeds-yyyy-MM-dd.opml(上游 antennapod-feeds-%s.opml 同款);
      head 写 title 与 dateCreated,outline 属性顺序 text/title/type/xmlUrl/htmlUrl 与上游一致,
      空 type / htmlUrl 不写,且只写已订阅的源。
    • 导入按 BOM 嗅探 UTF-8 / UTF-16,标题优先 title、支持嵌套文件夹 outline、opml 树外忽略;
      选好文件后进上游同款勾选列表(全选 / 取消全选 / 确认),已订阅的源自动去重。
  • HomenaPod 全部数据的导入导出(对照上游 DatabaseExporter + 官方《数据库备份与恢复》):

    • 导出:relationalStore.backup() 生成一致性快照,按字节数核对后写到用户选择的位置,
      文件名 homenapod-backup-yyyy-MM-dd.db;内容覆盖订阅、单集、播放进度、队列、收藏、收听历史
      (与上游一致:不含已下载的音频文件)。
    • 导入:先弹上游同款警告(会替换当前全部订阅与播放记录),再校验 SQLite 文件头与库版本
      (拒绝导入更新版本导出的库,避免把库换成读不出来的版本),restore() 成功后提示并自动重启应用;
      重启走 ApplicationContext.restartApp()(API 12,兼容本工程 compatibleSdkVersion 5.0.2(14))。
  • 顺带上一个未发版的改动(1.0.15 之后、本轮之前):睡眠定时的「摇一摇重置」与「结束前震动提醒」
    改为用户可开关(摇一摇默认开、震动默认关),并修掉定时自然到点后不释放加速度计的问题;
    「关于」页把杜撰的「摇一摇跳过」更正为「摇一摇重置睡眠定时」,并写明两条权限的实际用途与默认状态。

上机验证(DevEco 模拟器 phone26 / HarmonyOS 7.0.0 / API 26,未签名 HAP):

  • OPML:导出 89 条 → 取消订阅一个源(再导出为 88)→ 导入旧 OPML 全选确认 →
    提示「已添加 1 个订阅,正在后台获取剧集…」→ 再导出回到 89。
  • 整库:导出 76,206,080 B(SQLite format 3 头;宿主 sqlite3 读 user_version=2、Feeds 89、
    FeedItems 15745、Queue 11)→ 导入后应用自动重启 → 再导出逐项一致;
    负例(把 OPML 当数据库导入)提示「这个文件不是 HomenaPod 的数据库备份。」且库未改动。
  • 门禁:scripts/runtime-pure-test.ps1(新增 40+ 条 OPML / SQLite 头断言)PASSED;
    debug 与 release assembleHap 均 BUILD SUCCESSFUL。

未做(上游此项里的其余部分):自动数据库导出(每 3 天一份、只留最近 5 份)与 HTML / 收藏导出;
取舍记录见 docs/07-ui-layout-parity.md §4 #40/#41。

v1.0.15 · 设置里新增「关于」页

Choose a tag to compare

@TomoeMami TomoeMami released this 09 Oct 13:24

1.0.14 以来的改动:

  • 设置里新增「关于」页(设置底部「关于」分类 → 「关于 HomenaPod / v1.0.15」)。信息位次对齐上游
    AntennaPod 的 preferences_about.xml(版本 → 来源 → 隐私 → 许可 → 致谢),内容按「移植版真正需要
    告知用户什么」重选:

    • 应用信息:版本、包名、运行环境(系统版本 + API)、设备机型、上游基线
      (AntennaPod 3.12.1 develop @ 8024391)。版本号运行时从 bundleManager 读,
      与 AppScope/app.json5 永远一致,不会出现两处漂移;设置页入口行右侧的 v1.0.15 同源。
    • 来源与许可:上游项目 / 源码仓库 / GPL-3.0 许可全文 / 反馈问题 / 项目文档,5 条外链走
      ohos.want.action.viewData + entity.system.browsable 标准隐式 Want 拉起浏览器;
      设备上没有可用浏览器时退化为复制链接,不会「点了没反应」。
    • 隐私与数据:数据只在本机(无账号、无云同步、无广告、无统计埋点)、联网只做哪几件事
      (刷新订阅源 / 下载封面与音频 / 在线播放 / 播客搜索 / OPML 导入导出)、已声明权限清单,
      并说明不申请定位、通讯录、相机、相册。
    • 致谢:AntennaPod(GPL-3.0)、HarmonyOS NEXT SDK、系统符号图标(sys.symbol)、
      @ohos/hypium(Apache-2.0)。
    • 免责声明:GPL-3.0「按现状」无担保;音频来自第三方服务器;单集内容、封面、名称与商标
      归各自权利人。
    • 复制版本信息:底部一键把「版本 / 包名 / 运行环境 / 机型」四行写入系统剪贴板,反馈问题时直接粘贴。
    • 文案三语(简体中文 / English / 跟随系统)齐全。
  • 顺带处理了本轮在新页面撞到的 i18n 陷阱:getContext().resourceManager.getStringSync()
    不跟随应用语言(应用切到 English 后这条路径仍返回中文),新页面所有静态文案改为直接以 $r()
    交给 Text() 渲染、行内提示改用 @State message: ResourceStr。既有页面的同类问题未动
    (例如设置页「排序方式」右侧在英文模式下仍显示「最新优先」),留待单独一轮统一处理。

  • 复验(DevEco 模拟器 phone26 / HarmonyOS 7.0.0 / API 26,装当轮 HAP):入口行与六个分区 UI dump
    取证;「上游项目」实测拉起浏览器打开 github.com;点「复制版本信息」后再长按设置页输入框粘贴,
    落进输入框的数字正是版本块里的数字,证明剪贴板确实写入;切 English 冷启动后六个分区标题、说明
    段落、致谢取值全部英文化且长段落换行正常;faultlog/faultlogger 无本轮新增 jscrash。

详见提交 58bd512(功能)与 37a082f(版本号)。

附件为 未签名 release HAP(versionName 1.0.15 / versionCode 1000015,包内 buildMode=release),
真机安装前需自行签名。

v1.0.14 · 滑动动作自动回弹

Choose a tag to compare

@TomoeMami TomoeMami released this 08 Oct 11:55

1.0.13 以来的改动:

  • 修复「下载页左右滑动没有结束反馈」:ListItem.swipeAction 的 onAction(拖过动作区松手)触发后,
    框架把行停到屏外就返回了,不会自动复位 —— 只有「另一行开始滑动 / 列表滚动」才顺带收回。
    上游 AntennaPod 用的是 ItemTouchHelper,松手后框架必定复位,所以移植时漏了这段;
    正确做法是显式调用 ListScroller.closeAllSwipeActions()(官方 FAQ「如何将 ListItem 的 swipeAction
    滑动效果恢复至未滑动」给的正是这个 API,@since 11)。
    下载页此前根本没有 ListScroller,而它默认的右滑动作是「加入队列」(执行后行仍留在「已完成下载」
    列表里),于是行一直停在滑出状态、屏幕上只剩一块「加入队列」色块 —— 只能去队列页才确认已经加入。
    现在 5 个挂了划出项的页面都在 runSwipeAction 入口先收回:下载页 / 首页(看新内容 + 管理下载
    两个区块共用一个 List)/ 订阅详情页 / 收件箱 / 队列页(队列页原先只覆盖「移出队列」「开始下载」
    两个动作,标记已播、收藏、分享、置顶、置底同样会僵住)。

  • 复验(模拟器 API 26,旧构建 vs 新构建对照,同一台机、同一份数据,右滑位移 900px > 128vp 阈值):
    旧构建右滑「加入队列」→ 行内标题从 [[350,426][962,558]] 整行移出屏外、「加入队列」停在
    [[969,508][1124,553]] 不动,队列 11 集(滚到底才看到该集已加入);
    新构建同样右滑 → 行标题原样回到 [[350,760][962,892]]、布局里不再出现动作区,
    行内立刻出现队列角标,队列 11 → 12 集。

详见提交 4d404ed(修复)与 c7da41c(版本号)。

附件为 未签名 release HAP(versionName 1.0.14 / versionCode 1000014,包内 buildMode=release),
真机安装前需自行签名。

v1.0.13 · 下载单集时封面不再闪

Choose a tag to compare

@TomoeMami TomoeMami released this 27 Sep 12:47

1.0.11 以来的改动:

  • 修复「下载单集时封面时不时闪一下」:下载进度回调(约每秒一次)被编进了 LazyForEach 的行键,
    键一变整行(连同封面 Image 节点)就被拆掉重建、图片重新解码,解码完成前露出的占位底色就是那一下闪动;
    实测一次 2.4 MB 限速下载触发 20 次整行+封面重建。现在行键只保留 id 与下载状态,
    进度改由页面 @State downloadTick 驱动就地重算(组件实例不重建,封面节点不动)。
    涉及下载页 / 队列页 / 收件箱 / 订阅详情页 / 全库单集 / 首页;顺带修好全库单集页
    「下载中不显示进度环」(键不变时 notifyDataChange 不会重算该行 @Prop)。
  • 复验(模拟器 API 26):4.6 MB 下载 37 次进度 → 仅 2 次重建(开始/完成的状态切换);
    下载页 1.1 MB / 48% → 1.8 MB / 77% 实时刷新;同一行两次 dump 封面与进度环节点 id 不变、进度值 24 → 51。

详见提交 9e54223(修复)与 44c15df(版本号)。

版本号说明:1.0.12 未单独发布。1.0.11 之后的修复提交里曾顺带把版本号提到 1.0.12,
随后按要求再加 0.0.1 得到 1.0.13;两者代码完全相同,只差 app.json5 的
versionName / versionCode,没有 v1.0.12 这个 tag/release。
自本轮起约定:版本号只在用户明确要求时才改(见 PLAN.md §3.8 / AGENTS.md)。

附件为 未签名 release HAP(versionName 1.0.13 / versionCode 1000013,包内 buildMode=release),
真机安装前需自行签名。

v1.0.11 · 下载单集倍速修复与倍速自检

Choose a tag to compare

@TomoeMami TomoeMami released this 26 Sep 03:13

1.0.10 以来的改动:

  • 修复「已下载单集过一阵播放自动变慢」:单集列表里已下载那一行的行内按钮走了自己 hand-build 的
    Playable,把 speed 写死 1.0(跳片头/跳片尾/音量适配同样写死 0),丢掉每订阅倍速、落到全局默认倍速;
    而未下载单集在该页只能进详情页播放(那条路读得到订阅级倍速)—— 于是「下载的慢、在线的正常」。
    现在所有入口统一走 QueueEngine.toPlayable()
    (实测 feed 1.5x / 全局 1.0x:行内按钮由 0.995x 恢复为 1.484x,原生 AudioSinkFilter::SetSpeed speed is 1.500)
  • 播放页倍速数字不再「假死」:数值标签按值传给 @Builder,状态变化不重绘(原生已 1.50x、界面还停在 1.00)
  • 倍速改为弹层选择:显式选档、当前档打勾、显示当前默认倍速;不再「点一次循环一档」
    (旧交互下 2.00x 再点会绕回 0.50x,误触即静默把默认倍速改成 0.5x)
  • 倍速是否真的生效可自检:订阅 speedDone 与请求档位比对,不一致补发一次(进入 playing 再兜底一次),
    日志固定为 setSpeed src=… request=… mode=… / speedDone effective=… expected=…
  • 系统播控下发的倍速先过准入校验(新增纯逻辑 PlaybackSpeedPolicy):非有限数值、或不在
    SPEED_PRESETS 区间内一律拒绝 —— toPlaybackSpeed() 用 <= 分档,任何 ≤0.5 的输入都会静默落到 0.5x

详见提交 df3b35e。

附件为 未签名 release HAP(versionName 1.0.11 / versionCode 1000011,包内 buildMode=release),
真机安装前需自行签名。

v1.0.10 · 修复鸿蒙 PC 设置页底部内容不可见

Choose a tag to compare

@TomoeMami TomoeMami released this 20 Sep 16:36

1.0.9 以来的改动:

  • 修复鸿蒙 PC 上设置界面无法显示最底部内容:设置页的 Scroll 误用 .height('100%'),
    与 AppBar 同属一个 Column 时视口比可视区虚高一个 AppBar(56vp),内容底部 32vp 被永久遮挡。
    手机/平板因底部手势条安全区把溢出部分吃掉而看不出来,PC 上没有这条安全区因而暴露。
    改为工程其余 4 个滚动页一致使用的 .layoutWeight(1)
  • deviceTypes 增加 2in1:应用现在可以正常安装运行于鸿蒙 PC

详见提交 232af7a。

附件为 未签名 release HAP(versionName 1.0.10 / versionCode 1000010),真机安装前需自行签名。

v1.0.9 · 蓝牙断开后回退 5 秒

Choose a tag to compare

@TomoeMami TomoeMami released this 20 Sep 13:06

1.0.8 以来的改动:

  • 蓝牙断开并自动暂停后,把播放进度往回调 5 秒 —— 设置 → 中断 →「蓝牙断开后回退」(默认开,秒数可改)
  • 只对蓝牙生效:拔有线耳机照旧只暂停、不回退。蓝牙掉线到系统把设备丢失交给应用之间有延迟,
    这段延迟里音频可能已经改从扬声器外放或干脆被跳过,回退几秒让重连后不漏内容
  • 回退顺序是「先暂停、再回退」:蓝牙断开后音频多半已经改从扬声器外放,反过来的话这几秒会被重放一遍
  • 回退后的位置会立即落盘,冷启动 / 重新加载单集时从回退后的位置继续

详见提交 81ccf0f(实现 + docs/feature-diff/02-playback-audio.md 的差异记录)。

附件为 未签名 release HAP(versionName 1.0.9 / versionCode 1000009),真机安装前需自行签名。

v1.0.8 · 耳机断开自动暂停的顺序缺陷修复

Choose a tag to compare

@TomoeMami TomoeMami released this 19 Sep 17:02

1.0.7 以来的改动:

  • 断开蓝牙/有线耳机时自动暂停:修掉「音频焦点中断先到」时设备丢失被漏判、随后焦点恢复把声音从扬声器放出来的缺陷
  • 该判定与两条回调(焦点中断 / 输出设备变更)的到达顺序无关;设备重连按偏好的自动恢复在两种顺序下都生效

详见提交 9a2102c;上机 A/B 取证记录见 a5bc72a。

附件为 未签名 release HAP(versionName 1.0.8 / versionCode 1000008),真机安装前需自行签名。