提交范围:
d273501e→177250c0| 返回 README
- 新增"跳过休息日"选项 — 统一中国时区与节假日数据就绪状态,默认开启省电、返回桌面等行为开关
- 任务列表新增"已跳过"状态展示 — 跳过原因通过事件同步到任务列表与运行日志
- 任务列表新增随机时间范围展示 — 返回前台时自动刷新,格式统一为时:分
- 首页整体改版为任务状态卡片布局 — 适配沉浸式状态栏,工具栏改为浅色样式、菜单内联化并新增导入入口,启动按钮统一样式与文案
- 任务卡片新增状态药丸与链式轨道动画 — 新增 TaskState 枚举统一状态文案与徽章配色,链式轨道按执行进度着色、节点脉冲动画,并以状态药丸 + 结果色块双编码状态
- 首页新增重置时间文案与运行状态标签 — 订阅重置时间变化事件,移除定时刷新、改为初始化与 tick 时按需更新
- 设置 / 任务配置界面重构为卡片分组布局 — 按服务权限、行为偏好、任务、工具分组,适配沉浸式状态栏并新增配置项说明文案
- 设置页新增「通知监听」独立开关 — 通知监听与结果来源解耦,作为与目标应用无关的常驻服务开关;开关状态以系统通知使用权为准,未授权点击跳转系统授权页,已授权时提示到系统设置撤销(使用权无法在 App 内关闭)
- 新增通用控件 SettingItemView 与 EmptyView — 设置项改声明式条目布局;空态支持图标、主副文案与重载按钮
- 各设置项新增矢量图标 — 图标主色调统一,主题色板补充完善
- 开关与单选控件统一样式 — SwitchCompat 自定义滑块 / 轨道,自定义单选按钮选择器与文字颜色
- 各类弹窗与选择器全面自定义化 — 添加 / 修改任务时间改用 TimeWheelLayout 滚轮选择器;重置时间、超时时间、目标应用选择、导出配置、工作日选择改用底部操作弹层(ActionSheet);随机时间、打卡口令、自定义重置 / 超时时间改用自定义输入弹窗;删除任务、使用须知改用自定义确认弹窗
- 统一视觉细节 — Button 全量替换为 MaterialButton,布局内边距 / 圆角统一引用 dimens
- 消息渠道选择器改为双磁贴卡片 — 企业微信 / QQ 邮箱单选切换,未配置渠道置灰禁用,恢复上次选择并按配置状态校验切换;渠道页展示配置状态与保存时间
- 新增测试发送确认对话框 — 配置摘要展示、发送中状态,失败不保存配置并支持重试;企微 / 邮件新增统一测试发送入口
- 企业微信改为文本 + 图片分步发送 — 发送前前置文件校验,移除附件渠道降级与超时机制
- 新增"自动伪息屏"开关 — 与远程息屏 / 亮屏指令联动,开关状态持久化并按需显示蒙层
- 锁屏时钟改为纵向布局容器 — 新增上滑或音量下键退出提示,并同步随机浮动逻辑
- 新增全部指令展示页 — 点击复制指令到剪贴板,指令列表提取为静态常量,设置页显示指令条数
- 截屏失效推送告警 — 冷启动与运行中掉线均推送告警,30 分钟节流避免重复打扰
- 通知监听失效推送告警 — 新增
sendNotificationDownAlert(),30 分钟节流,监听恢复连接后重置;断开回调中先requestRebind自愈临时解绑,5 秒后仍无使用权才告警,并配合冷启动、每日调度开始两处检查,覆盖远程指令与钉钉打卡结果判定失效场景 - 新增日志导出功能 — 支持通过 QQ 分享导出
- 截屏改为保存完整图片
- 新增
ResultSourceGuard统一校正结果来源 — 按「目标应用 + 通知 / 截屏真实能力」自愈RESULT_SOURCE_KEY:非钉钉只保留截屏(不可用时置为未选择),钉钉保留用户有效选择并在失效时降级另一通道;冷启动、每轮任务调度、截屏服务销毁、返回前台时执行
- 修复每日自动循环关闭后到重置点仍自动续跑 — 调度主循环新增开关检查,远程"关闭循环" 后到重置点不再执行新一轮任务,改为发送通知并停止调度
- 修复远程"关闭循环"指令误将开关写为开启 — 指令落盘值笔误为
true,导致开关设置不生效 - 修复任务列表实际时间错乱 — 按位置记录并重置实际时间,停止后保留已完成状态与配色
- 停止任务时重置今日处理标记 — 便于重启后重新评估当天任务
- 修复调度跳过条件的运算符优先级错误 —
targetApp != 钉钉 && resultSource != 1 || !isStateActive()因&&优先级高于||,会在「钉钉 + 通知来源」场景错误跳过当天全部任务并误报"截屏授权已失效",已补全括号
- 修复手动测试消息缺少 webhookKey — 手动发送测试消息时补充 webhookKey 覆盖参数
- 修复非钉钉目标无法使用通知监听 — 通知监听开关不再受目标应用限制,非钉钉应用也可常驻监听小号
DT#远程指令;打卡结果来源仍强制由截屏判定,避免两套判定通道混淆 - 修复截屏服务销毁时无条件把来源写成 0 —
MediaProjection.onStop与CaptureImageService.onDestroy改为调用ResultSourceGuard.reconcile(),避免非钉钉目标留下「来源 = 通知」的非法组合导致后续任务全部被跳过
- 引入 MVVM 架构 — 新增 MainViewModel 接管任务增删改查、导入与列表状态,StateFlow 驱动 UI 渲染;拆分 MainEvent、TaskListState、MainDialogManager 等职责,事件流统一迁移至 events 包
- 移除 lite 模块依赖 — 适配器、ViewHolder、BaseActivity、扩展函数与 RetrofitFactory 内联至项目,新增 Glide 依赖
- AppConfig 收敛配置读写 — 内联 SP 实现与配置文件创建 / 迁移逻辑,抽取 backendOf 统一字符串路由,补充 Long/Float 存取与初始化前置
- 消息发送渠道逻辑简化 — 移除渠道覆盖参数统一按配置分发;邮件发送改为显式传入收发件配置
- 统一资源引用与命名 — 颜色资源重命名并补充主题色板,尺寸统一引用 smallest_text_size 与 padding/margin/radius 系列 dimens
- MainActivity 初始化流程重构 — 按职责拆分方法与 Flow 订阅
- LoadingDialog 重构为自定义 AlertDialog 布局 — 视觉与其他弹窗统一,精简重载方法并支持消息默认值与任意线程安全调用
- 统一事件类注释格式 — TipsEvent.Skip 重命名为 DaySkipped 并清理冗余注释
- 调度跳过条件增加截屏真实能力校验 — 非钉钉目标同时校验
ProjectionSession.isStateActive(),运行中截屏失效时可在下一任务跳过剩余任务并告警 - 来源自愈前移至每个任务执行前 — 调度循环内逐任务校正,运行中截屏失效可及时降级(钉钉降级为通知判定,非钉钉跳过剩余任务)
- 设置页通知监听说明随目标应用动态变化 — 钉钉显示「接收小号远程指令,并判定钉钉打卡结果」,非钉钉显示「接收小号远程指令(打卡结果由截屏判定)」
- 通知监听开关状态三处同步 — 授权回调、监听连接成功、
onResume统一以系统授权状态刷新,避免开关显示与真实权限不一致 - 非钉钉目标的通知监听角色收窄 — 仅作为远程指令通道,选择「通知监听」作为结果来源时给出解释性提示,不再静默拦截
- 新增界面原型 v2 — 含暗色主题、目标应用切换、休息日倒计时、对话框组件演示与各类弹层原型,并适配触屏交互
- 设置页原型同步现有布局 — 分组调整为「服务与权限 / 任务目标 / 行为偏好 / 任务 / 工具 / 关于」,移除截屏服务独立开关与设置页伪息屏行,目标应用候选改为钉钉、企业微信、飞书、移动办公 M3
- 原型演示通知监听与结果来源解耦方案 — 新增通知监听开关与来源提示行;非钉钉目标时通知段置灰锁定、来源强制截屏,关闭通知监听且来源为通知时自动降级并提示
- 重构 WebRTC 点对点通信方案文档 — 改为首次手动交换 SDP、绑定后 MQTT 自动重协商并引入托管 TURN 兜底,架构图改用 Mermaid 绘制
- 更新 README 文档 — 简化 Android 8 以下系统的 minSdk 修改说明,反面教材截图改用图片标签并统一宽度,精简冗余说明并补充打卡失败原因