Make iOS application work

This commit is contained in:
Syer10
2023-12-01 22:08:05 -05:00
parent c5c83b5e51
commit 0b4e201808
7 changed files with 68 additions and 66 deletions

View File

@@ -1,3 +1,5 @@
@file:OptIn(ExperimentalForeignApi::class, BetaInteropApi::class)
package ca.gosyer.jui.ios
import androidx.compose.animation.Crossfade
@@ -24,11 +26,13 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.window.Application
import androidx.compose.ui.window.ComposeUIViewController
import ca.gosyer.jui.ui.base.theme.AppTheme
import ca.gosyer.jui.ui.main.MainMenu
import ca.gosyer.jui.uicore.vm.ContextWrapper
import ca.gosyer.jui.uicore.vm.Length
import kotlinx.cinterop.BetaInteropApi
import kotlinx.cinterop.ExperimentalForeignApi
import kotlinx.cinterop.autoreleasepool
import kotlinx.cinterop.cstr
import kotlinx.cinterop.memScoped
@@ -37,7 +41,16 @@ import kotlinx.cinterop.useContents
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import org.lighthousegames.logging.FixedLogLevel
import org.lighthousegames.logging.KmLog
import org.lighthousegames.logging.KmLogging
import org.lighthousegames.logging.LogFactory
import org.lighthousegames.logging.LogLevel
import org.lighthousegames.logging.LogLevelController
import org.lighthousegames.logging.Logger
import org.lighthousegames.logging.TagProvider
import platform.Foundation.NSStringFromClass
import platform.Foundation.NSThread
import platform.UIKit.UIApplication
import platform.UIKit.UIApplicationDelegateProtocol
import platform.UIKit.UIApplicationDelegateProtocolMeta
@@ -45,77 +58,41 @@ import platform.UIKit.UIApplicationMain
import platform.UIKit.UIResponder
import platform.UIKit.UIResponderMeta
import platform.UIKit.UIScreen
import platform.UIKit.UIViewController
import platform.UIKit.UIWindow
import platform.UIKit.safeAreaInsets
import kotlin.time.Duration
import kotlin.time.Duration.Companion.seconds
fun main() {
val args = emptyArray<String>()
memScoped {
val argc = args.size + 1
val argv = (arrayOf("skikoApp") + args).map { it.cstr.ptr }.toCValues()
autoreleasepool {
UIApplicationMain(argc, argv, null, NSStringFromClass(SkikoAppDelegate))
fun initializeApplication(): UIViewController {
val appComponent = AppComponent.getInstance(ContextWrapper())
appComponent.migrations.runMigrations()
appComponent.appMigrations.runMigrations()
appComponent.downloadService.init()
appComponent.libraryUpdateService.init()
val uiHooks = appComponent.hooks
val context = appComponent.context
return ComposeUIViewController {
CompositionLocalProvider(*uiHooks) {
AppTheme {
Box(Modifier.fillMaxSize()) {
MainMenu()
ToastOverlay(
modifier = Modifier
.align(Alignment.BottomCenter)
.padding(bottom = 64.dp),
context = context,
)
}
}
}
}
}
class SkikoAppDelegate
@OverrideInit
constructor() : UIResponder(), UIApplicationDelegateProtocol {
companion object : UIResponderMeta(), UIApplicationDelegateProtocolMeta
private var _window: UIWindow? = null
override fun window() = _window
override fun setWindow(window: UIWindow?) {
_window = window
}
private val context = ContextWrapper()
private val appComponent = AppComponent.getInstance(context)
init {
appComponent.migrations.runMigrations()
appComponent.appMigrations.runMigrations()
appComponent.downloadService.init()
appComponent.libraryUpdateService.init()
}
val uiHooks = appComponent.hooks
override fun application(
application: UIApplication,
didFinishLaunchingWithOptions: Map<Any?, *>?,
): Boolean {
window = UIWindow(frame = UIScreen.mainScreen.bounds).apply {
val insets = safeAreaInsets.useContents {
WindowInsets(left.dp, top.dp, right.dp, bottom.dp)
}
rootViewController = Application("Tachidesk-JUI") {
CompositionLocalProvider(*uiHooks) {
AppTheme {
Box(Modifier.fillMaxSize().windowInsetsPadding(insets)) {
MainMenu()
ToastOverlay(
modifier = Modifier
.align(Alignment.BottomCenter)
.padding(bottom = 64.dp),
context = context,
)
}
}
}
}
makeKeyAndVisible()
}
return true
}
}
@Composable
fun ToastOverlay(
modifier: Modifier,