diff --git a/Mastodon.xcodeproj/project.pbxproj b/Mastodon.xcodeproj/project.pbxproj index c9e7080f7..7abc2dc80 100644 --- a/Mastodon.xcodeproj/project.pbxproj +++ b/Mastodon.xcodeproj/project.pbxproj @@ -145,6 +145,7 @@ D8318A882A4468D300C0FB73 /* NotificationSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8318A872A4468D300C0FB73 /* NotificationSettingsViewController.swift */; }; D8318A8A2A4468DC00C0FB73 /* AboutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8318A892A4468DC00C0FB73 /* AboutViewController.swift */; }; D8363B1629469CE200A74079 /* OnboardingNextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8363B1529469CE200A74079 /* OnboardingNextView.swift */; }; + D84FA0932AE6915800987F47 /* MBProgressHUD in Frameworks */ = {isa = PBXBuildFile; productRef = D84FA0922AE6915800987F47 /* MBProgressHUD */; }; D852C23C2AC5D02C00309232 /* AboutInstanceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D852C23B2AC5D02C00309232 /* AboutInstanceViewController.swift */; }; D852C23E2AC5D03300309232 /* InstanceRulesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D852C23D2AC5D03300309232 /* InstanceRulesViewController.swift */; }; D87364F92AE28DB500C8F919 /* Kanna in Frameworks */ = {isa = PBXBuildFile; productRef = D87364F82AE28DB500C8F919 /* Kanna */; }; @@ -1290,6 +1291,7 @@ files = ( 357FEEAF29523D470021C9DC /* MastodonSDKDynamic in Frameworks */, DBF96326262EC0A6001D8D25 /* AuthenticationServices.framework in Frameworks */, + D84FA0932AE6915800987F47 /* MBProgressHUD in Frameworks */, D87364F92AE28DB500C8F919 /* Kanna in Frameworks */, 71458AF57697DB405CFEC37C /* Pods_Mastodon.framework in Frameworks */, ); @@ -3144,6 +3146,7 @@ packageProductDependencies = ( 357FEEAE29523D470021C9DC /* MastodonSDKDynamic */, D87364F82AE28DB500C8F919 /* Kanna */, + D84FA0922AE6915800987F47 /* MBProgressHUD */, ); productName = Mastodon; productReference = DB427DD225BAA00100D1B89D /* Mastodon.app */; @@ -3328,6 +3331,7 @@ packageReferences = ( 2AB501192992322500346092 /* XCRemoteSwiftPackageReference "LightChart" */, D87364F72AE28DB500C8F919 /* XCRemoteSwiftPackageReference "Kanna" */, + D84FA0912AE6915800987F47 /* XCRemoteSwiftPackageReference "MBProgressHUD" */, ); productRefGroup = DB427DD325BAA00100D1B89D /* Products */; projectDirPath = ""; @@ -5431,6 +5435,14 @@ kind = branch; }; }; + D84FA0912AE6915800987F47 /* XCRemoteSwiftPackageReference "MBProgressHUD" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/jdg/MBProgressHUD.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.2.0; + }; + }; D87364F72AE28DB500C8F919 /* XCRemoteSwiftPackageReference "Kanna" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/tid-kijyun/Kanna.git"; @@ -5475,6 +5487,11 @@ isa = XCSwiftPackageProductDependency; productName = MastodonSDKDynamic; }; + D84FA0922AE6915800987F47 /* MBProgressHUD */ = { + isa = XCSwiftPackageProductDependency; + package = D84FA0912AE6915800987F47 /* XCRemoteSwiftPackageReference "MBProgressHUD" */; + productName = MBProgressHUD; + }; D87364F82AE28DB500C8F919 /* Kanna */ = { isa = XCSwiftPackageProductDependency; package = D87364F72AE28DB500C8F919 /* XCRemoteSwiftPackageReference "Kanna" */; diff --git a/Mastodon.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Mastodon.xcworkspace/xcshareddata/swiftpm/Package.resolved index de3b63256..ec05f44da 100644 --- a/Mastodon.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Mastodon.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -82,6 +82,15 @@ "version": null } }, + { + "package": "MBProgressHUD", + "repositoryURL": "https://github.com/jdg/MBProgressHUD.git", + "state": { + "branch": null, + "revision": "bca42b801100b2b3a4eda0ba8dd33d858c780b0d", + "version": "1.2.0" + } + }, { "package": "MetaTextKit", "repositoryURL": "https://github.com/TwidereProject/MetaTextKit.git", diff --git a/Mastodon/Coordinator/SceneCoordinator.swift b/Mastodon/Coordinator/SceneCoordinator.swift index 223ac4588..f821aea1f 100644 --- a/Mastodon/Coordinator/SceneCoordinator.swift +++ b/Mastodon/Coordinator/SceneCoordinator.swift @@ -13,6 +13,7 @@ import MastodonSDK import MastodonCore import MastodonAsset import MastodonLocalization +import MBProgressHUD final public class SceneCoordinator { @@ -28,7 +29,8 @@ final public class SceneCoordinator { private(set) weak var tabBarController: MainTabBarController! private(set) weak var splitViewController: RootSplitViewController? - + private(set) weak var rootViewController: UIViewController? + private(set) var secondaryStackHashValues = Set() var childCoordinator: Coordinator? @@ -198,7 +200,7 @@ extension SceneCoordinator { case safari(url: URL) case alertController(alertController: UIAlertController) case activityViewController(activityViewController: UIActivityViewController, sourceView: UIView?, barButtonItem: UIBarButtonItem?) - + var isOnboarding: Bool { switch self { case .welcome, @@ -239,6 +241,7 @@ extension SceneCoordinator { rootViewController = splitViewController } sceneDelegate.window?.rootViewController = rootViewController // base: main + self.rootViewController = rootViewController if _authContext == nil { // entry #1: welcome DispatchQueue.main.async { @@ -559,13 +562,30 @@ private extension SceneCoordinator { return viewController } - + private func setupDependency(for needs: NeedsDependency?) { needs?.context = appContext needs?.coordinator = self } } +//MARK: - Loading + +public extension SceneCoordinator { + func showLoading() { + guard let rootViewController else { return } + + MBProgressHUD.showAdded(to: rootViewController.view, animated: true) + } + + @MainActor + func hideLoading() { + guard let rootViewController else { return } + + MBProgressHUD.hide(for: rootViewController.view, animated: true) + } +} + //MARK: - MastodonLoginViewControllerDelegate extension SceneCoordinator: MastodonLoginViewControllerDelegate {