Repository navigation
Releases: TomoeMami/HomenaPod
Release list
v1.0.18 · 图标缩放比对齐旧版
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
assembleHapBUILD 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 · 应用图标改为上架要求的分层资源
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该如何解决》:
「必须分为前景图和背景图两层」「尺寸必须为 1024px1024px」「不允许自行裁剪圆角,不允许在资源内添加内间距」
「背景图需为纯色(不能透明且不能包含其他图形)」「前景图需为透明的 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
assembleHapBUILD 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),abilitystartWindowIcon: $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 与整库数据的导入导出
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 与 releaseassembleHap均 BUILD SUCCESSFUL。
未做(上游此项里的其余部分):自动数据库导出(每 3 天一份、只留最近 5 份)与 HTML / 收藏导出;
取舍记录见 docs/07-ui-layout-parity.md §4 #40/#41。
v1.0.15 · 设置里新增「关于」页
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 / 跟随系统)齐全。
- 应用信息:版本、包名、运行环境(系统版本 + API)、设备机型、上游基线
-
顺带处理了本轮在新页面撞到的 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 · 滑动动作自动回弹
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 · 下载单集时封面不再闪
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 · 下载单集倍速修复与倍速自检
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 设置页底部内容不可见
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 秒
1.0.8 以来的改动:
- 蓝牙断开并自动暂停后,把播放进度往回调 5 秒 —— 设置 → 中断 →「蓝牙断开后回退」(默认开,秒数可改)
- 只对蓝牙生效:拔有线耳机照旧只暂停、不回退。蓝牙掉线到系统把设备丢失交给应用之间有延迟,
这段延迟里音频可能已经改从扬声器外放或干脆被跳过,回退几秒让重连后不漏内容 - 回退顺序是「先暂停、再回退」:蓝牙断开后音频多半已经改从扬声器外放,反过来的话这几秒会被重放一遍
- 回退后的位置会立即落盘,冷启动 / 重新加载单集时从回退后的位置继续
详见提交 81ccf0f(实现 + docs/feature-diff/02-playback-audio.md 的差异记录)。
附件为 未签名 release HAP(versionName 1.0.9 / versionCode 1000009),真机安装前需自行签名。