diff --git a/app/src/main/java/com/xiaoqu/watch/ui/task/TaskDetailFragment.kt b/app/src/main/java/com/xiaoqu/watch/ui/task/TaskDetailFragment.kt index 5faf544..890a0ae 100644 --- a/app/src/main/java/com/xiaoqu/watch/ui/task/TaskDetailFragment.kt +++ b/app/src/main/java/com/xiaoqu/watch/ui/task/TaskDetailFragment.kt @@ -309,8 +309,12 @@ class TaskDetailFragment : BaseFragment() { val parts = mutableListOf() if (detail.name.isNotBlank()) parts.add("任务:${detail.displayName}") if (detail.positionText.isNotBlank()) parts.add("地点:${detail.positionText}") - if (detail.sendTime.isNotBlank()) parts.add("时间:${detail.sendTime}") - if (detail.point > 0) parts.add("积分:${detail.pointText}") + if (detail.sendTime.isNotBlank()) parts.add("派单时间:${formatTimeForTts(detail.sendTime)}") + when { + !detail.preFinishTime.isNullOrEmpty() -> parts.add("要求完成:${formatTimeForTts(detail.preFinishTime!!)}") + !detail.expireTime.isNullOrEmpty() -> parts.add("截止时间:${formatTimeForTts(detail.expireTime!!)}") + } + if (detail.point > 0) parts.add("积分:${detail.point.toInt()}分") if (detail.content.isNotBlank()) parts.add("备注:${detail.content}") if (parts.isEmpty()) return @@ -338,6 +342,27 @@ class TaskDetailFragment : BaseFragment() { updateTtsButton(playing = false) } + /** + * 将时间字符串转为适合朗读的中文格式 + * "04.28 09:10" → "4月28日9点10分" + * "2026-04-28 09:10:00" → "4月28日9点10分" + */ + private fun formatTimeForTts(time: String): String { + try { + val shortPattern = Regex("""(\d{1,2})\.(\d{1,2})\s+(\d{1,2}):(\d{2})""") + shortPattern.find(time)?.let { match -> + val (month, day, hour, minute) = match.destructured + return "${month.toInt()}月${day.toInt()}日${hour.toInt()}点${minute}分" + } + val longPattern = Regex("""(\d{4})-(\d{1,2})-(\d{1,2})\s+(\d{1,2}):(\d{2})""") + longPattern.find(time)?.let { match -> + val (_, month, day, hour, minute) = match.destructured + return "${month.toInt()}月${day.toInt()}日${hour.toInt()}点${minute}分" + } + } catch (_: Exception) { } + return time + } + /** 更新 TTS 按钮的 UI 状态 */ private fun updateTtsButton(playing: Boolean) { binding.btnTts.setImageResource( diff --git a/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt b/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt index ae28d89..472748a 100644 --- a/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt +++ b/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt @@ -1035,8 +1035,13 @@ class TaskListFragment : BaseFragment() { val parts = mutableListOf() if (detail.name.isNotBlank()) parts.add("任务:${detail.displayName}") if (detail.positionText.isNotBlank()) parts.add("地点:${detail.positionText}") - if (detail.sendTime.isNotBlank()) parts.add("时间:${detail.sendTime}") - if (detail.point > 0) parts.add("积分:${detail.pointText}") + if (detail.sendTime.isNotBlank()) parts.add("派单时间:${formatTimeForTts(detail.sendTime)}") + // 要求完成时间 / 截止时间(优先要求,和页面显示逻辑一致) + when { + !detail.preFinishTime.isNullOrEmpty() -> parts.add("要求完成:${formatTimeForTts(detail.preFinishTime!!)}") + !detail.expireTime.isNullOrEmpty() -> parts.add("截止时间:${formatTimeForTts(detail.expireTime!!)}") + } + if (detail.point > 0) parts.add("积分:${detail.point.toInt()}分") if (detail.content.isNotBlank()) parts.add("备注:${detail.content}") if (parts.isEmpty()) return @@ -1064,6 +1069,30 @@ class TaskListFragment : BaseFragment() { updateTtsButton(playing = false) } + /** + * 将时间字符串转为适合朗读的中文格式 + * "04.28 09:10" → "4月28日9点10分" + * "2026-04-28 09:10:00" → "4月28日9点10分" + * 无法解析时返回原文 + */ + private fun formatTimeForTts(time: String): String { + try { + // 匹配 "MM.dd HH:mm" 格式 + val shortPattern = Regex("""(\d{1,2})\.(\d{1,2})\s+(\d{1,2}):(\d{2})""") + shortPattern.find(time)?.let { match -> + val (month, day, hour, minute) = match.destructured + return "${month.toInt()}月${day.toInt()}日${hour.toInt()}点${minute}分" + } + // 匹配 "yyyy-MM-dd HH:mm:ss" 或 "yyyy-MM-dd HH:mm" 格式 + val longPattern = Regex("""(\d{4})-(\d{1,2})-(\d{1,2})\s+(\d{1,2}):(\d{2})""") + longPattern.find(time)?.let { match -> + val (_, month, day, hour, minute) = match.destructured + return "${month.toInt()}月${day.toInt()}日${hour.toInt()}点${minute}分" + } + } catch (_: Exception) { } + return time + } + /** 更新 TTS 按钮的 UI 状态 */ private fun updateTtsButton(playing: Boolean) { binding.btnTts.setImageResource(