diff --git a/AgileWorks/AgileWorks.xcodeproj/project.pbxproj b/AgileWorks/AgileWorks.xcodeproj/project.pbxproj index ce4ac23f96663f55012299cb0bd62ceec00d1465..47d9d0f367c699f1da56fd8389ab150ebf07e8b2 100644 --- a/AgileWorks/AgileWorks.xcodeproj/project.pbxproj +++ b/AgileWorks/AgileWorks.xcodeproj/project.pbxproj @@ -1689,10 +1689,10 @@ "@executable_path/../../Frameworks", ); MARKETING_VERSION = 1.0.0; - PRODUCT_BUNDLE_IDENTIFIER = jp.atled.agileworks.TodayExtension; + PRODUCT_BUNDLE_IDENTIFIER = jp.atled.agileworks.today; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = "AgileWorks App TodayExtension Ad Hoc"; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "AgileWorks App Wildcard"; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "AgileWorks App TodayExtension"; SKIP_INSTALL = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1767,7 +1767,7 @@ PRODUCT_BUNDLE_IDENTIFIER = jp.atled.agileworks.IntentsExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "AgileWorks App Wildcard"; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "AgileWorks App IntentsExtension"; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_COMPILATION_MODE = wholemodule; @@ -1854,7 +1854,7 @@ PRODUCT_BUNDLE_IDENTIFIER = jp.atled.agileworks.IntentsExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "AgileWorks App Wildcard"; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "AgileWorks App IntentsExtension"; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; @@ -1933,10 +1933,10 @@ MARKETING_VERSION = 1.0.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = jp.atled.agileworks.WidgetExtension; + PRODUCT_BUNDLE_IDENTIFIER = jp.atled.agileworks.widget; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "AgileWorks App Wildcard"; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "AgileWorks App WidgetExtension"; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_COMPILATION_MODE = wholemodule; @@ -2023,10 +2023,10 @@ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; - PRODUCT_BUNDLE_IDENTIFIER = jp.atled.agileworks.WidgetExtension; + PRODUCT_BUNDLE_IDENTIFIER = jp.atled.agileworks.widget; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "AgileWorks App Wildcard"; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "AgileWorks App WidgetExtension"; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; @@ -2055,10 +2055,10 @@ "@executable_path/../../Frameworks", ); MARKETING_VERSION = 1.0.0; - PRODUCT_BUNDLE_IDENTIFIER = jp.atled.agileworks.ShareExtension; + PRODUCT_BUNDLE_IDENTIFIER = jp.atled.agileworks.share; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "AgileWorks App Wildcard"; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "AgileWorks App ShareExtenstion"; SKIP_INSTALL = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -2082,10 +2082,10 @@ "@executable_path/../../Frameworks", ); MARKETING_VERSION = 1.0.0; - PRODUCT_BUNDLE_IDENTIFIER = jp.atled.agileworks.ShareExtension; + PRODUCT_BUNDLE_IDENTIFIER = jp.atled.agileworks.share; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = "AgileWorks App ShareExtension Development"; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "AgileWorks App Wildcard"; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "AgileWorks App ShareExtenstion"; SKIP_INSTALL = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -2256,10 +2256,10 @@ "@executable_path/../../Frameworks", ); MARKETING_VERSION = 1.0.0; - PRODUCT_BUNDLE_IDENTIFIER = jp.atled.agileworks.TodayExtension; + PRODUCT_BUNDLE_IDENTIFIER = jp.atled.agileworks.today; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = "AgileWorks App TodayExtension Development"; - "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "AgileWorks App Wildcard"; + "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "AgileWorks App TodayExtension"; SKIP_INSTALL = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/AgileWorks/AgileWorks/Main/View/MainTabBarViewController.swift b/AgileWorks/AgileWorks/Main/View/MainTabBarViewController.swift index a9a9227077474bf806c17fcccbdcac4b2ded5c5c..7d8547138066985a4a9003ddb8f743a94f5c91bb 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,7 +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 { @@ -135,8 +147,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 1ee5b97f02d211ff1fe26fb0276de345419568e8..c733522ba187b35e42a405d7cb5f9e752de281ab 100644 --- a/AgileWorks/AgileWorks/Main/Wireframe/MainTabBarViewWireframe.swift +++ b/AgileWorks/AgileWorks/Main/Wireframe/MainTabBarViewWireframe.swift @@ -11,12 +11,14 @@ import UIKit protocol MainTabBarViewWireframe: AnyObject { func showApprovalDetail(url: String) func showDocForm(notificationData: NotificationData) + func reloadWebview() + func createLoadUrl(urlPath: String) -> String } class MainTabBarViewWireframeImpl { - weak var viewController: UITabBarController! + weak var viewController: MainTabBarViewController! - required init(viewController: UITabBarController) { + required init(viewController: MainTabBarViewController) { self.viewController = viewController } } @@ -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) { @@ -66,13 +75,24 @@ 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 + + let homeTabNumber = 0 + let homeVC = openViewController(tabNumber: homeTabNumber) + modalWebVC.presentationController?.delegate = homeVC + // 既にモーダルでViewが表示されているか。 if let presentNavi = self.viewController.presentedViewController as? UINavigationController { // されている場合、開き直しの確認 @@ -83,6 +103,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) { // 開き直し確認 @@ -100,4 +136,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/Splash/View/SplashViewController.swift b/AgileWorks/AgileWorks/Splash/View/SplashViewController.swift index fea006443507ba4509c1ad24e131ae3f0f3c3e6d..efa76c5ae92298f7edf4b42f70b5fdb140bd13d0 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 008af00dc4e616ea9c7863dea21bdadbb6904e20..07dfc76b610885af15fc4287d30e188de7d37c84 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? = nil // 描画完了フラグ var drawingComp = false @@ -106,7 +108,11 @@ class WebViewController: UIViewController { // WebView セットアップ private func setWebView() { - print(KeychainDataStore().readServerURL()) + //表示中のサーバー番号 + 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) @@ -177,7 +183,7 @@ class WebViewController: UIViewController { } // WidgetからWebView ロード処理 - func widgetLoadWebView(url: String) { + func remakeWebView(url: String) { //webviewの生成 self.setWebView() loadWebView(url: url) @@ -362,11 +368,37 @@ 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 firstServerNumver = serverList.first + if displayedServerNumber != firstServerNumver { + showServerSwichAlert() + } else { + self.dismiss(animated: true, completion: nil) + } } } } + //サーバー切り替え確認アラート + func showServerSwichAlert() { + let message = "現在別のサーバーでログイン中です。表示中の書類のサーバーに切り替えますか?" + // OK アクション設定 + let defaultAction = UIAlertAction(title: getDisplayString(key: "YES", comment: ""), style: .default) { _ in + UserDefaultsDataStore().changeServerList(firstServer: self.displayedServerNumber!) + self.dismiss(animated: true, completion: nil) + } + // キャンセルアクション設定 + let cancelAction = UIAlertAction(title: getDisplayString(key: "NO", comment: ""), style: .cancel) { _ in + let serverList = UserDefaultsDataStore().readServerList() + let firstServerNumver = serverList.first + UserDefaultsDataStore().setGroupId(serverNumber: firstServerNumver!) + self.dismiss(animated: true, completion: nil) + } + // アラート表示 + AppDelegate.shared.rootViewController.showAlertScreen(view:self, title: "", message: message, defaultAction: defaultAction, cancelAction: cancelAction) + } + // 接続確認ボタンタップ処理 @IBAction private func checkConnectTapped() { // 2重タップ防止 @@ -716,3 +748,17 @@ extension WebViewController: UIScrollViewDelegate { scrollView.pinchGestureRecognizer?.isEnabled = false } } + +extension WebViewController: UIAdaptivePresentationControllerDelegate { + func presentationControllerDidDismiss(_ presentationController: UIPresentationController) { + AppDelegate.shared.rootViewController.switchToMainScreen() + } + + 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) + } +}