From 36a921683b8f8bf62a01b1f7782fa641ad7526f0 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Thu, 25 Jun 2026 17:23:58 +0800
Subject: [PATCH] Polish usage tips close reminder layout

---
 src/Scripts/usage_tips_close_reminder_qa.sh                           |   20 ++++++++++
 src/Docs/Requirements/2026-06-25-usage-tips-close-reminder-worklog.md |    1 
 src/CHANGELOG.md                                                      |    7 +++
 src/Apptag/EditModeViews.swift                                        |   57 +++++++++++++++-------------
 src/TODO.md                                                           |    6 +++
 src/Apptag/Info.plist                                                 |    4 +-
 6 files changed, 66 insertions(+), 29 deletions(-)

diff --git a/src/Apptag/EditModeViews.swift b/src/Apptag/EditModeViews.swift
index 9a7ff79..5594627 100644
--- a/src/Apptag/EditModeViews.swift
+++ b/src/Apptag/EditModeViews.swift
@@ -662,35 +662,35 @@
                 .fixedSize(horizontal: false, vertical: true)
                 .frame(maxWidth: .infinity, alignment: .leading)
 
-            Button {
-                doNotRemind.toggle()
-            } label: {
-                HStack(spacing: 10) {
-                    ZStack {
-                        RoundedRectangle(cornerRadius: 4, style: .continuous)
-                            .fill(doNotRemind ? Color.accentColor : Color.white.opacity(0.10))
-                        RoundedRectangle(cornerRadius: 4, style: .continuous)
-                            .stroke(Color.white.opacity(0.92), lineWidth: 1.6)
-                        if doNotRemind {
-                            Image(systemName: "checkmark")
-                                .font(.system(size: 12, weight: .bold))
-                                .foregroundStyle(.white)
+            HStack(alignment: .bottom, spacing: 16) {
+                Button {
+                    doNotRemind.toggle()
+                } label: {
+                    HStack(spacing: 10) {
+                        ZStack {
+                            RoundedRectangle(cornerRadius: 4, style: .continuous)
+                                .fill(doNotRemind ? Color.accentColor : Color.white.opacity(0.10))
+                            RoundedRectangle(cornerRadius: 4, style: .continuous)
+                                .stroke(Color.white.opacity(0.92), lineWidth: 1.6)
+                            if doNotRemind {
+                                Image(systemName: "checkmark")
+                                    .font(.system(size: 12, weight: .bold))
+                                    .foregroundStyle(.white)
+                            }
                         }
+                        .frame(width: 18, height: 18)
+
+                        Text(doNotRemindTitle)
+                            .font(.system(size: 13, weight: .semibold))
+                            .foregroundStyle(.white.opacity(0.86))
+                            .lineLimit(2)
+                            .multilineTextAlignment(.leading)
                     }
-                    .frame(width: 18, height: 18)
-
-                    Text(doNotRemindTitle)
-                        .font(.system(size: 13, weight: .medium))
-                        .foregroundStyle(.white.opacity(0.82))
-                        .lineLimit(2)
-                        .multilineTextAlignment(.leading)
+                    .frame(maxWidth: .infinity, alignment: .leading)
+                    .contentShape(Rectangle())
                 }
-                .contentShape(Rectangle())
-            }
-            .buttonStyle(.plain)
-
-            HStack {
-                Spacer(minLength: 0)
+                .buttonStyle(.plain)
+                .frame(maxWidth: .infinity, alignment: .leading)
 
                 Button(action: onConfirm) {
                     Text(confirmTitle)
@@ -706,6 +706,7 @@
                 }
                 .buttonStyle(.plain)
             }
+            .padding(.top, 4)
         }
         .padding(.horizontal, 24)
         .padding(.vertical, 20)
@@ -752,6 +753,7 @@
                 previewCheckbox(title: tr("settings.hideAppNames"), highlighted: false)
                 previewCheckbox(title: tr("settings.hideUsageTips"), highlighted: true)
             }
+            .frame(maxWidth: .infinity, alignment: .center)
             .padding(10)
             .background(
                 RoundedRectangle(cornerRadius: 10, style: .continuous)
@@ -766,9 +768,10 @@
                     .font(.system(size: 11, weight: .semibold))
                     .foregroundStyle(Color.accentColor)
                     .lineLimit(2)
+                    .multilineTextAlignment(.center)
                     .fixedSize(horizontal: false, vertical: true)
             }
-            .frame(maxWidth: .infinity, alignment: .trailing)
+            .frame(maxWidth: .infinity, alignment: .center)
         }
         .padding(14)
         .background(
diff --git a/src/Apptag/Info.plist b/src/Apptag/Info.plist
index 211b643..34e39e0 100644
--- a/src/Apptag/Info.plist
+++ b/src/Apptag/Info.plist
@@ -19,9 +19,9 @@
 	<key>CFBundlePackageType</key>
 	<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>8.0.3</string>
+	<string>8.0.4</string>
 	<key>CFBundleVersion</key>
-	<string>20260625.1615</string>
+	<string>20260625.1655</string>
 	<key>LSApplicationCategoryType</key>
 	<string>public.app-category.utilities</string>
 	<key>LSMinimumSystemVersion</key>
diff --git a/src/CHANGELOG.md b/src/CHANGELOG.md
index 121ca85..80bf90c 100644
--- a/src/CHANGELOG.md
+++ b/src/CHANGELOG.md
@@ -2,6 +2,13 @@
 
 ## [Unreleased]
 
+## [8.0.4] — 2026-06-25
+
+- 优化 App Grid 使用技巧关闭提醒弹窗:设置页预览中的高亮说明改为居中显示,底部“不再提醒”选项与确认按钮同一行底部对齐
+- “不再提醒”文案字号和字重提升到与确认按钮一致的 13pt semibold,减少视觉层级断裂
+- 补强 `Scripts/usage_tips_close_reminder_qa.sh`,覆盖预览居中、底部行对齐和关闭提醒视觉排版断言
+- 版本号更新为 `8.0.4`,Build 更新为 `20260625.1655`
+
 ## [8.0.3] — 2026-06-25
 
 - App Grid 解除标签拖拽新增原生 Core Animation 预览反馈:当应用图标拖到容器外/容器之间空白区域时,拖拽浮层会进入克制的碎纸切片动效;容器内部空白不触发该预览,实际解除标签仍沿用原有放手后确认流程
diff --git a/src/Docs/Requirements/2026-06-25-usage-tips-close-reminder-worklog.md b/src/Docs/Requirements/2026-06-25-usage-tips-close-reminder-worklog.md
index 685ff09..b84e4e0 100644
--- a/src/Docs/Requirements/2026-06-25-usage-tips-close-reminder-worklog.md
+++ b/src/Docs/Requirements/2026-06-25-usage-tips-close-reminder-worklog.md
@@ -10,3 +10,4 @@
 - QA 决策:更新既有 `usage_tips_qa.sh`,新增 `usage_tips_close_reminder_qa.sh`,覆盖关闭提醒链路、modal 状态、29 语种文案完整性和非中文混入中文文案风险。
 - 版本决策:用户明确后续用户可见代码改动默认应递增版本;本次从 `8.0.2 (20260624.2341)` 更新为 `8.0.3 (20260625.1615)`。
 - QA 结果:`usage_tips_qa.sh`、`usage_tips_close_reminder_qa.sh`、`theme_settings_qa.sh`、`macos14_availability_typecheck_qa.sh`、`git diff --check`、`APP_BUILD=20260625.1615 bash src/build.sh`、`macos14_build_metadata_qa.sh src/build/TagLauncher.app` 均通过。
+- UI 补修:按用户截图反馈,将设置页预览里的高亮说明居中;将“不再提醒”选项移动到与确认按钮同一底部操作行,字体提升为 13pt semibold 并底部对齐。版本更新为 `8.0.4 (20260625.1655)`。
diff --git a/src/Scripts/usage_tips_close_reminder_qa.sh b/src/Scripts/usage_tips_close_reminder_qa.sh
index 90a561c..e763eb9 100755
--- a/src/Scripts/usage_tips_close_reminder_qa.sh
+++ b/src/Scripts/usage_tips_close_reminder_qa.sh
@@ -106,6 +106,26 @@
     edit_mode_views,
     "settings preview must highlight the localized Hide usage tips control",
 )
+require(
+    r"HStack\s*\(\s*alignment\s*:\s*\.bottom\s*,\s*spacing\s*:\s*16\s*\)(?P<body>.*?)doNotRemindTitle(?P<body2>.*?)confirmTitle",
+    edit_mode_views,
+    "reminder bottom row must align the do-not-remind checkbox with the confirm button",
+)
+require(
+    r"Text\s*\(\s*doNotRemindTitle\s*\)(?P<body>.*?)font\s*\(\s*\.system\s*\(\s*size\s*:\s*13\s*,\s*weight\s*:\s*\.semibold\s*\)\s*\)",
+    edit_mode_views,
+    "do-not-remind text must use the same 13pt semibold weight as the confirm button",
+)
+require(
+    r"previewCheckbox\s*\(\s*title\s*:\s*tr\(\"settings\.hideUsageTips\"\)(?P<body>.*?)\.frame\s*\(\s*maxWidth\s*:\s*\.infinity\s*,\s*alignment\s*:\s*\.center\s*\)",
+    edit_mode_views,
+    "settings preview checkbox row must be centered in the preview screenshot",
+)
+require(
+    r"Text\s*\(\s*callout\s*\)(?P<body>.*?)\.multilineTextAlignment\s*\(\s*\.center\s*\)(?P<body2>.*?)\.frame\s*\(\s*maxWidth\s*:\s*\.infinity\s*,\s*alignment\s*:\s*\.center\s*\)",
+    edit_mode_views,
+    "settings preview callout must be centered under the highlighted checkbox row",
+)
 
 files = sorted(localization_dir.glob("*.json"))
 if len(files) != 29:
diff --git a/src/TODO.md b/src/TODO.md
index ed820ec..b868d7d 100644
--- a/src/TODO.md
+++ b/src/TODO.md
@@ -30,6 +30,12 @@
 
 ## Done
 
+- [2026-06-25] 使用技巧关闭提醒视觉补修。
+  - 结果: 设置页预览中的高亮说明改为居中显示;“不再提醒”选项与确认按钮改为同一底部操作行,字体提升为 13pt semibold 并与确认按钮底部对齐。
+  - 范围: 只改 `UsageTipsCloseReminderBubble` 排版、版本号/changelog 和专项 QA 断言;不改关闭状态机、不改 29 语种文案。
+  - 验证: `usage_tips_close_reminder_qa.sh`、`usage_tips_qa.sh`、`macos14_availability_typecheck_qa.sh`、完整构建和 build metadata QA。
+  - 版本: `8.0.4 (20260625.1655)`。
+
 - [2026-06-25] 使用技巧关闭提醒。
   - 结果: 点击 App Grid 使用技巧关闭按钮时先弹出提醒,说明可在“设置 > 通用”取消“隐藏使用技巧”重新查看;用户确认后才隐藏 tips,勾选“不再提醒”后后续关闭直接隐藏。
   - 范围: 关闭按钮链路、提醒弹窗、本地化设置页预览、`skipUsageTipsCloseReminder` 偏好、29 语种提醒文案、专项 QA。

--
Gitblit v1.9.3