Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions doc/members/b/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# B 同学第一阶段成果

姓名:胡嘉豪 学号:202430224010 日期:2026-10-21(北京时间)

分工:提醒、小组件、工具模块及后续快捷提醒。个人分支:`member/b-quick-reminder`。
仓库:<https://github.com/ttt587/Notes>。起点为 `origin/develop` 的
`81a66024fe48eaa2206b854430856fe3875ff3ba`,建立分支时与 `origin/master` 相同。

本阶段完成项目拉取、个人分支、13 个范围内顶层类的职责清单、3 个关键类的详细阅读及源码注释,以及 2 个原始代码质量问题记录。快捷提醒实现和应用运行测试留待第二阶段。

| 成果 | 位置 |
| --- | --- |
| 模块类清单、三个关键类详读、提醒调用链 | [phase-one-reading.md](phase-one-reading.md) |
| 两个质量问题的原始证据、复现步骤、修复建议 | [quality-issues.md](quality-issues.md) |
| 用例、包依赖、类关系、提醒流程图 | [diagrams.md](diagrams.md) 与 [assets](assets/) |
| 环境、构建报错、已执行检查、下一阶段测试表 | [environment-and-checks.md](environment-and-checks.md) |
| 可重跑的只读检查与本次输出 | [verify_phase_one.py](verify_phase_one.py)、[verification.txt](verification.txt) |
| 按提供模板填写的泛读标注维护报告 | [胡嘉豪_泛读标注维护报告_第一阶段.docx](胡嘉豪_泛读标注维护报告_第一阶段.docx) |
| 按提供模板填写的质量分析报告 | [胡嘉豪_质量分析报告_第一阶段.docx](胡嘉豪_质量分析报告_第一阶段.docx) |

源码注释位于 `NoteWidgetProvider`、`DataUtils`、`DateTimePickerDialog`,搜索“B 阅读标注”或“B 阶段一阅读标注”可定位。共增加 39 个注释物理行,包含 Javadoc 的起止行;三个文件去除注释和空白后的 Java token 序列与基线一致。

首次提交 SHA 由 Git 在提交完成后生成,见本次交付消息或运行 `git log --reverse 81a66024fe48eaa2206b854430856fe3875ff3ba..member/b-quick-reminder --format="%H %s"`。不将本提交自身 SHA 写回本提交,避免产生循环依赖。

本目录是个人阶段成果,后续由小组汇总到总报告。原始模板和作业要求保留在工作区根目录,未被覆盖。根据本人要求,本阶段不向群聊发送消息。
Binary file added doc/members/b/assets/classes.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/members/b/assets/packages.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/members/b/assets/reminder-flow.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/members/b/assets/use-cases.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
80 changes: 80 additions & 0 deletions doc/members/b/diagrams.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# B 模块源代码结构图

图示依据基线及本阶段阅读;只展示 B 负责的功能和相关依赖,不代表整个应用的完整 UML。PNG 在 assets 下,可供 Word 报告和后续小组 PPT 复用。箭头含义分别标明,不能将依赖箭头当成继承。

## 范围内用例

![范围内用例](assets/use-cases.png)

用例参与者为用户;范围内功能包括设置自定义提醒、取消提醒、查看提醒、通过桌面小组件查看和编辑便签。快捷提醒是下一阶段需求,未列为现有实现。

## 包依赖

![包依赖](assets/packages.png)

```mermaid
flowchart LR
ui[ui 提醒和编辑界面] --> model[model 工作模型]
ui --> tool[tool 数据查询和资源工具]
ui --> widget[widget 桌面小组件]
model --> data[data 便签数据与契约]
widget --> data
widget --> tool
widget --> ui
tool --> data
tool --> ui
```

此图是 B 范围的源码包依赖视图,不包含全部 gtask 依赖。tool → ui 的证据是 AppWidgetAttribute 与偏好键引用,widget → ui 的证据是点击目标 Activity 引用。没有独立 Widget Service。

## 关键类关系

![关键类关系](assets/classes.png)

```mermaid
classDiagram
AppWidgetProvider <|-- NoteWidgetProvider
NoteWidgetProvider <|-- NoteWidgetProvider_2x
NoteWidgetProvider <|-- NoteWidgetProvider_4x
NoteWidgetProvider ..> ResourceParser : 背景资源
NoteWidgetProvider ..> NoteEditActivity : 点击Intent
NoteWidgetProvider : +onDeleted(context, ids)
NoteWidgetProvider : #update(context, manager, ids)
NoteWidgetProvider : #getLayoutId()*
NoteWidgetProvider : #getBgResourceId(bgId)*
NoteWidgetProvider : #getWidgetType()*
AlertDialog <|-- DateTimePickerDialog
DateTimePickerDialog --> DateTimePicker : 持有控件
NoteEditActivity ..> DateTimePickerDialog : 创建和回调
NoteEditActivity --> WorkingNote : 工作状态
WorkingNote ..> NoteEditActivity : 状态监听回调
NoteEditActivity ..> AlarmReceiver : PendingIntent
AlarmInitReceiver ..> AlarmReceiver : 开机重新注册
AlarmReceiver ..> AlarmAlertActivity : 启动
AlarmAlertActivity ..> DataUtils : 摘要和可见性
```

## 提醒流程

![提醒流程](assets/reminder-flow.png)

```mermaid
flowchart TD
A[编辑页 设置提醒] --> B[DateTimePickerDialog 自定义时间]
B -->|确定| C[WorkingNote.setAlertDate 标记待保存值]
C --> D[onClockAlertChanged 未保存便签先尝试保存]
D --> E{有有效便签ID}
E -->|否| F[显示空便签错误提示]
E -->|是| G[按便签URI建立PendingIntent并注册RTC_WAKEUP]
C -.编辑页onPause.-> H[saveNote 经Note.syncNote持久化 按需刷新组件]
G -->|到时| I[AlarmReceiver]
I --> J[AlarmAlertActivity 查询可见性 展示并播放铃声]
J --> K[关闭对话框 停止并释放播放器]
L[取消提醒菜单] --> M[setAlertDate 0 false]
M --> N[相同便签URI的PendingIntent 调用AlarmManager.cancel]
M -.编辑页onPause.-> H
O[设备BOOT_COMPLETED] --> P[AlarmInitReceiver 查询未来普通便签提醒]
P --> G
```

现有便签设置提醒后,系统注册发生在回调中,数据库持久化依赖保存流程;两者不是同一个操作。普通应用重启与 BOOT_COMPLETED 恢复路径应分别验证。
85 changes: 85 additions & 0 deletions doc/members/b/environment-and-checks.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# 第一阶段环境和验证记录

胡嘉豪 202430224010 2026-10-21(Asia/Shanghai)

## 环境与仓库

| 项目 | 本次记录 |
| --- | --- |
| 系统与终端 | Windows,PowerShell |
| Git | 2.53.0.windows.2 |
| 仓库和个人分支 | ttt587/Notes;member/b-quick-reminder |
| 基线 | 81a66024fe48eaa2206b854430856fe3875ff3ba;建立分支时 develop 与 master 一致 |
| 源码 | Android Java,Manifest versionName 0.1,minSdkVersion 14;未声明 targetSdkVersion |
| JDK | C:\jdk-24.0.2;直接执行 java.exe -version 显示 24.0.2 |
| Android SDK | ANDROID_HOME=E:\Sdk;platforms 有 android-34、35、36、36.1;build-tools 有 34.0.0、36.0.0、36.1.0 |
| 构建入口 | 无 gradlew、build.gradle、settings.gradle、build.xml;project.properties 被 .gitignore 忽略且本次未提供 |

## 实际尝试与完整错误

拉取命令:`git clone https://github.com/ttt587/Notes.git Notes`。首次受沙箱网络限制:

```text
Cloning into 'Notes'...
fatal: unable to access 'https://github.com/ttt587/Notes.git/': getaddrinfo() thread failed to start
```

在允许 Git 访问网络后重试成功。随后执行:

```powershell
git switch -c member/b-quick-reminder origin/develop
```

结果:成功创建个人分支,起点为上述基线。完成提交后将 upstream 指向同名远程个人分支。

在 Notes 根目录尝试 `& .\gradlew.bat assembleDebug`,PowerShell 返回:

```text
&:
Line |
2 | … ('ANDROID_SDK_ROOT='+$env:ANDROID_SDK_ROOT); & .\gradlew.bat assembl …
| ~~~~~~~~~~~~~
| The term '.\gradlew.bat' is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
```

这是构建入口缺失,尚未进入 Java 编译,不等于“编译器已发现源码错误”。现有较新 SDK 也不能单独证明旧工程可构建或不兼容。下一阶段需与负责构建的成员协调可重复的构建方案及 JDK/SDK 组合,再执行 APK 构建和设备验证。本次未擅自改造全组构建配置。

文档排版验证:打包的 render_docx.py 首次报 `FileNotFoundError: LibreOffice soffice.exe was not found on PATH`。改为通过已安装的 Word 只读导出 PDF,再使用同一打包渲染器与 Poppler 生成页面图片检查;未修改原始模板。

## 本阶段已执行检查

| 检查 | 结果与意义 |
| --- | --- |
| 原始代码清点 | 39 个 Java 文件,8 个包,10,002 物理行,包含注释和空行;由 git show 基线读取并统计 |
| 三个注释文件的 Java token 对比 | 通过;剥离注释和空白后与基线逐 token 相同,字符串和字符字面量保留 |
| 注释数量 | NoteWidgetProvider 13 行、DataUtils 15 行、DateTimePickerDialog 11 行,共 39 个净新增注释物理行 |
| git diff --check | 通过;无补丁空白错误 |
| Q-B-01 静态检查 | 两个分支均 FORMAT_24HOUR;Android 展示待实测 |
| Q-B-02 控制流检查 | 成功 return 跳过 cursor.close;Android 资源检测待执行 |
| APK 构建 | 阻塞于缺少 gradlew.bat;未生成 APK |
| Android 单元测试、设备测试、SonarQube | 未执行,不填报通过率或扫描指标 |

复核命令:`python doc/members/b/verify_phase_one.py`(Python 3,标准库)。脚本为只读,不修改源码;本次输出见 [verification.txt](verification.txt)。本阶段仅增加注释,因此没有添加与注释实现镜像的单元测试。

## 第二阶段测试计划

以下均为待执行用例,尚无通过结论。快捷项具体时间规则在实现前确定;时区默认跟随设备设置,测试固定 now 并记录时区。

| 编号 | 场景 | 输入或操作 | 预期检查 | 状态 |
| --- | --- | --- | --- | --- |
| B-T01 | 跨天 | 23:50 选择“明天上午 9:00” | 次日 09:00,秒及毫秒按约定归零 | 待执行 |
| B-T02 | 月末 | 1 月 31 日选择明天 | 进入 2 月 1 日,不产生非法日期 | 待执行 |
| B-T03 | 年末 | 12 月 31 日选择明天 | 次年 1 月 1 日 09:00 | 待执行 |
| B-T04 | 一周后 | 月末或年末选择一周后 | Calendar 跨界正确,时分规则符合约定 | 待执行 |
| B-T05 | 过去时间 | 自定义过去时间或当天快捷时刻已过 | 按明确策略提示或调整,不静默设错 | 待执行 |
| B-T06 | 取消提醒 | 设提醒后取消并退出编辑页 | 数据库时间清零,对应闹钟取消,原时刻不触发 | 待执行 |
| B-T07 | 应用重启 | 设置后正常退出,再启动应用 | 数据持久化、界面提示及计划提醒一致;与强制停止区分 | 待执行 |
| B-T08 | 设备重启 | 设置未来提醒后重启设备 | BOOT_COMPLETED 后恢复未来闹钟,已过期策略符合设计 | 待执行 |
| B-T09 | 提醒触发 | 设近期提醒,等待到时 | 显示正确便签和铃声,关闭后释放播放资源 | 待执行 |
| B-T10 | 小组件回归 | 分别放置 2×2 和 4×4,编辑内容和提醒 | 摘要、背景、点击目标及删除解绑正常 | 待执行 |
| B-T11 | 空白便签 | 新建空白便签并设提醒 | 给出原有错误提示,不注册无有效便签 ID 的提醒 | 待执行 |
| B-T12 | 12/24 小时 | 切换设置,测试 00:00、12:00、15:30 | 标题、滚轮与保存时间一致,回归 Q-B-01 | 待执行 |
| B-T13 | Cursor 释放 | 通话查询命中、未命中、null 和读取异常 | 可关闭对象均在完成后关闭,回归 Q-B-02 | 待执行 |

下一阶段需保留原界面和修改后界面截图、每项测试的设备版本、操作步骤、实际结果和对应 commit SHA。本阶段没有应用运行截图;图示是源代码结构图,不能替代运行证据。
Loading