From 2f0fc675d2023e2549ad38ffddeef57026f3a078 Mon Sep 17 00:00:00 2001 From: dongliang Date: Tue, 28 Apr 2026 13:09:04 +0930 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BB=BB=E5=8A=A1=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=8C=89=E5=8E=9F=E5=9E=8B=E5=9B=BEV3=E9=80=82=E8=80=81?= =?UTF-8?q?=E5=8C=96=E9=87=8D=E8=AE=BE=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 按状态显示不同布局: - 待抢单:任务名+地点+时间+积分+备注 → 帮助决策 - 待打卡(有场景):任务名+备注+指引块(去哪+怎么做) → 两段式指引 - 待打卡(无场景):任务名+绿色引导块 → 正向说明 - 待完成:任务名+备注+打卡时间大字确认 → 安心感 标题栏三栏:返回+状态名+页码 新增指引块drawable(orange/blue/green/note) Co-Authored-By: Claude Opus 4.6 (1M context) --- .../xiaoqu/watch/ui/task/TaskListFragment.kt | 175 ++++++------- .../res/drawable/bg_action_block_blue.xml | 6 + .../res/drawable/bg_action_block_green.xml | 6 + .../res/drawable/bg_action_block_orange.xml | 6 + app/src/main/res/drawable/bg_note_green.xml | 6 + .../main/res/layout/fragment_task_list.xml | 237 ++++++++++++------ 6 files changed, 273 insertions(+), 163 deletions(-) create mode 100644 app/src/main/res/drawable/bg_action_block_blue.xml create mode 100644 app/src/main/res/drawable/bg_action_block_green.xml create mode 100644 app/src/main/res/drawable/bg_action_block_orange.xml create mode 100644 app/src/main/res/drawable/bg_note_green.xml 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 9def0a5..33ceb7c 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 @@ -198,106 +198,111 @@ class TaskListFragment : BaseFragment() { // ===== UI 显示 ===== /** - * 显示任务详情(居中布局,老年人大字优化) - * 重点突出:状态 → 任务名 → 地点 → 时间/积分 + * 显示任务详情(按原型图V3适老化设计) + * 按状态显示不同内容布局 */ private fun displayDetail(detail: TaskDetail) { binding.taskContent.visibility = View.VISIBLE binding.tvEmpty.visibility = View.GONE binding.loadingWrap.visibility = View.GONE - // 标题:第X/Y个任务 - binding.tvTitle.text = "第${taskIndex + 1}/${taskList.size}个任务" - - // 状态标签(最顶部,带背景色) - when (detail.status) { - 2 -> { - binding.tvStatus.text = "待抢单" - binding.tvStatus.setTextColor(requireContext().getColor(R.color.primary)) - binding.tvStatus.setBackgroundResource(R.drawable.bg_pill_blue) - } - 3 -> { - binding.tvStatus.text = "待打卡" - binding.tvStatus.setTextColor(requireContext().getColor(R.color.warning)) - binding.tvStatus.setBackgroundResource(R.drawable.bg_pill_orange) - } - 4 -> { - binding.tvStatus.text = "进行中" - binding.tvStatus.setTextColor(requireContext().getColor(R.color.success)) - binding.tvStatus.setBackgroundResource(R.drawable.bg_pill_green) - } - else -> { - binding.tvStatus.text = "已完成" - binding.tvStatus.setTextColor(requireContext().getColor(R.color.text_secondary)) - binding.tvStatus.background = null - } + // 标题栏:状态名 + binding.tvTitle.text = when (currentStatus) { + 2 -> "接单池" + 3 -> "待打卡" + 4 -> "待完成" + else -> "任务" } + // 页码 + binding.tvPageNum.text = "${taskIndex + 1}/${taskList.size}" - // 任务名(最大最醒目) + // 任务名(始终显示,最大最突出) binding.tvTaskName.text = detail.displayName - // 地点 - if (detail.hasPosition) { - binding.tvPosition.text = detail.positionText - binding.tvPosition.visibility = View.VISIBLE - } else { - binding.tvPosition.visibility = View.GONE - } + // 先隐藏所有可选区域 + binding.tvPosition.visibility = View.GONE + binding.tvTimeInfo.visibility = View.GONE + binding.tvPoints.visibility = View.GONE + binding.tvNote.visibility = View.GONE + binding.blockGoWhere.visibility = View.GONE + binding.blockHowTo.visibility = View.GONE + binding.blockNoScene.visibility = View.GONE + binding.blockCheckedIn.visibility = View.GONE - // 时间信息(派单时间 + 截止时间合并显示) - val timeInfo = StringBuilder() - if (detail.sendTime.isNotEmpty()) timeInfo.append("${detail.sendTime} 派单") - if (!detail.expireTime.isNullOrEmpty()) { - if (timeInfo.isNotEmpty()) timeInfo.append("\n") - timeInfo.append("截止 ${detail.expireTime}") - } - if (!detail.preFinishTime.isNullOrEmpty()) { - if (timeInfo.isNotEmpty()) timeInfo.append("\n") - timeInfo.append("要求 ${detail.preFinishTime} 完成") - } - if (timeInfo.isNotEmpty()) { - binding.tvTimeInfo.text = timeInfo - binding.tvTimeInfo.visibility = View.VISIBLE - } else { - binding.tvTimeInfo.visibility = View.GONE - } + // 按状态显示不同内容 + when (detail.status) { + // ===== 待抢单:展示完整信息帮助决策 ===== + 2 -> { + // 地点 + if (detail.hasPosition) { + binding.tvPosition.text = "📍 ${detail.positionText}" + binding.tvPosition.visibility = View.VISIBLE + } + // 时间 + if (detail.sendTime.isNotEmpty()) { + binding.tvTimeInfo.text = "🕐 ${detail.sendTime}" + binding.tvTimeInfo.visibility = View.VISIBLE + } + // 积分 + if (detail.point > 0) { + binding.tvPoints.text = "⭐ ${detail.pointText} 积分" + binding.tvPoints.visibility = View.VISIBLE + } + // 备注/描述 + showNote(detail) + } - // 积分(大于0才显示) - if (detail.point > 0) { - binding.tvPoints.text = "积分 ${detail.pointText}" - binding.tvPoints.visibility = View.VISIBLE - } else { - binding.tvPoints.visibility = View.GONE + // ===== 待打卡:指引去哪+怎么做 ===== + 3 -> { + // 备注 + showNote(detail) + + if (detail.hasPosition) { + // 有场景:两段式指引 + binding.tvGoWhereTitle.text = "前往 ${detail.positionText}" + binding.blockGoWhere.visibility = View.VISIBLE + binding.blockHowTo.visibility = View.VISIBLE + } else { + // 无场景:绿色引导 + binding.blockNoScene.visibility = View.VISIBLE + } + } + + // ===== 进行中/待完成:打卡确认+完成指引 ===== + 4 -> { + // 备注 + showNote(detail) + + // 打卡确认时间 + if (!detail.confirmTime.isNullOrEmpty()) { + val time = detail.confirmTime.split(" ").lastOrNull() ?: detail.confirmTime + binding.tvCheckinTime.text = time + } else { + binding.tvCheckinTime.text = "✓" + } + binding.blockCheckedIn.visibility = View.VISIBLE + } + + // ===== 其他状态 ===== + else -> { + if (detail.hasPosition) { + binding.tvPosition.text = "📍 ${detail.positionText}" + binding.tvPosition.visibility = View.VISIBLE + } + } } + } - // 上报人(type 3/4) - if (detail.createName.isNotEmpty() && detail.taskType in listOf(3, 4)) { - binding.tvCreatorName.text = "上报人:${detail.createName}" - binding.tvCreatorName.visibility = View.VISIBLE - } else { - binding.tvCreatorName.visibility = View.GONE + /** 显示备注/描述(content 或 taskRequire) */ + private fun showNote(detail: TaskDetail) { + val note = when { + !detail.taskRequire.isNullOrEmpty() -> detail.taskRequire + detail.content.isNotEmpty() -> detail.content + else -> null } - - // 协作人 - binding.tvWorkers.visibility = View.GONE // TODO: workTogether 结构待确认 - - // 描述 - if (detail.content.isNotEmpty()) { - binding.tvDescription.text = detail.content - binding.tvDescription.visibility = View.VISIBLE - } else { - binding.tvDescription.visibility = View.GONE - } - - // 提示条(任务要求 或 打卡提示) - if (!detail.taskRequire.isNullOrEmpty()) { - binding.tvHint.text = detail.taskRequire - binding.tvHint.visibility = View.VISIBLE - } else if (detail.status == 3 && detail.hasPosition) { - binding.tvHint.text = "请将手表贴近打卡信标" - binding.tvHint.visibility = View.VISIBLE - } else { - binding.tvHint.visibility = View.GONE + if (note != null) { + binding.tvNote.text = note + binding.tvNote.visibility = View.VISIBLE } } diff --git a/app/src/main/res/drawable/bg_action_block_blue.xml b/app/src/main/res/drawable/bg_action_block_blue.xml new file mode 100644 index 0000000..722c89b --- /dev/null +++ b/app/src/main/res/drawable/bg_action_block_blue.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/src/main/res/drawable/bg_action_block_green.xml b/app/src/main/res/drawable/bg_action_block_green.xml new file mode 100644 index 0000000..8b9b594 --- /dev/null +++ b/app/src/main/res/drawable/bg_action_block_green.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/src/main/res/drawable/bg_action_block_orange.xml b/app/src/main/res/drawable/bg_action_block_orange.xml new file mode 100644 index 0000000..875148d --- /dev/null +++ b/app/src/main/res/drawable/bg_action_block_orange.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/src/main/res/drawable/bg_note_green.xml b/app/src/main/res/drawable/bg_note_green.xml new file mode 100644 index 0000000..1053ac0 --- /dev/null +++ b/app/src/main/res/drawable/bg_note_green.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/src/main/res/layout/fragment_task_list.xml b/app/src/main/res/layout/fragment_task_list.xml index d24b0c4..1da72cf 100644 --- a/app/src/main/res/layout/fragment_task_list.xml +++ b/app/src/main/res/layout/fragment_task_list.xml @@ -1,13 +1,15 @@ - + - - + + android:layout_marginBottom="13dp"> + + android:textSize="27sp" /> + + android:textSize="16sp" /> + + + - + - - - - + + android:layout_marginBottom="13dp" /> - + + android:textSize="20sp" + android:drawablePadding="8dp" + android:layout_marginBottom="8dp" + android:visibility="gone" /> - + + android:drawablePadding="8dp" + android:layout_marginBottom="8dp" + android:visibility="gone" /> - - - - + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:orientation="vertical" + android:paddingTop="13dp" + android:paddingBottom="13dp" + android:visibility="gone"> + + + + + + @@ -200,14 +283,12 @@ android:textColor="@color/text_secondary" android:textSize="20sp" android:layout_marginTop="8dp" /> - - - +