fix: TTS时间朗读优化 + 补充要求完成/截止时间
1. 时间格式转中文朗读:"04.28 09:10" → "4月28日9点10分" 2. 补充要求完成时间(preFinishTime)和截止时间(expireTime) 3. 积分读"X分"而非"+X" Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -309,8 +309,12 @@ class TaskDetailFragment : BaseFragment<FragmentTaskDetailBinding>() {
|
||||
val parts = mutableListOf<String>()
|
||||
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<FragmentTaskDetailBinding>() {
|
||||
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(
|
||||
|
||||
@@ -1035,8 +1035,13 @@ class TaskListFragment : BaseFragment<FragmentTaskListBinding>() {
|
||||
val parts = mutableListOf<String>()
|
||||
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<FragmentTaskListBinding>() {
|
||||
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(
|
||||
|
||||
Reference in New Issue
Block a user