diff --git a/app-ios-shared/src/commonMain/kotlin/io/github/droidkaigi/confsched/shared/IosComposeKaigiApp.kt b/app-ios-shared/src/commonMain/kotlin/io/github/droidkaigi/confsched/shared/IosComposeKaigiApp.kt index 20ceecfac..efbbd3377 100644 --- a/app-ios-shared/src/commonMain/kotlin/io/github/droidkaigi/confsched/shared/IosComposeKaigiApp.kt +++ b/app-ios-shared/src/commonMain/kotlin/io/github/droidkaigi/confsched/shared/IosComposeKaigiApp.kt @@ -79,11 +79,18 @@ import platform.UIKit.UIApplication import platform.UIKit.UIViewController import platform.darwin.NSObject +private object ExternalNavControllerLink { + var onLicenseScreenRequest: (() -> Unit)? = null +} + @OptIn(ExperimentalMaterial3WindowSizeClassApi::class) @Suppress("UNUSED") fun kaigiAppController( repositories: Repositories, + onLicenseScreenRequest: () -> Unit, ): UIViewController = ComposeUIViewController { + ExternalNavControllerLink.onLicenseScreenRequest = onLicenseScreenRequest + CompositionLocalProvider( LocalRepositories provides repositories.map ) { @@ -207,7 +214,7 @@ private fun NavGraphBuilder.mainScreen( } AboutItem.Contributors -> navController.navigate(contributorsScreenRoute) - AboutItem.License -> {} //externalNavController.navigateToLicenseScreen() + AboutItem.License -> externalNavController.navigateToLicenseScreen() AboutItem.Medium -> externalNavController.navigate( url = "https://medium.com/droidkaigi", ) @@ -295,6 +302,10 @@ private class ExternalNavController( UIApplication.sharedApplication.openURL(nsUrl) } + fun navigateToLicenseScreen() { + ExternalNavControllerLink.onLicenseScreenRequest?.invoke() + } + /** * Navigate to Calendar Registration */ diff --git a/app-ios/Package.swift b/app-ios/Package.swift index 22f541ef1..3c6d71b5a 100644 --- a/app-ios/Package.swift +++ b/app-ios/Package.swift @@ -88,7 +88,8 @@ let package = Package( .firebaseAuth, .firebaseRemoteConfig, .tca, - .model + .model, + .licenseList, ] ), diff --git a/app-ios/Sources/KMPClient/Views/KmpAppComposeViewControllerWrapper.swift b/app-ios/Sources/KMPClient/Views/KmpAppComposeViewControllerWrapper.swift index e70dae3f4..b5c64b8d7 100644 --- a/app-ios/Sources/KMPClient/Views/KmpAppComposeViewControllerWrapper.swift +++ b/app-ios/Sources/KMPClient/Views/KmpAppComposeViewControllerWrapper.swift @@ -1,4 +1,5 @@ import SwiftUI +import LicenseList @preconcurrency import shared public struct KmpAppComposeViewControllerWrapper: UIViewControllerRepresentable { @@ -8,10 +9,23 @@ public struct KmpAppComposeViewControllerWrapper: UIViewControllerRepresentable let container = Container.shared let repositories: any Repositories = container.get(type: (any Repositories).self) return IosComposeKaigiAppKt.kaigiAppController( - repositories: repositories + repositories: repositories, + onLicenseScreenRequest: { + openLicenseScreen() + } ) } public func updateUIViewController(_ uiViewController: UIViewController, context: Context) { } + + private func openLicenseScreen() { + if let windowScene = UIApplication.shared.connectedScenes.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene { + if let rootViewController = windowScene.windows.first?.rootViewController { + let licenseView = LicenseListView() + let hostingController = UIHostingController(rootView: licenseView) + rootViewController.present(hostingController, animated: true, completion: nil) + } + } + } }