diff --git a/AgileWorks/AgileWorks.xcodeproj/project.pbxproj b/AgileWorks/AgileWorks.xcodeproj/project.pbxproj index 853fc4bfabd6ecb67f3fa3e7deb4f5d41d6f3882..bafadefc015576e1f17c2287f7dc2f183af71c28 100644 --- a/AgileWorks/AgileWorks.xcodeproj/project.pbxproj +++ b/AgileWorks/AgileWorks.xcodeproj/project.pbxproj @@ -150,6 +150,7 @@ C535772C2754D12600EAA660 /* WebViewBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C535772B2754D12600EAA660 /* WebViewBuilder.swift */; }; C535772E2754D5C500EAA660 /* WebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C535772D2754D5C500EAA660 /* WebViewController.swift */; }; C53577372758AC1100EAA660 /* WebViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C53577362758AC1100EAA660 /* WebViewController.storyboard */; }; + C5377F0327E07CD9004467BE /* MainTabBarViewWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5377F0227E07CD9004467BE /* MainTabBarViewWireframe.swift */; }; C57DCAAA27C89692000A2ABC /* ProfileViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C57DCAA927C89692000A2ABC /* ProfileViewController.storyboard */; }; C57DCAAE27C89823000A2ABC /* ProfileViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C57DCAAD27C89823000A2ABC /* ProfileViewController.swift */; }; C57DCAB027C8AEFC000A2ABC /* ProfileTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C57DCAAF27C8AEFC000A2ABC /* ProfileTableViewController.swift */; }; @@ -334,6 +335,7 @@ C535772B2754D12600EAA660 /* WebViewBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewBuilder.swift; sourceTree = ""; }; C535772D2754D5C500EAA660 /* WebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewController.swift; sourceTree = ""; }; C53577362758AC1100EAA660 /* WebViewController.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = WebViewController.storyboard; sourceTree = ""; }; + C5377F0227E07CD9004467BE /* MainTabBarViewWireframe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTabBarViewWireframe.swift; sourceTree = ""; }; C57DCAA927C89692000A2ABC /* ProfileViewController.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = ProfileViewController.storyboard; sourceTree = ""; }; C57DCAAD27C89823000A2ABC /* ProfileViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileViewController.swift; sourceTree = ""; }; C57DCAAF27C8AEFC000A2ABC /* ProfileTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileTableViewController.swift; sourceTree = ""; }; @@ -447,6 +449,7 @@ children = ( YQKN6GSUCQ782XFYNUG11TN3 /* Builder */, LLI0RGX2ZZLAP3ZAE0TGGV6N /* View */, + C5377F0127E07C7B004467BE /* Wireframe */, ); path = Main; sourceTree = ""; @@ -834,14 +837,6 @@ path = WebClient; sourceTree = ""; }; - C5285D3727CCB3A1006A9182 /* Cell */ = { - isa = PBXGroup; - children = ( - C5285D3827CCB3C8006A9182 /* ProfileTableViewCell.swift */, - ); - path = Cell; - sourceTree = ""; - }; C50CF78A27D86D760042C210 /* OpenLicense */ = { isa = PBXGroup; children = ( @@ -872,6 +867,14 @@ path = View; sourceTree = ""; }; + C5285D3727CCB3A1006A9182 /* Cell */ = { + isa = PBXGroup; + children = ( + C5285D3827CCB3C8006A9182 /* ProfileTableViewCell.swift */, + ); + path = Cell; + sourceTree = ""; + }; C53577282754D02400EAA660 /* WebView */ = { isa = PBXGroup; children = ( @@ -901,14 +904,14 @@ path = View; sourceTree = ""; }; - C599740927D992B1006F5AAC /* Cell */ = { + C5377F0127E07C7B004467BE /* Wireframe */ = { isa = PBXGroup; children = ( - C599740A27D992E9006F5AAC /* OpenLicenseTableViewCell.swift */, + C5377F0227E07CD9004467BE /* MainTabBarViewWireframe.swift */, ); - path = Cell; - sourceTree = ""; - }; + path = Wireframe; + sourceTree = ""; + }; C57DCAA727C8954B000A2ABC /* Profile */ = { isa = PBXGroup; children = ( @@ -928,6 +931,14 @@ path = View; sourceTree = ""; }; + C599740927D992B1006F5AAC /* Cell */ = { + isa = PBXGroup; + children = ( + C599740A27D992E9006F5AAC /* OpenLicenseTableViewCell.swift */, + ); + path = Cell; + sourceTree = ""; + }; ETCUTRCSRVUF3YT1U0HUMDJ4 /* Splash */ = { isa = PBXGroup; children = ( @@ -1336,6 +1347,7 @@ DO2X5NYERJY3QMXCZGA5H9OJ /* LoginBuilder.swift in Sources */, BDBBF83B243C9EAB00EEB25D /* GetSubmissionsIDEndpoint.swift in Sources */, 76D1DC1E2592FE3400429C70 /* GetDocumentInfoEndpoint.swift in Sources */, + C5377F0327E07CD9004467BE /* MainTabBarViewWireframe.swift in Sources */, C57DCAB027C8AEFC000A2ABC /* ProfileTableViewController.swift in Sources */, 3A1F975424AF2D6700AE6A42 /* ModalFullCollectionViewController.swift in Sources */, BD8D55D92420609000A667B0 /* XCGLoggerExtensions.swift in Sources */, diff --git a/AgileWorks/AgileWorks/App/RootViewController.swift b/AgileWorks/AgileWorks/App/RootViewController.swift index f5e690750ccf55a0bd5059bc11f09bbf1c3ea1ec..578203f73f2ea82d840018a7a3ffd36f376cb62d 100644 --- a/AgileWorks/AgileWorks/App/RootViewController.swift +++ b/AgileWorks/AgileWorks/App/RootViewController.swift @@ -113,16 +113,16 @@ extension RootViewController { } func handleLink() { - /* if let mainNavigationController = current as? MainTabBarViewController, let linkType = linkType { switch linkType { + case .deeplink(let path): - mainNavigationController.screenPath = path + //mainNavigationController.screenPath = path + break case .notification(let data): mainNavigationController.notificationData = data } } - */ } } diff --git a/AgileWorks/AgileWorks/Main/Builder/MainTabBarViewBuilder.swift b/AgileWorks/AgileWorks/Main/Builder/MainTabBarViewBuilder.swift index b8d6367d14d772d47cd6e89ed7f64430f0351c0f..80019a51e1b07e44959dcca57caf2ad35a6d50ed 100644 --- a/AgileWorks/AgileWorks/Main/Builder/MainTabBarViewBuilder.swift +++ b/AgileWorks/AgileWorks/Main/Builder/MainTabBarViewBuilder.swift @@ -31,6 +31,7 @@ struct MainTabBarViewBuilderImpl: MainTabBarViewBuilder { func build() -> UITabBarController { let viewController = storyboard() + viewController.inject(wireframe: MainTabBarViewWireframeImpl(viewController: viewController)) // viewController にセットする WebViewController 生成 let homeNC = createWebViewController(type: ViewType.home.rawValue) let workNC = createWebViewController(type: ViewType.work.rawValue) diff --git a/AgileWorks/AgileWorks/Main/View/MainTabBarViewController.swift b/AgileWorks/AgileWorks/Main/View/MainTabBarViewController.swift index b422b5c5d322e0dcdd8ba4b6b3bff63ecaf513e3..a11006b7e48a6ccde4a155e9d9dbf1bc2045f132 100644 --- a/AgileWorks/AgileWorks/Main/View/MainTabBarViewController.swift +++ b/AgileWorks/AgileWorks/Main/View/MainTabBarViewController.swift @@ -9,6 +9,27 @@ import UIKit class MainTabBarViewController: UITabBarController { + private var wireframe: MainTabBarViewWireframe! + + var screenPath: String? { + didSet { + wireframe.showApprovalDetail(id: (String(self.screenPath!.suffix(1)))) + } + } + + var notificationData: NotificationData? { + didSet { + guard let data = self.notificationData else { + return + } + wireframe.showDocForm(notificationData: data) + } + } + + func inject(wireframe: MainTabBarViewWireframe) { + self.wireframe = wireframe + } + override func viewDidLoad() { super.viewDidLoad() delegate = self diff --git a/AgileWorks/AgileWorks/Main/Wireframe/MainTabBarViewWireframe.swift b/AgileWorks/AgileWorks/Main/Wireframe/MainTabBarViewWireframe.swift new file mode 100644 index 0000000000000000000000000000000000000000..a3895cc4a8a8edd1269bea84d94ab89da59a3309 --- /dev/null +++ b/AgileWorks/AgileWorks/Main/Wireframe/MainTabBarViewWireframe.swift @@ -0,0 +1,57 @@ +// +// MainTabBarViewWireframe.swift +// AgileWorks +// +// Created by Gk40002148 on 2022/03/15. +// Copyright © 2022 ATLED CORP. All rights reserved. +// + +import UIKit + +protocol MainTabBarViewWireframe: AnyObject { + func showApprovalDetail(id: String) + func showDocForm(notificationData: NotificationData) +} + +class MainTabBarViewWireframeImpl { + weak var viewController: UITabBarController! + + required init(viewController: UITabBarController) { + self.viewController = viewController + } +} + +extension MainTabBarViewWireframeImpl: MainTabBarViewWireframe { + func showApprovalDetail(id: String) { + // ウィジェットからの起動 + // 以下、XPoint時のコード + /* + let approvalDetailVC = ApprovalDetailBuilderImpl().build() + approvalDetailVC.detailId = id + + let mainTab = viewController.viewControllers.first as? UITabBarController + mainTab?.selectedIndex = 0 + + let collection = viewController.traitCollection.horizontalSizeClass + if collection == .compact { + let navigation = mainTab?.viewControllers?.first as? UINavigationController + + navigation?.popToRootViewController(animated: false) + navigation?.pushViewController(approvalDetailVC, animated: true) + } else { + let nav = UINavigationController(rootViewController: approvalDetailVC) + viewController.showDetailViewController(nav, sender: self) + } + */ + } + func showDocForm(notificationData: NotificationData) { + let modalWebVC = WebViewBuilderImpl().buildVC() + // URL , タイトル設定 + modalWebVC.loadURL = notificationData.url + modalWebVC.naviTitle = notificationData.title + modalWebVC.showNotification = true + let nav = UINavigationController(rootViewController: modalWebVC) + nav.modalPresentationStyle = .fullScreen + self.viewController.present(nav, animated: true, completion: nil) + } +} diff --git a/AgileWorks/AgileWorks/WebView/Builder/WebViewBuilder.swift b/AgileWorks/AgileWorks/WebView/Builder/WebViewBuilder.swift index 9c004a63e18a99b6b936a9ff409bcc9323dbaa77..1a15758c8f585dd16f34c88ad2f2ace5994a9fe6 100644 --- a/AgileWorks/AgileWorks/WebView/Builder/WebViewBuilder.swift +++ b/AgileWorks/AgileWorks/WebView/Builder/WebViewBuilder.swift @@ -10,6 +10,7 @@ import UIKit protocol WebViewBuilder { func build() -> UINavigationController + func buildVC() -> WebViewController } struct WebViewBuilderImpl: WebViewBuilder { @@ -22,6 +23,11 @@ struct WebViewBuilderImpl: WebViewBuilder { navigationController.setViewControllers([viewController], animated: false) return navigationController } + + func buildVC() -> WebViewController { + let viewController = storyboard() + return viewController + } } extension WebViewBuilderImpl { diff --git a/AgileWorks/AgileWorks/WebView/View/WebViewController.storyboard b/AgileWorks/AgileWorks/WebView/View/WebViewController.storyboard index b7eb59ce4ccf31eac26e86cca7098e17e77954e1..e5376c3d43e29f6b096e9e07197e06803da4dc3e 100644 --- a/AgileWorks/AgileWorks/WebView/View/WebViewController.storyboard +++ b/AgileWorks/AgileWorks/WebView/View/WebViewController.storyboard @@ -75,18 +75,25 @@ - + + + + + + + + diff --git a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift index ca3043b505ccf53dbcbf54cd85d0b83b51412cc8..41e1b56b7659d1964d8b54fd4328adbcbf3721da 100644 --- a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift +++ b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift @@ -15,6 +15,8 @@ class WebViewController: UIViewController { @IBOutlet private var disablingView: UIView! @IBOutlet private var disconnectLabel: UILabel! @IBOutlet private var checkConnectButton: UIButton! + @IBOutlet private var closeButton: UIBarButtonItem! + @IBOutlet private var menuButton: UIBarButtonItem! var mainWebView: WKWebView! // WebView 表示用 JSESSIONID var sessionId: String! @@ -22,6 +24,7 @@ class WebViewController: UIViewController { var subWebViewStack = SubWebViewStack() var loadURL: String! var naviTitle: String! + var showNotification = false // UserAgent let kCustomUserAgent = "AwMobileApp Safari/605.1.15" var messageHandler: WebViewScriptMessageHandler! @@ -45,6 +48,19 @@ class WebViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() + // naviBarButton 設定 + if self.showNotification { + // 通知からの起動 + self.closeButton.title = localizadString(key: "Close", comment: "") + self.closeButton.isEnabled = true + // メニューボタンを消す + self.menuButton.image = nil + self.menuButton.isEnabled = false + } else { + // 通常起動 + self.closeButton.isEnabled = false + self.menuButton.isEnabled = true + } self.subWebViewStack.eventDelegate = self self.updateSession(isInit: true) @@ -281,6 +297,10 @@ class WebViewController: UIViewController { self.refreshControl.endRefreshing() } + @IBAction private func closeTapped() { + self.dismiss(animated: true, completion: nil) + } + // 接続確認ボタンタップ処理 @IBAction private func checkConnectTapped() { // 2重タップ防止 diff --git a/AgileWorks/AgileWorks/WebView/View/WebViewScriptMessageHandler.swift b/AgileWorks/AgileWorks/WebView/View/WebViewScriptMessageHandler.swift index 1b2c5e8a294450edd4bd8d2ef03b0acff17a5bdc..832845258d40aecfbcc5ee6c57be95ba6eb7321f 100644 --- a/AgileWorks/AgileWorks/WebView/View/WebViewScriptMessageHandler.swift +++ b/AgileWorks/AgileWorks/WebView/View/WebViewScriptMessageHandler.swift @@ -27,13 +27,13 @@ class WebViewScriptMessageHandler: NSObject { } } ] - + private unowned let webViewController: WebViewController - + init(webViewController: WebViewController) { self.webViewController = webViewController } - + func registerHandlers(controller: WKUserContentController) { for message in WebViewScriptMessageHandler.messageHandlers.keys { controller.add(self, name: message)