From 85e7d7ad486afec9a86afc6a2590e291743be63e Mon Sep 17 00:00:00 2001 From: PJ Date: Sun, 26 Apr 2026 16:05:58 +0700 Subject: [PATCH] refactor(folio): build AppGraph from platform entry points MainActivity (Android) and MainViewController (iOS) now own the suspend DriverFactory.create() and feed the resulting LedgerDatabase into Metro's createGraphFactory(). --- .../androidApp/src/main/kotlin/app/folio/MainActivity.kt | 8 +++++++- .../src/iosMain/kotlin/app/folio/MainViewController.kt | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/examples/folio/app/androidApp/src/main/kotlin/app/folio/MainActivity.kt b/examples/folio/app/androidApp/src/main/kotlin/app/folio/MainActivity.kt index 6d4d206..c5409ea 100644 --- a/examples/folio/app/androidApp/src/main/kotlin/app/folio/MainActivity.kt +++ b/examples/folio/app/androidApp/src/main/kotlin/app/folio/MainActivity.kt @@ -4,11 +4,17 @@ import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import app.folio.core.data.DriverFactory +import app.folio.db.LedgerDatabase +import app.folio.di.AppGraph +import dev.zacsweers.metro.createGraphFactory class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val driverFactory = DriverFactory(applicationContext) - setContent { App(driverFactory) } + val graphFactory = createGraphFactory() + setContent { + App(graphBuilder = { graphFactory.create(LedgerDatabase(driverFactory.create())) }) + } } } diff --git a/examples/folio/app/shared/src/iosMain/kotlin/app/folio/MainViewController.kt b/examples/folio/app/shared/src/iosMain/kotlin/app/folio/MainViewController.kt index ef2a4aa..0f3cbeb 100644 --- a/examples/folio/app/shared/src/iosMain/kotlin/app/folio/MainViewController.kt +++ b/examples/folio/app/shared/src/iosMain/kotlin/app/folio/MainViewController.kt @@ -2,7 +2,10 @@ package app.folio import androidx.compose.ui.window.ComposeUIViewController import app.folio.core.data.DriverFactory +import app.folio.db.LedgerDatabase +import app.folio.di.AppGraph import app.folio.ui.IosBackGesture +import dev.zacsweers.metro.createGraphFactory import kotlinx.cinterop.BetaInteropApi import kotlinx.cinterop.ExperimentalForeignApi import kotlinx.cinterop.ObjCAction @@ -28,7 +31,10 @@ private val backGestureTarget = BackGestureTarget() @OptIn(ExperimentalForeignApi::class) fun MainViewController(): UIViewController { val driverFactory = DriverFactory() - val vc = ComposeUIViewController { App(driverFactory) } + val graphFactory = createGraphFactory() + val vc = ComposeUIViewController { + App(graphBuilder = { graphFactory.create(LedgerDatabase(driverFactory.create())) }) + } val gesture = UIScreenEdgePanGestureRecognizer( target = backGestureTarget, action = NSSelectorFromString("handleGesture:"),