Repository navigation
v3.0.1-Rustic-JNI.30209
tagged this
03 Sep 09:58
恢复列表中已卸载应用的图标始终显示为默认蓝色占位图,本次定位并修复了 涉及备份端、恢复端与 UI 组件的一系列问题。 根因涉及多处: 1. 图标备份直接压缩 filesDir/icon 目录,而该目录同时是恢复端解压落地点, 导致跨账号解压时产生 <accountId>/<accountId> 套娃目录,图标层层嵌套。 2. labels.json 仅写入本次激活应用,已卸载应用缺少名称映射。 3. PackageIconImage 一次性取图并按 (packageName, icon, accountId) 缓存, 两阶段加载时图标解压晚于列表展示,占位图被永久缓存无法刷新。 4. CloudRestorePage 用带 "accountName=" 前缀的原始参数计算 accountId, sanitize 后得到 accountName_COS,与 ViewModel 解压落点 COS 不一致, 导致读取路径错误、回退占位图。 修改内容: - core/service PackagesBackupUtil: labels.json 改为累积合并 + 全量已安装 应用映射;图标备份改用独立 staging 目录,与恢复落地点解耦,消除套娃。 - core/ui Image: PackageIconImage 新增 iconVersion 参数并加入 LaunchedEffect 与 remember 的 key;取图从 scope.launch 改为 LaunchedEffect 内 withContext, 随生命周期取消,避免旧协程写入陈旧状态。 - feature/restore ResticRestoreViewModel/CloudRestoreViewModel: 新增 _iconVersion 信号,图标解压成功后自增,触发列表项重新取图。 - feature/restore ResticRestorePage/CloudRestorePage: 收集并透传 iconVersion; CloudRestorePage 在函数顶部集中计算 accountId(先去 accountName= 前缀再 sanitize),修复账号目录不一致导致的路径错误。