From 32f8be390282f5cf47038f1d6999d0e073dd5039 Mon Sep 17 00:00:00 2001 From: Kishikawa Katsumi Date: Sun, 28 Jul 2024 07:23:50 +0900 Subject: [PATCH] Improve alert message --- .../ConnectServiceView.swift | 25 +++++++++++++------ .../DocumentViewController.swift | 12 ++++++--- .../FilesViewController.swift | 4 +++ .../SharesViewController.swift | 4 +++ .../xcshareddata/swiftpm/Package.resolved | 2 +- 5 files changed, 35 insertions(+), 12 deletions(-) diff --git a/Examples/FileBrowser/FileBrowser (iOS)/ConnectServiceView.swift b/Examples/FileBrowser/FileBrowser (iOS)/ConnectServiceView.swift index 732f874..205e77a 100644 --- a/Examples/FileBrowser/FileBrowser (iOS)/ConnectServiceView.swift +++ b/Examples/FileBrowser/FileBrowser (iOS)/ConnectServiceView.swift @@ -2,7 +2,7 @@ import SwiftUI import SMBClient struct ConnectServiceView: View { - enum FocusedField { + private enum FocusedField { case username case password } @@ -19,6 +19,9 @@ struct ConnectServiceView: View { @FocusState private var focusedField: FocusedField? + @State private var presentLocalizedAlert: Bool = false + @State private var localizedError: ErrorResponse? = nil + @State private var presentAlert: Bool = false @State private var error: Error? = nil @@ -82,12 +85,15 @@ struct ConnectServiceView: View { guard canSubmit else { return } submit() } - .alert(isPresented: $presentAlert) { - if let error { - Alert(title: Text("Login Failed"), message: Text(error.localizedDescription), dismissButton: .default(Text("Close"))) - } else { - Alert(title: Text("Login Failed"), dismissButton: .default(Text("Close"))) - } + .alert(isPresented: $presentLocalizedAlert, error: localizedError) { _ in + Button("Close") {} + } message: { error in + Text(error.failureReason ?? error.recoverySuggestion ?? "") + } + .alert("", isPresented: $presentAlert) { + Button("Close") {} + } message: { + Text(error?.localizedDescription ?? "") } } } @@ -100,9 +106,12 @@ struct ConnectServiceView: View { dismiss() onSuccess(username, password, client) + } catch let error as ErrorResponse { + self.localizedError = error + presentLocalizedAlert = true } catch { - presentAlert = true self.error = error + presentAlert = true } } } diff --git a/Examples/FileBrowser/FileBrowser (iOS)/DocumentViewController.swift b/Examples/FileBrowser/FileBrowser (iOS)/DocumentViewController.swift index e7155ae..b03bf63 100644 --- a/Examples/FileBrowser/FileBrowser (iOS)/DocumentViewController.swift +++ b/Examples/FileBrowser/FileBrowser (iOS)/DocumentViewController.swift @@ -151,9 +151,15 @@ class DocumentViewController: UIViewController { extension DocumentViewController: WKNavigationDelegate { func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: any Error) { - let controller = UIAlertController(title: "", message: error.localizedDescription, preferredStyle: .alert) - controller.addAction(UIAlertAction(title: NSLocalizedString("Close", comment: ""), style: .default)) - present(controller, animated: true) + if let error = error as? LocalizedError { + let controller = UIAlertController(title: error.errorDescription, message: error.failureReason, preferredStyle: .alert) + controller.addAction(UIAlertAction(title: NSLocalizedString("Close", comment: ""), style: .default)) + present(controller, animated: true) + } else { + let controller = UIAlertController(title: "", message: error.localizedDescription, preferredStyle: .alert) + controller.addAction(UIAlertAction(title: NSLocalizedString("Close", comment: ""), style: .default)) + present(controller, animated: true) + } } } diff --git a/Examples/FileBrowser/FileBrowser (iOS)/FilesViewController.swift b/Examples/FileBrowser/FileBrowser (iOS)/FilesViewController.swift index 25b3ebb..9efcb11 100644 --- a/Examples/FileBrowser/FileBrowser (iOS)/FilesViewController.swift +++ b/Examples/FileBrowser/FileBrowser (iOS)/FilesViewController.swift @@ -53,6 +53,10 @@ class FilesViewController: UIViewController, UITableViewDataSource, UITableViewD .sorted { $0.name < $1.name } self.files.append(contentsOf: files) tableView.reloadData() + } catch let error as LocalizedError { + let controller = UIAlertController(title: error.errorDescription, message: error.failureReason, preferredStyle: .alert) + controller.addAction(UIAlertAction(title: NSLocalizedString("Close", comment: ""), style: .default)) + present(controller, animated: true) } catch { let controller = UIAlertController(title: "", message: error.localizedDescription, preferredStyle: .alert) controller.addAction(UIAlertAction(title: NSLocalizedString("Close", comment: ""), style: .default)) diff --git a/Examples/FileBrowser/FileBrowser (iOS)/SharesViewController.swift b/Examples/FileBrowser/FileBrowser (iOS)/SharesViewController.swift index cdcd2f8..5fb72fc 100644 --- a/Examples/FileBrowser/FileBrowser (iOS)/SharesViewController.swift +++ b/Examples/FileBrowser/FileBrowser (iOS)/SharesViewController.swift @@ -42,6 +42,10 @@ class SharesViewController: UIViewController, UITableViewDataSource, UITableView self.shares.append(contentsOf: shares) tableView.reloadData() + } catch let error as LocalizedError { + let controller = UIAlertController(title: error.errorDescription, message: error.failureReason, preferredStyle: .alert) + controller.addAction(UIAlertAction(title: NSLocalizedString("Close", comment: ""), style: .default)) + present(controller, animated: true) } catch { let controller = UIAlertController(title: "", message: error.localizedDescription, preferredStyle: .alert) controller.addAction(UIAlertAction(title: NSLocalizedString("Close", comment: ""), style: .default)) diff --git a/Examples/FileBrowser/FileBrowser.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Examples/FileBrowser/FileBrowser.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index e8bed7b..7ed26d8 100644 --- a/Examples/FileBrowser/FileBrowser.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Examples/FileBrowser/FileBrowser.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -16,7 +16,7 @@ "location" : "https://github.com/kishikawakatsumi/SMBClient.git", "state" : { "branch" : "main", - "revision" : "f1710f78e9ed3a7f4de60c29f28294f62aa95f8d" + "revision" : "92548f8cb10f5d741af0a7ab02acddf2bbacea1c" } } ],