Commit Graph
100 Commits
Author SHA1 Message Date
dongliangandClaude Opus 4.6 032657fb60 fix: EdgeTTS 强制 TLS 1.2 兼容 Android 8.1
Android 8.1 默认 TLS 配置可能不支持服务器要求的密码套件,
强制启用 TLS 1.2 + MODERN_TLS + COMPATIBLE_TLS 回退。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-08 13:22:11 +09:30
dongliangandClaude Opus 4.6 02f84e6c04 fix: EdgeTTS 用独立 OkHttpClient,去掉业务拦截器干扰
WebSocket 连接经过了 SignatureInterceptor/UnbindInterceptor 导致连接被重置。
改为独立的 OkHttpClient,不带任何业务拦截器。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-08 13:17:39 +09:30
dongliangandClaude Opus 4.6 bd6aa270c5 fix: TTS播放按钮加到正确的页面(TaskListFragment)
TaskDetailFragment 未被使用,实际任务页面是 TaskListFragment。
- 在 TaskListFragment 布局加悬浮播放按钮
- 在 TaskListFragment 加 TTS 播放/停止逻辑
- 切换任务(左右滑动)时自动停止播报
- 离开页面自动停止播报

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-08 13:12:17 +09:30
dongliangandClaude Opus 4.6 aafae56826 fix: TTS悬浮按钮不可见,提高对比度
背景从30%白透明改为50%,图标从白色改为黑色,黑底上更清晰。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-08 13:03:56 +09:30
dongliangandClaude Opus 4.6 cf4458526b feat: 任务详情页语音播报功能 (REQ-20260508-0006)
- 详情页右侧悬浮播放按钮(36dp半透明圆形)
- 播报内容:任务名+地点+时间+积分(>0)+备注,空字段跳过
- 播放中按钮高亮+图标切换,再点停止
- 离开页面自动停止播放
- TTS播放期间抑制提示音,避免叠加

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-08 12:57:51 +09:30
dongliangandClaude Opus 4.6 f01b1e3311 fix: EdgeTtsManager val 赋值编译错误
apply 块内 isPlaying 赋值改为外部引用,避免 val 重新赋值。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-08 12:36:18 +09:30
dongliangandClaude Opus 4.6 5a386a6060 feat: 接入 Edge TTS 免费中文语音合成
设备不支持内置中文 TTS,改用微软 Edge TTS(WebSocket 协议)。
- 新增 EdgeTtsManager:WebSocket 调用、MP3 缓存、MediaPlayer 播放
- 调试模式(设置页点头像6次)触发 TTS 测试
- 缓存机制:相同文本不重复请求,上限50条自动清理

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-08 12:33:59 +09:30
dongliangandClaude Opus 4.6 557363c80d feat: 添加 TTS 中文语音测试(调试模式触发)
设置页快速点击头像6次触发 TTS 测试,验证设备是否支持中文语音合成。
测试结果通过 Toast 和 Logcat 反馈,为后续任务语音播报功能做可行性验证。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-08 12:07:18 +09:30
dongliangandClaude Opus 4.6 fec1e80cf1 chore: 应用名称改为小趣智清洁,APK文件名包含版本号
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-08 11:33:56 +09:30
dongliangandClaude Opus 4.6 7c631025ba fix: 通知模式完成最后任务后跳到新任务页而非首页
原因:filterTaskIds 过滤为空数组后 isNotEmpty()=false
跳过了通知模式分支,走了正常 status=2 查询显示了新任务
修复:ids != null 就进通知分支,空数组+hasActioned 直接回首页

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 21:41:33 +09:30
dongliangandClaude Opus 4.6 d38060e9b3 fix: 操作成功弹窗不消失问题 + 统一弹窗交互
问题:back=false 导致弹窗永远不消失
修复:所有弹窗统一 back=true + countdown=2 自动消失
用 onBack 回调替代 postDelayed,弹窗消失后再执行刷新/返回

弹窗梳理:
- 操作成功(抢单/打卡/完成):2秒消失 → onBack 刷新列表
- 全部完成:2秒消失 → onBack 返回首页
- NFC打卡成功:2秒消失 → postDelayed 刷新详情
- 失败/网络异常:3秒消失 → 无回调

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 21:36:09 +09:30
dongliangandClaude Opus 4.6 646f780a1f fix: 任务操作后的交互优化(消除黑屏闪烁)
1. 操作成功后先显示弹窗 2 秒,弹窗消失后再刷新(不再立即刷新导致黑屏)
2. 刷新时不显示 loading(保持当前内容,静默更新)
3. 列表全部完成后显示"全部完成"弹窗 1.5 秒,再返回首页

之前:完成→黑屏loading→突然跳到下一个/回首页
现在:完成→弹窗"任务已完成"→平滑切到下一个/弹窗"全部完成"→回首页

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 21:31:44 +09:30
dongliangandClaude Opus 4.6 ac483b5f89 fix: 统计数字持久化到 SharedPreferences,重启后不显示 0
之前 lastStats 是内存缓存,重启后为 null,首页短暂显示默认值 0
现在每次 API 返回都持久化到 stats_cache SP
启动时优先读 SP 缓存 → 立即显示上次数字 → API 静默更新

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 21:14:19 +09:30
dongliangandClaude Opus 4.6 f4e9410211 fix: 通知模式下标题/页码/完成任务移除的问题
1. 标题根据任务实际 status 显示(通知模式下不再固定"新任务")
2. 页码:通知模式始终显示,正常模式接单池隐藏
3. 完成任务后从 filterTaskIds 中移除,避免已完成任务仍在列表

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 21:08:01 +09:30
dongliangandClaude Opus 4.6 e383ad190a feat: 用 productFlavors 区分调试和发布包名
dev: com.xiaoqu.watch(调试用,和旧版不冲突,可直接装到手表)
prod: com.witClean.watch(正式发布,用旧签名打包走 OTA 升级)

日常开发选 devDebug,发布时选 prodRelease + witcleaning2.keystore

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 20:46:57 +09:30
dongliangandClaude Opus 4.6 72f07f18f4 fix: 单个任务通知也跳转到统一的任务列表页
之前1个任务跳 TaskDetail,多个跳 TaskList,体验不一致
统一都跳 TaskListFragment(单任务时就是全屏展示一个)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 20:23:51 +09:30
dongliangandClaude Opus 4.6 0682c7e5c5 chore: 打包前清理(Timber release关闭 + 删除内网TODO注释)
1. Timber.DebugTree 只在 DEBUG 模式植入,release 不输出日志
2. 删除 build.gradle.kts 中的内网 IP 注释

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 19:00:34 +09:30
dongliangandClaude Opus 4.6 7e30cf88c4 fix: 禁用 ExpiredTargetSdkVersion lint 检查
手表设备不上 Google Play,targetSdk=27 是设备要求,跳过此检查

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 18:57:24 +09:30
dongliangandClaude Opus 4.6 5220bb98e5 feat: 包名改为 com.witClean.watch 实现旧版无缝升级
applicationId 从 com.xiaoqu.watch 改为 com.witClean.watch(和旧版一致)
versionCode 从 1 改为 183(旧版是 182),系统识别为升级
代码内部 package 保持 com.xiaoqu.watch 不变
使用旧版同一签名证书 witcleaning2.keystore 打包

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 18:46:49 +09:30
dongliangandClaude Opus 4.6 7b5ad64fea feat: 任务切换加滑动动画 + 严格手势防误触
1. 手势判断从 dx>dy 改为 dx>dy*2 且 dx>80px,斜滑不再误触
2. 切换任务时内容滑出+滑入动画(120ms出+150ms入),有明确感知

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 17:42:00 +09:30
dongliangandClaude Opus 4.6 3d991c0169 fix: 首页用缓存数据填充卡片数字,消除刷新闪烁
之前流程:inflate(数字=0) → API请求 → 数字跳到真实值,产生闪烁
现在流程:inflate → 立即用 lastStats 缓存填充 → API静默更新
首次启动无缓存时仍显示 XML 默认值 0,之后都是无感刷新

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 17:12:42 +09:30
dongliangandClaude Opus 4.6 e67100ba83 fix: 首页卡片数字只在值变化时更新,减少刷新闪烁
之前每次 fetchStatistics 都重新赋值 text,即使值没变也触发重绘
改为先比较再赋值,值相同时不操作

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 17:07:51 +09:30
dongliangandClaude Opus 4.6 ea72c2aab0 fix: 返回按钮恢复64dp宽居中,高度48dp增加上下点击区
宽度回到64dp不影响标题居中,高度48dp比文字高增加纵向点击面积

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 17:03:20 +09:30
dongliangandClaude Opus 4.6 1cafb74f04 fix: 标题栏恢复 LinearLayout,返回按钮100dp宽+左padding
FrameLayout 覆盖层方案导致页面内容消失
改回 LinearLayout,按钮宽度 100dp 图标靠左(paddingStart=21dp)
右侧空白区域都是可点击范围

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 16:58:28 +09:30
dongliangandClaude Opus 4.6 1dc34de35a fix: 返回按钮改用透明覆盖层方案
标题栏改为 FrameLayout,图标保持原样
上层叠一个 120dp 宽的透明 View 覆盖左半边
点击左半边任意位置都触发返回,不影响视觉

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 16:52:34 +09:30
dongliangandClaude Opus 4.6 0c5d9076a8 fix: 返回按钮改为整个标题栏左半边可点击
去掉 TouchDelegate,改用 FrameLayout 占标题栏左半边(weight=1)
图标靠左显示,但整个左半边 48dp 高的区域都能触发返回

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 16:45:17 +09:30
dongliangandClaude Opus 4.6 7d1172f20d fix: 返回按钮点击区域向右扩展 10dp→40dp
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 16:38:47 +09:30
dongliangandClaude Opus 4.6 2a06cf684c fix: 返回按钮高度改回 match_parent,不再撑高标题栏
点击区域已由 TouchDelegate 扩展,不需要按钮本身 56dp 高

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 16:34:56 +09:30
dongliangandClaude Opus 4.6 d5d1eeef89 fix: 返回按钮用 TouchDelegate 扩大点击区域
图标大小不变,触摸区域向下扩展 20dp、向右扩展 10dp
解决用户点偏到下方内容区的问题

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 16:30:34 +09:30
dongliangandClaude Opus 4.6 a41c8879e6 fix: 备注标签和内容合为一个 TextView
"备注: xxx" 拼在一起,去掉多余的标签 TextView 和 LinearLayout 容器
样式不变(深灰背景、22sp、白色文字、13dp padding)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 16:25:18 +09:30
dongliangandClaude Opus 4.6 8af7f43185 style: 备注恢复为同行标签版(深灰背景+备注:+白色内容)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 16:19:09 +09:30
dongliangandClaude Opus 4.6 3cc357ba59 fix: 备注去掉"备注:"前缀,只显示纯内容
前缀和内容拼接后视觉不统一,绿色背景已能区分备注区域

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 16:15:30 +09:30
dongliangandClaude Opus 4.6 7894a7824e style: 备注恢复绿色淡背景样式(24sp 灰色文字 + padding)
保留"备注:"前缀,样式还原为原始的 bg_note_green 风格

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 16:10:07 +09:30
dongliangandClaude Opus 4.6 0def08dfca fix: 备注改为纯文本,去掉卡片容器和内边距
"备注: 需要带清洁工具" 直接一行文字,不居中不占额外空间

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 16:04:07 +09:30
dongliangandClaude Opus 4.6 7d2f954e97 style: 电量数字移回电池图标外部
电池内部只保留充电时的  闪电符号
数字在电池左侧显示(16sp 加粗,颜色跟随状态)
电池图标恢复 28×13 正常尺寸

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 15:59:18 +09:30
dongliangandClaude Opus 4.6 f1a99b71f8 fix: 电池数字改为白字+黑色描边
黑字在黑色背景上看不见,白字在绿色填充上也不清楚
改用白色填充+黑色描边,在任何背景上都清晰可读

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 15:38:27 +09:30
dongliangandClaude Opus 4.6 154802f136 fix: 备注标签和内容改为同一行
"备注: 需要带清洁工具" 一行显示,不再换行浪费空间

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 15:36:40 +09:30
dongliangandClaude Opus 4.6 432dfc8d3d style: 备注样式优化
- 加"备注"标签(18sp 灰色),用户知道这块文字是什么
- 内容改白色文字(text_primary),对比度更高
- 背景从绿色改为深灰卡片色+细边框,和指引块(橙/绿)区分
- 新建 bg_note.xml 替换 bg_note_green.xml

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 15:28:52 +09:30
dongliangandClaude Opus 4.6 10dacd26ef fix: 电池内部数字改为黑色,避免和填充条颜色混淆
白字压绿底几乎看不见,改为黑色在任何填充色上都清晰

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 15:21:23 +09:30
dongliangandClaude Opus 4.6 78d1977b98 fix: 代码遗漏修复(NFC回调安全+绑定电量+信号初始值)
1. NFC 打卡回调加 isAdded/view 安全检查,防止 Fragment 销毁后崩溃
2. postDelayed 回调同样加保护
3. 绑定二维码电量从写死100改为读取实时电量
4. 信号强度启动时主动读一次初始值(和蓝牙同样处理)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 15:10:06 +09:30
dongliangandClaude Opus 4.6 abd5ebd20c style: 电量和闪电显示在电池图标内部
- 电池图标加大 28×13 → 38×16,内部空间足够放文字
- 正常时电池内显示百分比数字(如 73)
- 充电时电池内显示  闪电符号
- 去掉电池外部的百分比文字,信息集中在图标上

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 13:52:03 +09:30
dongliangandClaude Opus 4.6 9eb618dfd6 style: 电池显示优化
- 百分比文字放大 15f→18f,颜色跟随电池状态
- 充电时加  前缀(如 73%),一眼可见充电状态
- 颜色分级更清晰:>60%绿 / 21-60%白 / 11-20%橙 / ≤10%红
- 低电量时电池壳也变红,整体醒目
- 统一 getBatteryColor() 逻辑复用

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 13:35:27 +09:30
dongliangandClaude Opus 4.6 6f11784b8a feat: 接入真实信号强度显示(之前写死满格)
- AppEvent 新增 SignalChanged 事件
- SystemStateMonitor 注册 PhoneStateListener 监听信号强度
- HomeFragment 接收事件更新 StatusBar 信号条(0-4级)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 13:32:25 +09:30
dongliangandClaude Opus 4.6 a5453d1013 fix: 蓝牙图标初始状态不正确
bluetoothOn 默认 true,如果蓝牙一开始就是关的不会触发状态变化事件
在 initBatteryStatus 中主动读取 BluetoothAdapter.isEnabled 初始化

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 13:26:22 +09:30
dongliangandClaude Opus 4.6 c653e5b78d fix: 图片和语音改用 app OkHttp 4.12 下载(弃用系统 HttpURLConnection)
根因:HttpURLConnection 底层是系统内置的 com.android.okhttp 2.x
即使 Conscrypt 替换了 TLS provider,系统 OkHttp 的 ALPN/连接管理
仍是旧逻辑,阿里云 OSS 不接受。
改用 app 自带的 OkHttp 4.12.0(有完整 ALPN/HTTP2 支持)+ Conscrypt

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 13:15:52 +09:30
dongliangandClaude Opus 4.6 bb489140f8 feat: 引入 Conscrypt 解决 Android 8.1 TLS 握手失败
设备系统 conscrypt 版本过旧,连阿里云 OSS 的 HTTPS 握手被 reset。
引入 org.conscrypt:conscrypt-android:2.5.2 作为首选安全提供者,
在 Application.onCreate 中注册,所有网络请求自动使用现代 TLS。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 13:04:55 +09:30
dongliangandClaude Opus 4.6 9f7a0a5c1e feat: 电量变化时上报设备状态到服务端
之前 reportDeviceStatus 接口只定义未调用,手机端无法获取实时电量
现在电量变化 >=5% 时自动调用 setWatchStatusByImeiFormWatch 上报
去抖防止频繁请求

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 12:56:20 +09:30
dongliangandClaude Opus 4.6 9b0d44d8da fix: 待打卡地点块移到备注/语音/图片上方
XML 中 blockGoWhere 和 blockNoScene 从底部移到 tvNote 前面
去掉已不用的 blockHowTo(蓝色指引块)
现在布局顺序:任务名→地点指引→备注→语音→图片

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 12:47:16 +09:30
dongliangandClaude Opus 4.6 39d7fc8b66 feat: 大图查看支持左右滑动切换图片
- 传入所有图片 URL 列表和起始索引
- 左滑下一张,右滑上一张
- 底部显示页码指示 1/3
- 单击关闭

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 12:40:30 +09:30
dongliangandClaude Opus 4.6 89602070ae fix: 大图查看改用 decorView 顶层覆盖
dialog_container 可能被 NavHostFragment 遮挡导致不可见
改为直接添加到 Activity 的 decorView,确保在最顶层
背景改为纯黑(全屏查看更清晰)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 12:35:38 +09:30
dongliangandClaude Opus 4.6 43e61ffb70 feat: 任务推送增加语音提示(newMessage.mp3)
planId=2 新消息方案加上 audioResId = R.raw.new_message
和旧版一致,推送新任务时震动+播放语音提示

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 12:33:05 +09:30
dongliangandClaude Opus 4.6 caa38c53d8 fix: 图片点击放大修复(clickable + 关闭事件)
- 缩略图加 isClickable/isFocusable 防止被 ScrollView 拦截
- 全屏大图的 overlay 和 imageView 都设点击关闭
- 加日志确认 showFullImage 被触发

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 12:27:49 +09:30
dongliangandClaude Opus 4.6 cacbdb6aaa fix: 图片和语音改用 HttpURLConnection 下载
OkHttp 在该设备连 OSS 的 HTTPS/HTTP 都被 reset。
改用系统 HttpURLConnection(走系统 TLS 栈,可能支持不同 cipher suite)。
图片和语音统一使用原始 HTTPS URL。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 12:23:54 +09:30
dongliangandClaude Opus 4.6 77619a5300 feat: 图片支持横向滚动显示所有+点击放大全屏
- 去掉3张限制,HorizontalScrollView 横向滚动展示所有图片
- 缩略图 80dp 正方形,超出可滑动查看
- 点击缩略图全屏放大查看(FIT_CENTER),点击关闭

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 12:14:01 +09:30
dongliangandClaude Opus 4.6 49732ac79a feat: 用户上报任务显示图片附件
- 新建 PicItem 数据类,uploadPic 改为强类型
- 布局加 picContainer 横排展示区
- showPictures 方法:最多3张缩略图横排,HTTP 加载
- 三个状态页面都显示图片(和语音同级)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 12:04:26 +09:30
dongliangandClaude Opus 4.6 1b198e0941 fix: 语音下载改用 HTTP 绕过 OSS TLS 兼容问题
阿里云 OSS 的 HTTPS 在 Android 8.1 conscrypt 下 TLS 握手被 reset
OSS 同时支持 HTTP,降级为 HTTP 下载即可
使用独立的无拦截器 OkHttpClient 避免签名干扰

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 11:46:53 +09:30
dongliangandClaude Opus 4.6 18a1fc58a6 fix: 语音下载复用应用 OkHttpClient 解决 SSL 握手失败
新建的 OkHttpClient 没有 TLS 配置,在 Android 8.1 设备连阿里云
OSS 时 SSL handshake 被 reset。改为注入应用已配置的 OkHttpClient

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 11:42:35 +09:30
dongliangandClaude Opus 4.6 bf869b4643 fix: 待打卡布局优化,地点提到最前防超屏
- 去掉蓝色指引块(和按钮文字重复)
- 时间合入橙色地点块副文本
- 有场景时不单独显示 tvTimeInfo,省一行空间
- 备注和语音移到指引块后面(次要信息)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 11:31:50 +09:30
dongliangandClaude Opus 4.6 f22f7b7f0f fix: 语音改用 OkHttp 下载后本地播放
MediaPlayer 内置 HTTP 在 Android 8.1 设备请求 HTTPS 失败
(NuCachedSource2 error -1)。改为 OkHttp 先下载到缓存再播放

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 11:18:09 +09:30
dongliangandClaude Opus 4.6 b9d50e3c31 fix: 语音播放修复(AudioAttributes + clickable + 日志)
- 设置 AudioAttributes(CONTENT_TYPE_SPEECH)确保音频输出正确
- 按钮加 clickable/focusable 防止被 ScrollView 手势拦截
- 添加播放日志便于排查

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 11:03:30 +09:30
dongliangandClaude Opus 4.6 9b39daf4ad style: 返回按钮改用 iconfont 图标,和 NavBar 风格统一
用 \ue6bd 返回图标替代文字符号,白色 28sp,64×56dp 触摸区

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 10:26:13 +09:30
dongliangandClaude Opus 4.6 841bf87dc5 fix: 返回按钮加大触摸区域和视觉醒目度
- 高度从 match_parent 改为固定 56dp
- 字号 27sp→32sp 加粗,符号 ‹→< 更醒目
- 标题栏上内边距 16→8dp 节省空间

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 21:30:08 +09:30
dongliangandClaude Opus 4.6 1eb32409a8 fix: 时间只显示要求/截止一个,去掉派单时间和巡检时段
三个页面统一只显示一行时间:优先要求完成时间,没有则截止时间
删除 showInspectTime 方法

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 21:22:44 +09:30
dongliangandClaude Opus 4.6 7b3a3ae276 fix: 要求/截止时间只显示一个,优先要求完成时间
有 preFinishTime 显示"要求: 05.06 16:05",没有则显示"截止: xx"
去掉多余的"完成"后缀

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 21:17:23 +09:30
dongliangandClaude Opus 4.6 d5cdcc8186 style: 语音按钮视觉优化
- 背景改为橙色半透明+边框,和指引块风格统一
- 宽度 match_parent,内含声波图标+语音描述+时长
- 播放中切换背景高亮+停止图标,停止后恢复
- 新增 bg_btn_voice_playing.xml 播放状态背景

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 20:52:09 +09:30
dongliangandClaude Opus 4.6 2e7edc7e09 fix: 语音按钮圆角改用 radius 兼容 API 27+
topStartRadius 等属性需要 API 31,改为统一 radius=24dp

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 20:47:52 +09:30
dongliangandClaude Opus 4.6 75cbb831c5 feat: 任务页面布局优化(接单池防挑选+截止时间+巡检引导+语音播放)
1. 接单池改名"新任务"、隐藏积分和页码(防止用户挑肥拣瘦)
2. 待打卡/待完成页面增加截止时间显示
3. 巡检场景三层视觉:已打卡绿色+时间、下一个橙色高亮、后续灰色弱化
4. 巡检场景超屏自动滚动到当前进度
5. 用户上报任务支持语音播放(橙色药丸按钮)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 20:46:16 +09:30
dongliangandClaude Opus 4.6 2d83986150 fix: 巡检任务全部打完→按钮禁用 + 详情页重定向列表页
1. TaskListFragment: 巡检 status=4 检查 allChecked
   - 全部完成 → 灰色"已全部打卡"(禁用)
   - 未完成 → 橙色"开启打卡"
2. TaskDetailFragment: type=5 跳转 TaskListFragment
   (列表页有完整场景清单支持)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 18:58:37 +09:30
dongliangandClaude Opus 4.6 9cde177bca fix: 巡检场景清单字体放大 22→28sp
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 18:09:36 +09:30
dongliangandClaude Opus 4.6 a0c0e74dda fix: 巡检时段拆为开始/结束两行,格式与派单/截止统一
巡检: 09:00~18:00 → 开始: 09:00
                     结束: 18:00

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 18:02:55 +09:30
dongliangandClaude Opus 4.6 777c867711 fix: 返回键区域最大化(左padding去掉+宽度48→64dp)
导航栏左侧 paddingStart 21→0dp,返回键宽度 48→64dp。
点击区域从屏幕最左边开始,高度撑满导航栏。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 17:56:55 +09:30
dongliangandClaude Opus 4.6 689a7c80aa fix: 卡片图标改为统一文字标签(去掉emoji对齐问题)
emoji图标(📍🕐📋🔍📝)宽度不一致导致文字不对齐。
统一改为"标签: 内容"格式:
- 📍 → 地点:
- 🕐 → 派单:
-  → 截止:
- 📋 → 要求:
- 🔍 → 巡检:
-  → 积分:
- 📝 → 去掉(备注块已有绿色背景区分)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 17:49:09 +09:30
dongliangandClaude Opus 4.6 d3bbf738f6 fix: 巡检时段去掉"巡检"二字防换行
🔍巡检09:00~18:00 → 🔍09:00~18:00

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 17:42:46 +09:30
dongliangandClaude Opus 4.6 0941138a9f feat: 巡检任务显示巡检时段
taskType=5 时在所有状态(待抢单/待打卡/进行中)显示
🔍巡检{executeTimeStart}~{executeTimeEnd}

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 17:36:26 +09:30
dongliangandClaude Opus 4.6 48b88eaa4b fix: 导航栏和底部按钮缩减高度
导航栏:paddingTop 27→16dp,paddingBottom 8→4dp
底部按钮:padding 15→10dp,字号 34→28sp
两个页面统一,为内容区腾出更多空间

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 17:28:15 +09:30
dongliangandClaude Opus 4.6 d8f699a51f fix: 导航栏恢复原始字号,返回键宽48dp高match_parent
导航栏标题/页码恢复 20sp(之前被批量放大到 24sp)。
返回键宽度 56→48dp,高度 match_parent 撑满导航栏,
点击区域最大化但不增加导航栏总高度。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 17:23:21 +09:30
dongliangandClaude Opus 4.6 746ca346ec fix: 返回按钮点击区域放大 32→56dp,字号 27→36sp
老年用户手指粗,32dp 触摸区太小容易点不到。
TaskListFragment + TaskDetailFragment 统一放大。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 17:15:19 +09:30
dongliangandClaude Opus 4.6 1a6c2f2efc feat: 任务卡片切换改为左右滑动
上下滑动留给内容滚动(长任务可下滑查看更多),
左右滑动切换任务卡片(左滑下一个,右滑上一个)。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 17:07:15 +09:30
dongliangandClaude Opus 4.6 7dd659358d fix: 备注图标 ⚠ → 📝
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 16:33:09 +09:30
dongliangandClaude Opus 4.6 08bb5b268f fix: 去掉派单/截止/要求时间的多余空格
🕐 2026-05-06 派单 → 🕐2026-05-06派单
 截止 2026-05-07 → 截止2026-05-07
📋 要求 2026-05-07 完成 → 📋要求2026-05-07完成

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 16:30:41 +09:30
dongliangandClaude Opus 4.6 05f5d5e098 fix: 灰色文字提亮 + 备注加图标
1. text_secondary 颜色 #999999 → #CCCCCC(深色背景上更清晰)
2. 备注文字前加 ⚠ 图标,提醒用户注意

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 16:26:33 +09:30
dongliangandClaude Opus 4.6 1657ecd917 fix: 任务页面底部按钮字体放大 28/21→34sp
TaskListFragment 按钮 28→34sp,TaskDetailFragment 按钮 21→34sp。
统一加大加粗,老年用户更易识别。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 16:20:56 +09:30
dongliangandClaude Opus 4.6 f1fe041486 fix: 任务卡片文字全面放大(+4sp)
地点 24→28sp,时间 22→26→30sp,积分 26→30sp,
备注/指引描述 20→24sp,指引标题 24→28sp。
标题 34sp 不变。老年用户适配。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 16:17:50 +09:30
dongliangandClaude Opus 4.6 a7dd64f767 fix: NFC 打卡成功后恢复按钮 isEnabled=true
NFC 扫描前 btn.isEnabled=false,成功后刷新详情时按钮变为"完成任务"
但 isEnabled 仍为 false 导致点击无响应。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 16:03:55 +09:30
dongliangandClaude Opus 4.6 eb5fdd2d5f fix: QuTipDialog 图标和字体继续放大
图标区域 110→140dp,图标字号 50→65sp,标题 28→36sp,描述 20→24sp。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 15:55:40 +09:30
dongliangandClaude Opus 4.6 3ab6a94676 refactor: 优化 QuTipDialog + 删除 ResultFlashView
QuTipDialog 优化:
- 图标区域放大 85→110dp,图标字号 38→50sp
- 加入淡入+缩放动画(OvershootInterpolator 回弹效果)
- 默认倒计时 3→2 秒
- 倒计时文字默认隐藏(showCountdown 参数控制)
- 简化调用:show(status, title) 即可,2秒后自动消失

NFC 打卡加回 QuTipDialog:
- 成功:绿色图标 + "打卡成功" + 2秒消失
- 失败:红色图标 + "打卡失败" + 错误信息

删除 ResultFlashView(方案不合适,统一用优化后的 QuTipDialog)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 15:40:07 +09:30
dongliangandClaude Opus 4.6 1ef6824c5e fix: ResultFlashView 去掉内层 visibility=gone(双重隐藏导致不显示)
activity_main.xml 的 ResultFlashView 已设 gone,内层布局不需要再设。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 15:12:07 +09:30
dongliangandClaude Opus 4.6 7f6e9cf039 feat: ResultFlashView 操作结果指示器(Apple Watch 风格)
全屏深色遮罩 + 大圆圈图标,属性动画弹出+淡出,1.5秒自动消失。
- 成功:绿色圆圈 + ✓,OvershootInterpolator 回弹效果
- 失败:红色圆圈 + ✗
- 替代 QuTipDialog 用于 NFC 打卡和按钮操作的结果反馈
- 所有操作统一视觉风格

应用到:
- TaskDetailFragment NFC 打卡
- TaskListFragment NFC 打卡
- MainActivity 返回键主动打卡

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 14:25:57 +09:30
dongliangandClaude Opus 4.6 306af795a6 refactor: NFC 打卡去掉弹窗,改为轻量按钮状态反馈
手表小屏上音效+震动已足够反馈结果,全屏弹窗多余。
- 成功:按钮显示"打卡成功"(绿色)1秒 → 刷新/返回
- 失败/超时:按钮恢复"开启打卡"(可重试)
- 去掉 QuTipDialog 调用

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 13:19:45 +09:30
dongliangandClaude Opus 4.6 efac23f188 fix: 打卡失败弹窗 back=false→true,3秒后自动关闭
back=false 导致弹窗不自动消失。改为 back=true 与其他错误提示行为一致。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 13:10:27 +09:30
dongliangandClaude Opus 4.6 f2fcbd7c6a fix: TaskListFragment NFC 打卡 TODO 填充
TaskListFragment 有两处"开启打卡"按钮留的 TODO(普通任务+巡检任务),
补充为调用 nfcTaskManager.startTaskPunch()。
打卡成功后刷新当前任务详情。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 12:57:20 +09:30
dongliangandClaude Opus 4.6 8009987920 fix: HomeFragment 监听 HomeRefresh 事件刷新统计
批量打卡成功后 emit HomeRefresh,但 HomeFragment 之前没有监听该事件,
导致首页统计数字不更新。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 12:52:25 +09:30
dongliangandClaude Opus 4.6 ae899b3474 feat: NFC 打卡成功后 EventBus 通知刷新
- 单个打卡成功 → emit TaskListRefresh(列表页刷新)
- 批量打卡成功 → emit HomeRefresh(首页统计刷新)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 12:38:23 +09:30
dongliangandClaude Opus 4.6 1df7981318 fix: NfcTaskManager 重写修复编译错误
之前 python 脚本修复乱码时破坏了文件结构(花括号错位导致
private 方法变成 local function)。完整重写文件。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 12:17:52 +09:30
dongliangandClaude Opus 4.6 df1e80fe33 fix: NFC 互斥检查加 nfcController.isOpen()
考勤打卡(PunchViewModel)和任务打卡(NfcTaskManager)共用 NFC 硬件。
增加 nfcController.isOpen() 检查,防止两者同时操作 NFC。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 12:09:20 +09:30
dongliangandClaude Opus 4.6 1b24e2d044 feat(nfc-task): NFC 任务打卡模块(单个+批量+硬件开锁)
REQ-20260506-0024

新增 NfcTaskManager:
- startTaskPunch(taskId):任务详情页单个 NFC 打卡
- startActivePunch():返回键触发主动打卡
  → checkNfcType 判断:hardwareNfcFlag=true 硬件开锁 / false 批量打卡
- NFC 超时自动关闭 + 震动/音效反馈
- isScanning 标记防重复触发

TaskApi 增加 3 个接口:
- POST watchTask/nfcToBeginTask(单个打卡)
- POST watchTask/nfcBatchBeginTask(批量打卡)
- GET nfcInfo/nfcOpenLock(类型判断)

返回键逻辑修正:
- 原:返回键→考勤打卡
- 现:返回键→主动打卡(批量任务 or 硬件开锁)
- 考勤打卡只从下拉面板触发
- onBackKeyPressed 改为返回 Boolean(true=已处理)

TaskDetailFragment:
- "开启打卡"按钮填充 NFC 打卡逻辑(替换 TODO)
- 扫描中按钮变灰禁用,成功/失败用 QuTipDialog

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-06 12:05:40 +09:30
dongliangandClaude Opus 4.6 70da49f650 fix: 补回被误删的 App 版本号显示
补充设备信息字段时,替换代码块时漏掉了 tvAppVersion 赋值行。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-30 22:14:45 +09:30
dongliangandClaude Opus 4.6 71eebe7b0c feat(config): 设置页补全设备信息字段
对照旧版 hardInfo.vue 补全缺失的 4 个字段:
- 设备名称(bluetoothName,来自 DevicePrefs)
- 蓝牙MAC(bluetoothMac,来自 DevicePrefs)
- 蓝牙连接状态(动态,通过 EventBus BluetoothDevice 事件更新)
- 电池(动态,通过 EventBus BatteryChanged 事件 + 初始化获取)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-30 22:06:53 +09:30
dongliangandClaude Opus 4.6 4d75151abc fix: OTA 下载加 TLS 1.2 兼容(Android 8.1 SSL 握手失败)
Android 8.1 默认 SSL 不兼容阿里云 OSS 导致 SSLHandshakeException。
显式配置 TLSv1.2 + 现代密码套件。同时读超时 60→120s 适配大 APK。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-30 21:58:56 +09:30
dongliangandClaude Opus 4.6 3ced3c74cf fix: OTA 弹窗进度条修复
1. 进度条宽度用 post{} 延迟设置,确保容器已布局(width>0)
2. 进度回调限频 200ms,避免主线程过载
3. 用 runOnUiThread 替代 launch(Main),更简单可靠
4. 各状态切换加日志

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-30 21:42:06 +09:30