From 4be0992fbeb2d152bedff6c939802c125dbb105c Mon Sep 17 00:00:00 2001 From: Azuma Kasumi Date: Thu, 29 Jun 2023 17:10:51 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=E9=80=9A=E7=9F=A5=E3=82=B5=E3=83=BC?= =?UTF-8?q?=E3=83=90=E3=83=BC=E3=82=A2=E3=83=A9=E3=83=BC=E3=83=88=EF=BC=88?= =?UTF-8?q?=E5=8B=95=E4=BD=9C=E6=9C=AA=E7=A2=BA=E8=AA=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Main/View/MainTabBarViewController.swift | 19 ++++++- .../Wireframe/MainTabBarViewWireframe.swift | 49 ++++++++++++++----- .../WebView/View/WebViewController.swift | 35 +++++++++++-- 3 files changed, 87 insertions(+), 16 deletions(-) diff --git a/AgileWorks/AgileWorks/Main/View/MainTabBarViewController.swift b/AgileWorks/AgileWorks/Main/View/MainTabBarViewController.swift index a9a9227..47b8549 100644 --- a/AgileWorks/AgileWorks/Main/View/MainTabBarViewController.swift +++ b/AgileWorks/AgileWorks/Main/View/MainTabBarViewController.swift @@ -105,6 +105,13 @@ class MainTabBarViewController: UITabBarController { } } +//通知モーダルが閉じられたのを検知 +extension MainTabBarViewController: UIAdaptivePresentationControllerDelegate { + func presentationControllerDidDismiss(_ presentationController: UIPresentationController) { + wireframe.reloadWebview() + } +} + extension MainTabBarViewController: UITabBarControllerDelegate { func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { if let navigationController = tabBarController.selectedViewController as? UINavigationController { @@ -135,8 +142,16 @@ extension MainTabBarViewController: UITabBarControllerDelegate { } } webView.loadViewIfNeeded() - webView.reloadWebView(sameTab: selectedTabIndex == tabBarController.selectedIndex) - selectedTabIndex = tabBarController.selectedIndex + + let serverList = UserDefaultsDataStore().readServerList() + let serverNumber = serverList.first + if webView.displayedServerNumber != serverNumber { + webView.loadURL = wireframe.createLoadUrl(urlPath: ViewURL.home.rawValue) + webView.remakeWebView(url: webView.loadURL) + } else { + webView.reloadWebView(sameTab: selectedTabIndex == tabBarController.selectedIndex) + selectedTabIndex = tabBarController.selectedIndex + } } } } diff --git a/AgileWorks/AgileWorks/Main/Wireframe/MainTabBarViewWireframe.swift b/AgileWorks/AgileWorks/Main/Wireframe/MainTabBarViewWireframe.swift index 1ee5b97..90d16a8 100644 --- a/AgileWorks/AgileWorks/Main/Wireframe/MainTabBarViewWireframe.swift +++ b/AgileWorks/AgileWorks/Main/Wireframe/MainTabBarViewWireframe.swift @@ -11,6 +11,8 @@ import UIKit protocol MainTabBarViewWireframe: AnyObject { func showApprovalDetail(url: String) func showDocForm(notificationData: NotificationData) + func reloadWebview() + func createLoadUrl(urlPath: String) -> String } class MainTabBarViewWireframeImpl { @@ -32,6 +34,21 @@ extension MainTabBarViewWireframeImpl: MainTabBarViewWireframe { } return false } + + func openViewController(tabNumber: Int) -> WebViewController { + // モーダルでViewが表示されているか。 + if let presentNavi = self.viewController.presentedViewController as? UINavigationController { + // 表示されている場合、閉じる + presentNavi.dismiss(animated: true, completion: nil) + } + + viewController.selectedIndex = tabNumber + + let view = viewController.children[tabNumber] as! UINavigationController + let VC = view.viewControllers[view.viewControllers.count - 1] as! WebViewController + return VC + } + //ウィジェットからの起動 func showApprovalDetail(url: String) { //アプリ起動のみ @@ -42,23 +59,15 @@ extension MainTabBarViewWireframeImpl: MainTabBarViewWireframe { if alertCheck() { return } - // モーダルでViewが表示されているか。 - if let presentNavi = self.viewController.presentedViewController as? UINavigationController { - // 表示されている場合、閉じる - presentNavi.dismiss(animated: true, completion: nil) - } - let workNum = 1 - viewController.selectedIndex = workNum - - let view = viewController.children[workNum] as! UINavigationController - let workVC = view.viewControllers[view.viewControllers.count - 1] as! WebViewController + let workTabNumber = 1 + let workVC = openViewController(tabNumber: workTabNumber) //ウィジェットから起動する workVC.openByWidget = true //viewの読み込み workVC.loadViewIfNeeded() - workVC.widgetLoadWebView(url: url) + workVC.remakeWebView(url: url) } // 通知から書類表示 func showDocForm(notificationData: NotificationData) { @@ -73,6 +82,8 @@ extension MainTabBarViewWireframeImpl: MainTabBarViewWireframe { modalWebVC.showNotification = true let nav = UINavigationController(rootViewController: modalWebVC) nav.modalPresentationStyle = .fullScreen + nav.presentationController?.delegate = viewController as? any UIAdaptivePresentationControllerDelegate + // 既にモーダルでViewが表示されているか。 if let presentNavi = self.viewController.presentedViewController as? UINavigationController { // されている場合、開き直しの確認 @@ -100,4 +111,20 @@ extension MainTabBarViewWireframeImpl: MainTabBarViewWireframe { // アラート表示 AppDelegate.shared.rootViewController.showAlertScreen(view: oldNavi, title: "", message: message, defaultAction: defaultAction, cancelAction: cancelAction) } + + func reloadWebview() { + let homeNumber = 0 + let homeVC = openViewController(tabNumber: homeNumber) + + //viewの読み込み + homeVC.loadViewIfNeeded() + homeVC.loadURL = createLoadUrl(urlPath: ViewURL.home.rawValue) + homeVC.remakeWebView(url: homeVC.loadURL) + } + + // WebView でロードするURL生成 + func createLoadUrl(urlPath: String) -> String { + return Configuration.shared.awURL + "/" + Configuration.shared.awContextPath + urlPath + } + } diff --git a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift index 008af00..12601ce 100644 --- a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift +++ b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift @@ -38,6 +38,8 @@ class WebViewController: UIViewController { var tabTitleKey: String! // 現在表示中のURL var nowURL: String! + //表示中のサーバー + var displayedServerNumber: Int = 0 // 描画完了フラグ var drawingComp = false @@ -106,7 +108,9 @@ class WebViewController: UIViewController { // WebView セットアップ private func setWebView() { - print(KeychainDataStore().readServerURL()) + let serverList = UserDefaultsDataStore().readServerList() + displayedServerNumber = serverList.first! + let userContentController = WKUserContentController() let script = "document.cookie='JSESSIONID=\(KeychainDataStore().readSessionID() ?? "")'" let cookieScript = WKUserScript(source: script, injectionTime: .atDocumentStart, forMainFrameOnly: false) @@ -177,7 +181,7 @@ class WebViewController: UIViewController { } // WidgetからWebView ロード処理 - func widgetLoadWebView(url: String) { + func remakeWebView(url: String) { //webviewの生成 self.setWebView() loadWebView(url: url) @@ -362,11 +366,36 @@ class WebViewController: UIViewController { @IBAction private func closeTapped() { if subViewStack.pop() == nil { if self.showNotification { - self.dismiss(animated: true, completion: nil) + //ログイン中のサーバーと表示中の書類サーバーの差異チェック + let serverList = UserDefaultsDataStore().readServerList() + let documentServer = serverList.first + if displayedServerNumber != documentServer { + showServerSwichAlert() + } else { + self.dismiss(animated: true, completion: nil) + } } } } + //サーバー切り替え確認アラート + func showServerSwichAlert() { + let message = "現在別のサーバーでログイン中です。表示中の書類のサーバーに切り替えますか?" + // OK アクション設定 + let defaultAction = UIAlertAction(title: getDisplayString(key: "YES", comment: ""), style: .default) { _ in + let documentServer = UserDefaultsDataStore().readSetServerNumber() + UserDefaultsDataStore().changeServerList(firstServer: documentServer) + self.dismiss(animated: true, completion: nil) + } + // キャンセルアクション設定 + let cancelAction = UIAlertAction(title: getDisplayString(key: "NO", comment: ""), style: .cancel) { _ in + UserDefaultsDataStore().setGroupId(serverNumber: self.displayedServerNumber) + self.dismiss(animated: true, completion: nil) + } + // アラート表示 + AppDelegate.shared.rootViewController.showAlertScreen(view:self, title: "", message: message, defaultAction: defaultAction, cancelAction: cancelAction) + } + // 接続確認ボタンタップ処理 @IBAction private func checkConnectTapped() { // 2重タップ防止 -- GitLab From aa5cbb4ef3631edc3960d4cae730e4c93fc585ed Mon Sep 17 00:00:00 2001 From: Azuma Kasumi Date: Mon, 3 Jul 2023 17:23:21 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=E5=8B=95=E4=BD=9C=E7=A2=BA=E8=AA=8D?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E7=89=88=EF=BC=88=E9=80=9A=E7=9F=A5=E6=9B=B8?= =?UTF-8?q?=E9=A1=9E=E9=96=89=E3=81=98=E3=81=9F=E5=BE=8C=E3=81=AE=E5=86=8D?= =?UTF-8?q?=E8=AA=AD=E3=81=BF=E8=BE=BC=E3=81=BF=E3=81=8C=E3=81=BE=E3=81=A0?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Wireframe/MainTabBarViewWireframe.swift | 30 +++++++++++++++--- .../Splash/View/SplashViewController.swift | 5 +++ .../WebView/View/WebViewController.swift | 31 +++++++++++++------ 3 files changed, 53 insertions(+), 13 deletions(-) diff --git a/AgileWorks/AgileWorks/Main/Wireframe/MainTabBarViewWireframe.swift b/AgileWorks/AgileWorks/Main/Wireframe/MainTabBarViewWireframe.swift index 90d16a8..407ada0 100644 --- a/AgileWorks/AgileWorks/Main/Wireframe/MainTabBarViewWireframe.swift +++ b/AgileWorks/AgileWorks/Main/Wireframe/MainTabBarViewWireframe.swift @@ -16,9 +16,9 @@ protocol MainTabBarViewWireframe: AnyObject { } class MainTabBarViewWireframeImpl { - weak var viewController: UITabBarController! + weak var viewController: MainTabBarViewController! - required init(viewController: UITabBarController) { + required init(viewController: MainTabBarViewController) { self.viewController = viewController } } @@ -75,15 +75,21 @@ extension MainTabBarViewWireframeImpl: MainTabBarViewWireframe { if alertCheck() { return } + + if notificationData.url.isEmpty { + return + } + let modalWebVC = WebViewBuilderImpl().buildVC() // URL , タイトル設定 modalWebVC.loadURL = notificationData.url modalWebVC.navigationItem.title = notificationData.title modalWebVC.showNotification = true + modalWebVC.displayedServerNumber = getDocumentServerNumber(url: URL(string: notificationData.url)) let nav = UINavigationController(rootViewController: modalWebVC) nav.modalPresentationStyle = .fullScreen - nav.presentationController?.delegate = viewController as? any UIAdaptivePresentationControllerDelegate - + nav.presentationController?.delegate = viewController + print(nav.presentationController?.delegate) // 既にモーダルでViewが表示されているか。 if let presentNavi = self.viewController.presentedViewController as? UINavigationController { // されている場合、開き直しの確認 @@ -94,6 +100,22 @@ extension MainTabBarViewWireframeImpl: MainTabBarViewWireframe { } } + func getDocumentServerNumber(url: URL?) -> Int? { + guard let _ = url else { + return nil + } + let serverList = UserDefaultsDataStore().readServerList() + for serverNumber in serverList { + UserDefaultsDataStore().setGroupId(serverNumber: serverNumber) + let serverURL = KeychainDataStore().readServerURL() + if serverURL == url?.host { + return serverNumber + } + } + UserDefaultsDataStore().setGroupId(serverNumber: serverList.first!) + return nil + } + // 書類上書き確認アラート表示 func showOverrideAlter(oldNavi: UINavigationController, newNavi: UINavigationController) { // 開き直し確認 diff --git a/AgileWorks/AgileWorks/Splash/View/SplashViewController.swift b/AgileWorks/AgileWorks/Splash/View/SplashViewController.swift index fea0064..efa76c5 100644 --- a/AgileWorks/AgileWorks/Splash/View/SplashViewController.swift +++ b/AgileWorks/AgileWorks/Splash/View/SplashViewController.swift @@ -47,6 +47,11 @@ class SplashViewController: UIViewController { private func makeServiceCall() { activityIndicator.startAnimating() + let serverList = UserDefaultsDataStore().readServerList() + if !serverList.isEmpty { + UserDefaultsDataStore().setGroupId(serverNumber: serverList.first!) + } + guard KeychainDataStore().readOAuthState() != nil else { self.switchToLogoutOrLicenseView() return diff --git a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift index 12601ce..6ac6f6a 100644 --- a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift +++ b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift @@ -39,7 +39,7 @@ class WebViewController: UIViewController { // 現在表示中のURL var nowURL: String! //表示中のサーバー - var displayedServerNumber: Int = 0 + var displayedServerNumber: Int? = nil // 描画完了フラグ var drawingComp = false @@ -108,9 +108,11 @@ class WebViewController: UIViewController { // WebView セットアップ private func setWebView() { - let serverList = UserDefaultsDataStore().readServerList() - displayedServerNumber = serverList.first! - + //表示中のサーバー番号 + if displayedServerNumber == nil { + let serverList = UserDefaultsDataStore().readServerList() + displayedServerNumber = serverList.first + } let userContentController = WKUserContentController() let script = "document.cookie='JSESSIONID=\(KeychainDataStore().readSessionID() ?? "")'" let cookieScript = WKUserScript(source: script, injectionTime: .atDocumentStart, forMainFrameOnly: false) @@ -368,8 +370,8 @@ class WebViewController: UIViewController { if self.showNotification { //ログイン中のサーバーと表示中の書類サーバーの差異チェック let serverList = UserDefaultsDataStore().readServerList() - let documentServer = serverList.first - if displayedServerNumber != documentServer { + let firstServerNumver = serverList.first + if displayedServerNumber != firstServerNumver { showServerSwichAlert() } else { self.dismiss(animated: true, completion: nil) @@ -383,13 +385,14 @@ class WebViewController: UIViewController { let message = "現在別のサーバーでログイン中です。表示中の書類のサーバーに切り替えますか?" // OK アクション設定 let defaultAction = UIAlertAction(title: getDisplayString(key: "YES", comment: ""), style: .default) { _ in - let documentServer = UserDefaultsDataStore().readSetServerNumber() - UserDefaultsDataStore().changeServerList(firstServer: documentServer) + UserDefaultsDataStore().changeServerList(firstServer: self.displayedServerNumber!) self.dismiss(animated: true, completion: nil) } // キャンセルアクション設定 let cancelAction = UIAlertAction(title: getDisplayString(key: "NO", comment: ""), style: .cancel) { _ in - UserDefaultsDataStore().setGroupId(serverNumber: self.displayedServerNumber) + let serverList = UserDefaultsDataStore().readServerList() + let firstServerNumver = serverList.first + UserDefaultsDataStore().setGroupId(serverNumber: firstServerNumver!) self.dismiss(animated: true, completion: nil) } // アラート表示 @@ -745,3 +748,13 @@ extension WebViewController: UIScrollViewDelegate { scrollView.pinchGestureRecognizer?.isEnabled = false } } + +extension WebViewController { + override func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) { + super.dismiss(animated: flag, completion: completion) + guard let presentationController = presentationController else { + return + } + presentationController.delegate?.presentationControllerDidDismiss?(presentationController) + } +} -- GitLab From dea1b96c49868d95161038ec3d29e225c1a09075 Mon Sep 17 00:00:00 2001 From: Azuma Kasumi Date: Mon, 3 Jul 2023 17:24:27 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=E3=82=B3=E3=83=9F=E3=83=83=E3=83=88?= =?UTF-8?q?=E5=BF=98=E3=82=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AgileWorks/Main/View/MainTabBarViewController.swift | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/AgileWorks/AgileWorks/Main/View/MainTabBarViewController.swift b/AgileWorks/AgileWorks/Main/View/MainTabBarViewController.swift index 47b8549..7d85471 100644 --- a/AgileWorks/AgileWorks/Main/View/MainTabBarViewController.swift +++ b/AgileWorks/AgileWorks/Main/View/MainTabBarViewController.swift @@ -8,7 +8,7 @@ import UIKit -class MainTabBarViewController: UITabBarController { +class MainTabBarViewController: UITabBarController , UIAdaptivePresentationControllerDelegate { private var wireframe: MainTabBarViewWireframe! var screenPath: String? { @@ -103,14 +103,19 @@ class MainTabBarViewController: UITabBarController { } } } + func presentationControllerDidDismiss(_ presentationController: UIPresentationController) { + wireframe.reloadWebview() + } } +/* //通知モーダルが閉じられたのを検知 extension MainTabBarViewController: UIAdaptivePresentationControllerDelegate { func presentationControllerDidDismiss(_ presentationController: UIPresentationController) { wireframe.reloadWebview() } } + */ extension MainTabBarViewController: UITabBarControllerDelegate { func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { -- GitLab