鸿蒙端提交

This commit is contained in:
Developer
2026-06-18 03:09:19 +08:00
parent 70830b0991
commit 6a02a313b2
20 changed files with 232 additions and 114 deletions

View File

@@ -2,7 +2,45 @@
所有重要变更均记录于此文件。格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/)。
> 保留最近 10 个版本v6.79.0 ~ v6.88.0)。更早版本已归档至软件特性功能文档。
> 保留最近 10 个版本v6.80.0 ~ v6.89.0)。更早版本已归档至软件特性功能文档。
***
## [v6.89.0] - 2026-06-17
### 🛠 评分弹窗商店名称多语言 + Beta问卷按钮隐藏跨平台修复
#### 1. "给个好评"弹窗商店名称由硬编码"Google Play"改为多语言"应用商店"
- **需求**: Android 端点击"给个好评"后,跳转确认弹窗显示硬编码英文"Google Play",未接入多语言系统,风格不统一
- **实现**:
- `t_about.dart` 新增 `appStore` 翻译字段(构造函数 + 字段定义 + toMap + fromMap
- 14 种语言文件全部补充 `appStore` 翻译:
- zh_cn: 应用商店 / zh_tw: 應用商店 / en: App Store / ru: Магазин приложений
- pt: Loja de aplicativos / ko: 앱 스토어 / ja: アプリストア / it: App Store
- hi: ऐप स्टोर / fr: App Store / es: Tienda de aplicaciones / de: App Store
- bn: অ্যাপ স্টোর / ar: متجر التطبيقات
- `app_store_service.dart``getStoreName` 方法Android 分支由 `return 'Google Play'` 改为 `return t.about.appStore`
- **影响**: `profile_page.dart``about_page.dart` 的"给个好评"/"评价应用"入口弹窗文案自动跟随系统语言
#### 2. Beta 页面"填写问卷"按钮提交后隐藏逻辑跨平台生效
- **问题**: 问卷提交后按钮只在 iOS 端隐藏Android 等端不隐藏
- **根因**:
1. `_QuestionnaireSheet` 不符合条件关闭时调用 `_markQuestionnaireSubmitted()``await``Navigator.pop` 可能在 SharedPreferences 写入完成前执行
2. Sheet 关闭后仅依赖 `_loadQuestionnaireSubmitted()` 异步重读 SharedPreferences 更新 UI跨平台存在时序差异iOS NSUserDefaults 内存同步快Android SharedPreferences.apply 异步落盘)
- **修复**:
- `_QuestionnaireSheet` 的两处关闭按钮改为 `Navigator.pop(context, true)` 返回已提交标记
- `_showQuestionnaire` 接收 Sheet 返回值,`submitted == true` 时立即 `setState` 更新 `_questionnaireSubmitted`,不再依赖 SharedPreferences 时序
- 不符合条件关闭分支改为 `async` + `await _markQuestionnaireSubmitted()`,并在 await 前获取 `Navigator.of(context)` 避免 `use_build_context_synchronously`
- 保留 `_loadQuestionnaireSubmitted()` 作为兜底,确保与持久化状态最终一致
- **效果**: 所有平台iOS/Android/Windows/macOS问卷提交后按钮立即隐藏
#### 修改文件
| 文件 | 变更 |
|---|---|
| `l10n/types/t_about.dart` | 新增 `appStore` 字段(构造/定义/toMap/fromMap |
| `l10n/languages/*.dart` (14 个) | 补充 `appStore` 多语言翻译 |
| `core/services/app_store_service.dart` | Android 端商店名称改用 `t.about.appStore` |
| `features/settings/presentation/experimental_features_page.dart` | 问卷 Sheet 返回值即时更新 UI + await 修复时序 |
***
@@ -312,49 +350,3 @@
| `l10n/languages/en.dart` | 新增英文翻译Remember Account |
| `features/auth/presentation/login_form_sections.dart` | `PasswordFormSection` 新增 `isRemembered`/`onToggleRemember` 参数,将忘记密码按钮改为 Row 布局(左:记住账户复选框,右:忘记密码) |
| `features/auth/presentation/login_page.dart` | 新增 `_rememberAccount` 状态、`_saveRememberAccount()` 方法;`_loadLastLoginAccount()` 读取 `remember_account` 偏好;`_handlePasswordLogin()` 登录成功后保存/清除账户 |
***
## [v6.79.0] - 2026-06-17
### 🔒 隐私合规 — 修复安卓端自启动问题androidx.glance.appwidget
#### 问题描述
1. 应用商店审核发现:`androidx.glance.appwidget` SDK 在应用退出后触发自启动1次/秒),无隐私文本覆盖
2. 审核依据:《个人信息保护法》要求 APP 未向用户明示且未经用户同意,不得存在频繁自启动行为
3. 根因:`home_widget` 包引入了 `androidx.glance:glance-appwidget:1.1.1` 依赖,项目未使用 Glance Widget 但该库被打包进 APK其内部 `GlanceAppWidgetReceiver`/`GlanceAppWidgetService` 被系统广播触发导致自启动
4. 次要问题8个桌面小部件 Provider 在系统定时 `APPWIDGET_UPDATE` 广播触发时,未检查隐私协议状态即执行数据读取
#### 修复内容
**1. 彻底移除 androidx.glance.appwidget 依赖**
| 文件 | 变更 |
|---|---|
| `packages/home_widget/android/build.gradle` | 移除 `implementation "androidx.glance:glance-appwidget:1.1.1"` 依赖 |
| `HomeWidgetGlanceWidgetReceiver.kt` | 删除未使用的 Glance Receiver 源文件 |
| `HomeWidgetGlanceState.kt` | 删除未使用的 Glance State 源文件 |
**2. AndroidManifest 排除 Glance 组件合并**
| 文件 | 变更 |
|---|---|
| `AndroidManifest.xml` | 新增 `tools:node="remove"` 移除 `GlanceAppWidgetReceiver``GlanceAppWidgetService`,防止残留库通过 manifest merge 注入 |
**3. 所有 Widget Provider 增加隐私协议守门**
| 文件 | 变更 |
|---|---|
| `PrivacyAwareHomeWidgetProvider.kt` | 新建基类,在 `onUpdate` 中检查 `agreement_accepted` 标志,未同意时显示占位视图不读取任何业务数据 |
| `widget_privacy_placeholder.xml` | 新建隐私占位布局,提示"请先同意隐私政策" |
| `DailySentenceProvider.kt` | 改为继承 `PrivacyAwareHomeWidgetProvider``onUpdate``onUpdateWithAgreement` |
| `ReadlaterProvider.kt` | 同上 |
| `DailyCardProvider.kt` | 同上 |
| `FortuneProvider.kt` | 同上 |
| `CountdownProvider.kt` | 同上 |
| `PomodoroProvider.kt` | 同上 |
| `SolarTermProvider.kt` | 同上 |
| `CheckinProvider.kt` | 同上 |
| `CtcLatestNoteProvider.kt` | 同上 |
#### 合规影响
- `androidx.glance.appwidget` 自启动行为彻底消除(依赖移除 + Manifest 排除 + 源文件删除三重防护)
- Widget Provider 在用户未同意隐私政策前不执行任何数据操作,仅显示占位提示
- 与现有 `SplashActivity` 协议守门机制形成完整闭环