diff --git a/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt b/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt index fb019f1..2025eb9 100644 --- a/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt @@ -143,13 +143,9 @@ class HomeFragment : BaseFragment() { renderDots() return } - // 有未读通知 → 所有未 ack 的卡片显示红点 - val ack = notificationManager.acknowledgedCards - activeDotCards.clear() - if (2 !in ack) activeDotCards.add(2) - if (3 !in ack) activeDotCards.add(3) - if (4 !in ack) activeDotCards.add(4) - renderDots() + // 有未读通知 → 用 preNotificationStats 精确对比 + // onResume 时 view 可能重建,需要重新请求 API + fetchStatistics(checkDots = true) } override fun onDestroyView() { @@ -362,22 +358,33 @@ class HomeFragment : BaseFragment() { if (result is ApiResult.Success && result.data != null) { val data = result.data - // 有 pending 通知 → 所有未 ack 的卡片显示红点(不用 diffStats,避免竞态) if (checkDots && notificationManager.pendingCount > 0) { - val ack = notificationManager.acknowledgedCards - if (2 !in ack) activeDotCards.add(2) - if (3 !in ack) activeDotCards.add(3) - if (4 !in ack) activeDotCards.add(4) + // 用 preNotificationStats(通知前快照)做精确对比 + val baseline = notificationManager.preNotificationStats + if (baseline != null) { + val changed = notificationManager.diffStats(baseline, data) + val ack = notificationManager.acknowledgedCards + for (status in changed) { + if (status !in ack) activeDotCards.add(status) + } + } else { + // 无快照(极端情况)→ 所有有值的加红点 + val ack = notificationManager.acknowledgedCards + if (data.waitForTask > 0 && 2 !in ack) activeDotCards.add(2) + if (data.treatTask > 0 && 3 !in ack) activeDotCards.add(3) + if (data.incompleteTask > 0 && 4 !in ack) activeDotCards.add(4) + } renderDots() + // 有通知时不更新 lastStats,保留旧基准给后续 diff + } else { + // 无通知的正常刷新 → 更新 lastStats 基准 + notificationManager.lastStats = data } // 更新数字 tvPoolNum.text = data.waitForTask.toString() tvPunchNum.text = data.treatTask.toString() tvCompleteNum.text = data.incompleteTask.toString() - - // 保存为下次对比基准 - notificationManager.lastStats = data } } }