laoyang
199b6c177f
feat(清理): 卸载残留治理 —— 显式清除入口 + 孤儿兜底加强 #3
鸿蒙没有「应用即将被卸载」的回调(网传的 preUninstallHook /
uninstallDataPolicy 在本机 SDK 中均不存在),而系统日历数据属于
沙箱外,卸载时不会被系统清理 ⇒ 用户卸载后会永久残留镜像账户
(还会继续提醒)。本次提供显式入口 + 状态兜底。
1. AccountStore.isEmptyVaultConfirmed()
区分「账号库真的空」与「loadAll 吞异常返回空」。
依据:loadAll 内部把所有异常 catch 后返回 [],调用方无法从返回值
辨别,而孤儿清理一旦误判就会把用户真实在用的镜像全删掉。
2. SystemCalendarMirror.purgeOrphanAccountMirrors()
原来 accounts.length === 0 一律跳过(安全阀),导致卸载重装后
旧镜像永远清不掉。改为三态:
① 有账号 → 只清 accId 不匹配的(原逻辑)
② 空 + 确认空白 → 全清(卸载/重置后的残留)
③ 空 + 拿不准 → 仍跳过(读异常,不能误删)
全清模式下不再因「解析不出 accId」跳过脏账户,否则清不干净。
3. SettingsPage 新增独立卡片「清除系统日历数据」
- 「彻底清除系统日历镜像数据」:二次确认后 removeAll,
并关闭镜像开关(否则下一轮同步立刻重建,用户以为没清掉),
镜像本消失后把提醒交回 App(避免漏提醒)
- 零结果提示区分「没权限」与「本来就没有」,用户要的是确认清干净
- 卡片放在镜像开关之外:关着镜像时也能清残留(正是典型场景)
- 原「清理残留镜像账户(诊断)」一并从镜像卡片内移入本卡
只删系统日历镜像;CalDAV 账号与服务器日程完全不动。
2026-10-30 13:34:09 +08:00
..
2026-10-30 13:34:09 +08:00
2026-09-13 15:50:37 +08:00
2026-09-13 15:50:37 +08:00
2026-09-13 15:50:37 +08:00
2026-09-13 15:50:37 +08:00