From 57abfdc2ba880be1fae4a1a184531e3228d62dae Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Tue, 19 May 2026 01:20:21 +0800
Subject: [PATCH] Prepare App Store release 7.3.5 build 744
---
Apptag/PreferencesView.swift | 140 +++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 129 insertions(+), 11 deletions(-)
diff --git a/Apptag/PreferencesView.swift b/Apptag/PreferencesView.swift
index 88c00a4..d0a1843 100644
--- a/Apptag/PreferencesView.swift
+++ b/Apptag/PreferencesView.swift
@@ -30,6 +30,7 @@
@State private var tagColors: [String: Int] = [:]
@State private var categoryScheme = TagDatabase.CategorySchemeState()
@State private var isApplyingSystemScheme = false
+ @State private var showApplySystemSchemeConfirmation = false
private func scanApps() {
DispatchQueue.global(qos: .userInitiated).async {
@@ -135,7 +136,15 @@
}
private func applySystemInitialScheme() {
- guard confirmApplySystemInitialScheme() else { return }
+ guard !isApplyingSystemScheme else { return }
+ withAnimation(.easeOut(duration: 0.16)) {
+ showApplySystemSchemeConfirmation = true
+ }
+ }
+
+ private func performApplySystemInitialScheme() {
+ guard !isApplyingSystemScheme else { return }
+ showApplySystemSchemeConfirmation = false
TagDatabase.flushPendingCategorySchemeBackupBatch()
isApplyingSystemScheme = true
@@ -166,16 +175,6 @@
}
}
}
- }
-
- private func confirmApplySystemInitialScheme() -> Bool {
- let alert = NSAlert()
- alert.messageText = tr("settings.applySystemSchemeWarningTitle")
- alert.informativeText = tr("settings.applySystemSchemeWarningMessage")
- alert.alertStyle = .warning
- alert.addButton(withTitle: tr("settings.confirmApplyScheme"))
- alert.addButton(withTitle: tr("settings.cancel"))
- return alert.runModal() == .alertFirstButtonReturn
}
private func formattedSystemSchemeAppliedMessage(_ summary: SmartStartSummary) -> String {
@@ -697,6 +696,23 @@
}
.transition(.opacity)
}
+
+ if showApplySystemSchemeConfirmation {
+ ApplySystemSchemeConfirmationView(
+ title: tr("settings.applySystemSchemeWarningTitle"),
+ message: tr("settings.applySystemSchemeWarningMessage"),
+ confirmTitle: tr("settings.confirmApplyScheme"),
+ cancelTitle: tr("settings.cancel"),
+ onConfirm: performApplySystemInitialScheme,
+ onCancel: {
+ withAnimation(.easeOut(duration: 0.14)) {
+ showApplySystemSchemeConfirmation = false
+ }
+ }
+ )
+ .zIndex(3)
+ .transition(.opacity)
+ }
}
.frame(width: settingsWindowWidth, height: 460)
.onAppear {
@@ -714,6 +730,108 @@
}
}
+private struct ApplySystemSchemeConfirmationView: View {
+ let title: String
+ let message: String
+ let confirmTitle: String
+ let cancelTitle: String
+ let onConfirm: () -> Void
+ let onCancel: () -> Void
+
+ var body: some View {
+ ZStack {
+ Color.black.opacity(0.20)
+ .contentShape(Rectangle())
+ .onTapGesture { }
+
+ VStack(alignment: .leading, spacing: 20) {
+ HStack(alignment: .top, spacing: 12) {
+ ZStack {
+ Circle()
+ .fill(Color.orange.opacity(0.16))
+ .frame(width: 38, height: 38)
+ Image(systemName: "exclamationmark.triangle.fill")
+ .font(.system(size: 19, weight: .semibold))
+ .foregroundStyle(Color.orange)
+ }
+ .frame(width: 40, height: 40)
+
+ VStack(alignment: .leading, spacing: 8) {
+ Text(title)
+ .font(.system(size: 16, weight: .semibold))
+ .foregroundStyle(.primary)
+ .fixedSize(horizontal: false, vertical: true)
+ Text(message)
+ .font(.system(size: 13))
+ .foregroundStyle(Color.primary.opacity(0.78))
+ .lineSpacing(2)
+ .fixedSize(horizontal: false, vertical: true)
+ }
+ }
+
+ HStack(spacing: 10) {
+ Spacer()
+ ConfirmationActionButton(
+ title: cancelTitle,
+ prominent: false,
+ action: onCancel
+ )
+ .keyboardShortcut(.cancelAction)
+ ConfirmationActionButton(
+ title: confirmTitle,
+ prominent: true,
+ action: onConfirm
+ )
+ .keyboardShortcut(.defaultAction)
+ }
+ }
+ .padding(22)
+ .frame(width: 440)
+ .background(
+ RoundedRectangle(cornerRadius: 8, style: .continuous)
+ .fill(Color(nsColor: .windowBackgroundColor))
+ )
+ .overlay(
+ RoundedRectangle(cornerRadius: 8, style: .continuous)
+ .stroke(Color.primary.opacity(0.16), lineWidth: 1)
+ )
+ .shadow(color: .black.opacity(0.24), radius: 20, x: 0, y: 10)
+ }
+ .frame(maxWidth: .infinity, maxHeight: .infinity)
+ }
+}
+
+private struct ConfirmationActionButton: View {
+ let title: String
+ let prominent: Bool
+ let action: () -> Void
+
+ var body: some View {
+ Button(action: action) {
+ Text(title)
+ .font(.system(size: 13, weight: .semibold))
+ .foregroundStyle(prominent ? Color.white : Color.primary)
+ .lineLimit(1)
+ .minimumScaleFactor(0.86)
+ .frame(minWidth: 82, minHeight: 32)
+ .padding(.horizontal, 10)
+ .background(
+ RoundedRectangle(cornerRadius: 7, style: .continuous)
+ .fill(prominent ? Color.accentColor : Color(nsColor: .controlBackgroundColor))
+ )
+ .overlay(
+ RoundedRectangle(cornerRadius: 7, style: .continuous)
+ .stroke(
+ prominent ? Color.accentColor.opacity(0.40) : Color.primary.opacity(0.16),
+ lineWidth: 1
+ )
+ )
+ }
+ .buttonStyle(.plain)
+ .contentShape(RoundedRectangle(cornerRadius: 7, style: .continuous))
+ }
+}
+
private struct DisplayModeOptionButton: View {
let mode: String
let title: String
--
Gitblit v1.9.3