From fa6cc97403baf73075d2eab433f6fb4a4ee3caf3 Mon Sep 17 00:00:00 2001 From: alex-osm Date: Fri, 20 Sep 2024 12:21:51 +0300 Subject: [PATCH 1/2] Fix WebView annotation (xcode 16) --- .../article/TravelArticleDialogViewController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/Controllers/TravelGuides/article/TravelArticleDialogViewController.swift b/Sources/Controllers/TravelGuides/article/TravelArticleDialogViewController.swift index d7918315d9..9293426835 100644 --- a/Sources/Controllers/TravelGuides/article/TravelArticleDialogViewController.swift +++ b/Sources/Controllers/TravelGuides/article/TravelArticleDialogViewController.swift @@ -506,7 +506,7 @@ final class TravelArticleDialogViewController: OABaseWebViewController, TravelAr } } - override func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { + override func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping @MainActor @Sendable (WKNavigationActionPolicy) -> Void) { let newUrl = OATravelGuidesHelper.normalizeFileUrl(navigationAction.request.url?.absoluteString) ?? "" let isWebPage = newUrl.hasPrefix(PAGE_PREFIX_HTTP) || newUrl.hasPrefix(PAGE_PREFIX_HTTPS) let isPhoneNumber = newUrl.hasPrefix("tel:") || newUrl.rangeOfCharacter(from: CharacterSet(charactersIn: "-+()% 0123456789").inverted) == nil From 52ae9d77c2a45ec7cc62e9bb27fa70aa92fb5e96 Mon Sep 17 00:00:00 2001 From: Aleksandr Panchenko Date: Thu, 24 Oct 2024 13:46:03 +0300 Subject: [PATCH 2/2] use override func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction) async -> WKNavigationActionPolicy {} support Xcode 15/16 --- .../TravelArticleDialogViewController.swift | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/Sources/Controllers/TravelGuides/article/TravelArticleDialogViewController.swift b/Sources/Controllers/TravelGuides/article/TravelArticleDialogViewController.swift index 9293426835..4460a6535b 100644 --- a/Sources/Controllers/TravelGuides/article/TravelArticleDialogViewController.swift +++ b/Sources/Controllers/TravelGuides/article/TravelArticleDialogViewController.swift @@ -506,37 +506,38 @@ final class TravelArticleDialogViewController: OABaseWebViewController, TravelAr } } - override func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping @MainActor @Sendable (WKNavigationActionPolicy) -> Void) { + override func webView(_ webView: WKWebView, + decidePolicyFor navigationAction: WKNavigationAction) async -> WKNavigationActionPolicy { let newUrl = OATravelGuidesHelper.normalizeFileUrl(navigationAction.request.url?.absoluteString) ?? "" let isWebPage = newUrl.hasPrefix(PAGE_PREFIX_HTTP) || newUrl.hasPrefix(PAGE_PREFIX_HTTPS) let isPhoneNumber = newUrl.hasPrefix("tel:") || newUrl.rangeOfCharacter(from: CharacterSet(charactersIn: "-+()% 0123456789").inverted) == nil let isEmail = newUrl.isValidEmail() if newUrl.hasSuffix("showNavigation") { - // Clicked on Breadcrumbs navigation pannel + // Clicked on Breadcrumbs navigation panel showNavigation() - decisionHandler(.cancel) + return .cancel } else if isPhoneNumber || isEmail { - decisionHandler(.allow) + return .allow } else if newUrl == blankUrl { // On open new TravelGuides page via code - decisionHandler(.allow) + return .allow } else if newUrl.contains(WIKIVOYAGE_DOMAIN) && isWebPage { TravelGuidesUtils.processWikivoyageDomain(url: newUrl, delegate: self) - decisionHandler(.cancel) + return .cancel } else if newUrl.contains(WIKI_DOMAIN) && isWebPage && article != nil { self.webView.addSpinner() let defaultCoordinates = CLLocation(latitude: article!.lat, longitude: article!.lon) TravelGuidesUtils.processWikipediaDomain(defaultLocation: defaultCoordinates, url: newUrl, delegate: self) - decisionHandler(.cancel) + return .cancel } else if isWebPage { OAWikiArticleHelper.warnAboutExternalLoad(newUrl, sourceView: self.webView) - decisionHandler(.cancel) + return .cancel } else if newUrl.contains(PREFIX_GEO) { handleGeoUrl(newUrl) - decisionHandler(.cancel) + return .cancel } else { - decisionHandler(.allow) + return .allow } }