diff --git a/compose/build.gradle.kts b/compose/build.gradle.kts
index f80a46d..5f4e82b 100644
--- a/compose/build.gradle.kts
+++ b/compose/build.gradle.kts
@@ -51,16 +51,17 @@ kover {
classes(
"com.naturecurly.deck.compose.DeckKt",
"com.naturecurly.deck.compose.DeckComposeContainerUi",
- "com.naturecurly.deck.compose.DeckInitializer",
"com.naturecurly.deck.compose.DeckScope",
"com.naturecurly.deck.compose.DeckScopeImpl",
+ "com.naturecurly.deck.compose.di.*",
+ "hilt_aggregated_deps.*",
)
}
}
verify {
rule {
minBound(95, CoverageUnit.LINE)
- minBound(80, CoverageUnit.BRANCH)
+ minBound(75, CoverageUnit.BRANCH)
}
}
}
@@ -69,7 +70,6 @@ kover {
dependencies {
api(projects.core)
implementation(platform(libs.androidx.compose.bom))
- implementation(libs.androidx.compose.runtime)
implementation(libs.androidx.compose.ui)
implementation(libs.hilt)
ksp(libs.hilt.compiler)
diff --git a/compose/src/main/AndroidManifest.xml b/compose/src/main/AndroidManifest.xml
deleted file mode 100644
index 69087bf..0000000
--- a/compose/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/compose/src/main/java/com/naturecurly/deck/compose/WharfImpl.kt b/compose/src/main/java/com/naturecurly/deck/compose/WharfImpl.kt
index 3a43369..4cfe387 100644
--- a/compose/src/main/java/com/naturecurly/deck/compose/WharfImpl.kt
+++ b/compose/src/main/java/com/naturecurly/deck/compose/WharfImpl.kt
@@ -23,8 +23,6 @@
package com.naturecurly.deck.compose
import android.app.Application
-import android.content.Context
-import com.naturecurly.deck.DeckContainer
import com.naturecurly.deck.DeckProvider
import com.naturecurly.deck.Wharf
import com.naturecurly.deck.compose.log.DeckLog
@@ -34,36 +32,31 @@ import kotlin.reflect.KClass
class WharfImpl : Wharf() {
private var application: Application? = null
- // synchronizedMap is used to make the map thread-safe?
private val entryPoints: MutableMap, Class> = mutableMapOf()
- internal fun init(context: Context) {
+ internal fun init(app: Application) {
entryPoints.clear()
deckEntry.clear()
runCatching {
entryPoints.putAll(
- EntryPoints.get(context, DeckDependenciesEntryPoint::class.java).dependencies(),
+ EntryPoints.get(app, DeckDependenciesEntryPoint::class.java).dependencies(),
)
}.onFailure {
DeckLog.e("WharfImpl initialization failed", it)
return
}
- if (context is Application) {
- application = context
- } else {
- DeckLog.w("Context is not an instance of Application")
- }
+ application = app
}
@Suppress("UNCHECKED_CAST")
- override fun registerNewProvider(
+ override fun registerNewProvider(
providerClass: KClass>,
providerIdentity: Int,
) {
entryPoints[providerClass.java]?.let { dep ->
application?.let { app ->
val dependencies = EntryPoints.get(app, dep)
- val containers = dependencies.containers() as Set>
+ val containers = dependencies.containers()
deckEntry.addProvider(providerIdentity)
containers.forEach {
deckEntry.addContainer(
diff --git a/core/src/main/java/com/naturecurly/deck/WharfLocal.kt b/compose/src/main/java/com/naturecurly/deck/compose/di/WharfModule.kt
similarity index 62%
rename from core/src/main/java/com/naturecurly/deck/WharfLocal.kt
rename to compose/src/main/java/com/naturecurly/deck/compose/di/WharfModule.kt
index d81bcf7..b71bc57 100644
--- a/core/src/main/java/com/naturecurly/deck/WharfLocal.kt
+++ b/compose/src/main/java/com/naturecurly/deck/compose/di/WharfModule.kt
@@ -20,13 +20,29 @@
* SOFTWARE.
*/
-package com.naturecurly.deck
+package com.naturecurly.deck.compose.di
-internal object WharfLocal {
- private lateinit var wharf: Wharf
- internal fun init(wharf: Wharf) {
- this.wharf = wharf
+import android.app.Application
+import com.naturecurly.deck.Wharf
+import com.naturecurly.deck.WharfAccess
+import com.naturecurly.deck.WharfAccessImpl
+import com.naturecurly.deck.compose.WharfImpl
+import dagger.Module
+import dagger.Provides
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
+import javax.inject.Singleton
+
+@Module
+@InstallIn(SingletonComponent::class)
+class WharfModule {
+ @Provides
+ @Singleton
+ fun provideWharf(app: Application): Wharf = WharfImpl().apply {
+ init(app)
}
- internal fun get() = wharf
+ @Provides
+ @Singleton
+ fun provideWharfAccess(wharf: Wharf): WharfAccess = WharfAccessImpl(wharf)
}
diff --git a/compose/src/test/kotlin/com/naturecurly/deck/compose/WharfImplTest.kt b/compose/src/test/kotlin/com/naturecurly/deck/compose/WharfImplTest.kt
index 626a8f9..1aee9f9 100644
--- a/compose/src/test/kotlin/com/naturecurly/deck/compose/WharfImplTest.kt
+++ b/compose/src/test/kotlin/com/naturecurly/deck/compose/WharfImplTest.kt
@@ -23,12 +23,14 @@
package com.naturecurly.deck.compose
import android.app.Application
-import android.content.Context
import android.util.Log
import com.naturecurly.deck.ContainerEvent
import com.naturecurly.deck.DeckContainer
import com.naturecurly.deck.DeckContainerUi
import com.naturecurly.deck.DeckProvider
+import com.naturecurly.deck.Wharf
+import com.naturecurly.deck.WharfAccess
+import com.naturecurly.deck.WharfAccessImpl
import com.naturecurly.deck.compose.log.DeckLog
import dagger.hilt.EntryPoints
import io.mockk.every
@@ -92,30 +94,6 @@ class WharfImplTest {
verify { DeckLog.e(any(), any()) }
}
- @Test
- fun `verify WharfImpl with non Application context`() {
- // Given
- val mockedContext: Context = mockk(relaxed = true)
- val entryPoints: DeckDependenciesEntryPoint = object : DeckDependenciesEntryPoint {
- override fun dependencies(): Map, @JvmSuppressWildcards Class> {
- return mapOf()
- }
- }
- mockkStatic(EntryPoints::class)
- every {
- EntryPoints.get(
- mockedContext,
- DeckDependenciesEntryPoint::class.java,
- )
- } returns entryPoints
- // When
- val wharf = WharfImpl()
- wharf.init(mockedContext)
- // Then
- verify(exactly = 0) { DeckLog.e(any(), any()) }
- verify { DeckLog.w(any()) }
- }
-
@Test
fun `verify WharfImpl registerNewProvider`() {
// Given
@@ -142,7 +120,7 @@ class WharfImplTest {
// When
val wharf = WharfImpl()
wharf.init(mockedContext)
- wharf.registerNewProvider(DeckProviderTest::class, 123)
+ wharf.registerNewProvider(DeckProviderTest::class, 123)
// Then
verify(exactly = 0) { DeckLog.e(any(), any()) }
verify(exactly = 0) { DeckLog.w(any()) }
@@ -153,10 +131,12 @@ class WharfImplTest {
// Given
// When
val wharf = WharfImpl()
- wharf.registerNewProvider(DeckProviderTest::class, 123)
+ wharf.registerNewProvider(DeckProviderTest::class, 123)
}
- class DeckProviderTest : DeckProvider {
+ class DeckProviderTest(wharf: Wharf) :
+ DeckProvider,
+ WharfAccess by WharfAccessImpl(wharf) {
override fun onContainerEvent(containerEvent: ContainerEvent) {
}
}
diff --git a/core/src/main/java/com/naturecurly/deck/DeckProvider.kt b/core/src/main/java/com/naturecurly/deck/DeckProvider.kt
index 1d9d8ad..a3cbf69 100644
--- a/core/src/main/java/com/naturecurly/deck/DeckProvider.kt
+++ b/core/src/main/java/com/naturecurly/deck/DeckProvider.kt
@@ -26,14 +26,14 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.merge
import kotlinx.coroutines.launch
-interface DeckProvider