From 600ef680293916d56c5568f52e510305090cc921 Mon Sep 17 00:00:00 2001 From: Gk40002148 Date: Wed, 9 Feb 2022 17:19:28 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=E3=83=8D=E3=83=83=E3=83=88=E3=83=AF?= =?UTF-8?q?=E3=83=BC=E3=82=AF=E3=82=AA=E3=83=95=E3=83=A9=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E6=99=82=E3=81=AB=E5=8D=8A=E9=80=8F=E6=98=8EView=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WebView/View/WebViewController.storyboard | 64 +++++++++++++++ .../WebView/View/WebViewController.swift | 77 ++++++++++++++++++- .../AgileWorks/en.lproj/Localizable.strings | 2 + .../AgileWorks/ja.lproj/Localizable.strings | 2 + 4 files changed, 141 insertions(+), 4 deletions(-) diff --git a/AgileWorks/AgileWorks/WebView/View/WebViewController.storyboard b/AgileWorks/AgileWorks/WebView/View/WebViewController.storyboard index e30f0ea..f2dd256 100644 --- a/AgileWorks/AgileWorks/WebView/View/WebViewController.storyboard +++ b/AgileWorks/AgileWorks/WebView/View/WebViewController.storyboard @@ -4,6 +4,7 @@ + @@ -16,10 +17,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + @@ -48,6 +109,9 @@ + + + diff --git a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift index 2c5f4ac..b786703 100644 --- a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift +++ b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift @@ -6,11 +6,15 @@ // Copyright © 2021 ATLED CORP. All rights reserved. // import FloatingPanel +import Network import UIKit import WebKit class WebViewController: UIViewController { - @IBOutlet private var webView: UIView! + @IBOutlet private var formView: UIView! + @IBOutlet private var disablingView: UIView! + @IBOutlet private var disconnectLabel: UILabel! + @IBOutlet private var checkConnectButton: UIButton! var mainWebView: WKWebView! // WebView 表示用 JSESSIONID var sessionId: String! @@ -22,6 +26,9 @@ class WebViewController: UIViewController { let kCustomUserAgent = "AwMobileApp Safari/605.1.15" var messageHandler: WebViewScriptMessageHandler! var refreshControl: UIRefreshControl! + private let monitor = NWPathMonitor() + private let queue = DispatchQueue(label: "jp.atled.agileworks") + var isShowDoc = false // Title を設定する URL を定義 let urlToTitle: [String: String] = [ @@ -37,6 +44,10 @@ class WebViewController: UIViewController { self.subWebViewStack.eventDelegate = self self.updateSession(isInit: true) + + // ネットワークオフラインView関連セットアップ + self.setDisconnectView() + self.startNetworkMonitor() } override func viewWillAppear(_ animated: Bool) { @@ -57,8 +68,7 @@ class WebViewController: UIViewController { let configuration = WKWebViewConfiguration() configuration.userContentController = userContentController configuration.applicationNameForUserAgent = kCustomUserAgent - mainWebView = WKWebView(frame: view.frame, configuration: configuration) - //mainWebView = WKWebView(frame: view.frame) + mainWebView = WKWebView(frame: self.formView.frame, configuration: configuration) // スクロール設定 mainWebView.scrollView.bounces = true @@ -82,7 +92,7 @@ class WebViewController: UIViewController { tapWebView.numberOfTapsRequired = 1 tapWebView.delegate = self self.mainWebView.addGestureRecognizer(tapWebView) - view.addSubview(mainWebView) + self.formView.addSubview(mainWebView) // AutoLayout //mainWebView.translatesAutoresizingMaskIntoConstraints = false //mainWebView.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true @@ -185,6 +195,39 @@ class WebViewController: UIViewController { } } + // オフラインViewセットアップ + func setDisconnectView() { + disconnectLabel.text = NSLocalizedString("DisconnectNetworkLabel", comment: "") + disconnectLabel.textAlignment = .center + disconnectLabel.textColor = UIColor.red + checkConnectButton.setTitle(NSLocalizedString("CheckConnectButton", comment: ""), for: .normal) + } + + // ネットワークモニタリング開始 + func startNetworkMonitor() { + // ネットワーク変更時 handler + monitor.pathUpdateHandler = { path in + // ネットワーク接続時 + if path.status == .satisfied { + // オフラインView非表示 + DispatchQueue.main.async { + self.disablingView.isHidden = true + } + // ネットワーク非接続時 + } else { + // 書類表示時 + if self.isShowDoc { + // オフラインView表示 + DispatchQueue.main.async { + self.disablingView.isHidden = false + self.checkConnectButton.isEnabled = true + } + } + } + } + // モニタリングスタート + monitor.start(queue: queue) + } // ページ変更を受信 override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) { switch keyPath { @@ -206,11 +249,13 @@ class WebViewController: UIViewController { } */ // 画面リロードチェック + self.isShowDoc = false for key in self.reloadUrl { if urlString.contains(key) { print("webview reload") // リロード self.mainWebView.reload() + self.isShowDoc = true break } } @@ -231,6 +276,30 @@ class WebViewController: UIViewController { // クルクルを止める self.refreshControl.endRefreshing() } + + // 接続確認ボタンタップ処理 + @IBAction private func checkConnectTapped() { + // 2重タップ防止 + if self.checkConnectButton.isEnabled == false { + return + } + self.checkConnectButton.isEnabled = false + // ネットワーク接続チェック + if isOnline() { + // オフラインView非表示 + DispatchQueue.main.async { + self.disablingView.isHidden = true + } + } else { + // 接続確認ボタン活性 + self.checkConnectButton.isEnabled = true + } + } + + // ネットワークオンラインチェック + private func isOnline() -> Bool { + return self.monitor.currentPath.status == .satisfied + } } extension WebViewController: WKUIDelegate { diff --git a/AgileWorks/AgileWorks/en.lproj/Localizable.strings b/AgileWorks/AgileWorks/en.lproj/Localizable.strings index cdf459d..ef9dda8 100644 --- a/AgileWorks/AgileWorks/en.lproj/Localizable.strings +++ b/AgileWorks/AgileWorks/en.lproj/Localizable.strings @@ -27,6 +27,7 @@ "WorkTitle" = "仕事"; "DocumentsTitle" = "書類作成"; "SearchTitle" = "検索"; +"CheckConnectButton" = "接続確認"; // Approval "ApprovalTitle" = "承認一覧"; @@ -76,6 +77,7 @@ "RefreshTokenUpdateError" = "AgileWorksサーバへアクセスするためのトークンの更新が行えませんでした。\n再ログインする必要があります。"; // Network Error Message +"DisconnectNetworkLabel" = "現在オフラインです。\nオフライン中の操作はお控えください。"; "UnknownNetworkError" = "ネットワークエラーが発生しました"; "NotConnectNetworkError" = "インターネットにアクセスするにはモバイルデータ通信をオンにするかWi-Fiを利用してください"; "TimedOutNetworkError" = "インターネットに接続できません\nしばらく経ってから再度おためしください"; diff --git a/AgileWorks/AgileWorks/ja.lproj/Localizable.strings b/AgileWorks/AgileWorks/ja.lproj/Localizable.strings index ce21a25..c827bbf 100644 --- a/AgileWorks/AgileWorks/ja.lproj/Localizable.strings +++ b/AgileWorks/AgileWorks/ja.lproj/Localizable.strings @@ -27,6 +27,7 @@ "WorkTitle" = "仕事"; "DocumentsTitle" = "書類作成"; "SearchTitle" = "検索"; +"CheckConnectButton" = "接続確認"; // Approval "ApprovalTitle" = "承認一覧"; @@ -76,6 +77,7 @@ "RefreshTokenUpdateError" = "AgileWorksサーバへアクセスするためのトークンの更新が行えませんでした。\n再ログインする必要があります。"; // Network Error Message +"DisconnectNetworkLabel" = "現在オフラインです。\nオフライン中の操作はお控えください。"; "UnknownNetworkError" = "ネットワークエラーが発生しました"; "NotConnectNetworkError" = "インターネットにアクセスするにはモバイルデータ通信をオンにするかWi-Fiを利用してください"; "TimedOutNetworkError" = "インターネットに接続できません\nしばらく経ってから再度おためしください"; -- GitLab From fe77d74fa913f0ced7a45a7ddeb69f20dd494114 Mon Sep 17 00:00:00 2001 From: Gk40002148 Date: Thu, 10 Feb 2022 13:12:44 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=E7=94=BB=E9=9D=A2=E5=9B=9E=E8=BB=A2?= =?UTF-8?q?=E6=99=82=E3=81=AE=E5=8B=95=E4=BD=9C=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AgileWorks/AgileWorks/WebView/View/WebViewController.swift | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift index b786703..b606abc 100644 --- a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift +++ b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift @@ -92,10 +92,9 @@ class WebViewController: UIViewController { tapWebView.numberOfTapsRequired = 1 tapWebView.delegate = self self.mainWebView.addGestureRecognizer(tapWebView) + // 回転時リサイズ設定 + mainWebView.autoresizingMask = [.flexibleWidth, .flexibleHeight] self.formView.addSubview(mainWebView) - // AutoLayout - //mainWebView.translatesAutoresizingMaskIntoConstraints = false - //mainWebView.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true } // WebView ロード処理 -- GitLab