Skip to content

Commit 89b61f3

Browse files
authored
feat: Add config to Jetpack Compose RoktLayout (#84)
1 parent 10a79c8 commit 89b61f3

4 files changed

Lines changed: 103 additions & 25 deletions

File tree

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.mparticle.kits
2+
3+
import com.mparticle.rokt.RoktConfig
4+
import com.mparticle.rokt.CacheConfig as MpCacheConfig
5+
import com.rokt.roktsdk.CacheConfig
6+
import com.rokt.roktsdk.RoktConfig as RoktSdkConfig
7+
8+
fun MpCacheConfig.toRoktSdkCacheConfig(): CacheConfig = CacheConfig(
9+
cacheDurationInSeconds = this.cacheDurationInSeconds,
10+
cacheAttributes = this.cacheAttributes,
11+
)
12+
13+
fun RoktConfig.toRoktSdkConfig(): RoktSdkConfig {
14+
val colorMode = when (this.colorMode) {
15+
RoktConfig.ColorMode.LIGHT -> RoktSdkConfig.ColorMode.LIGHT
16+
RoktConfig.ColorMode.DARK -> RoktSdkConfig.ColorMode.DARK
17+
RoktConfig.ColorMode.SYSTEM -> RoktSdkConfig.ColorMode.SYSTEM
18+
else -> RoktSdkConfig.ColorMode.SYSTEM
19+
}
20+
21+
val cacheConfig = this.cacheConfig?.toRoktSdkCacheConfig()
22+
23+
val edgeToEdgeDisplay = this.edgeToEdgeDisplay
24+
25+
val builder = RoktSdkConfig.Builder()
26+
.colorMode(colorMode)
27+
.edgeToEdgeDisplay(edgeToEdgeDisplay)
28+
29+
cacheConfig?.let { builder.cacheConfig(it) }
30+
31+
return builder.build()
32+
}

src/main/kotlin/com/mparticle/kits/RoktKit.kt

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import com.mparticle.kits.KitIntegration.IdentityListener
2121
import com.mparticle.kits.KitIntegration.RoktListener
2222
import com.mparticle.rokt.RoktConfig
2323
import com.mparticle.rokt.RoktEmbeddedView
24-
import com.rokt.roktsdk.CacheConfig
2524
import com.rokt.roktsdk.Rokt
2625
import com.rokt.roktsdk.Rokt.RoktCallback
2726
import com.rokt.roktsdk.Rokt.SdkFrameworkType.Android
@@ -197,7 +196,7 @@ class RoktKit :
197196

198197
this.mpRoktEventCallback = mpRoktEventCallback
199198
val finalAttributes = prepareFinalAttributes(filterUser, attributes)
200-
val roktConfig = mpRoktConfig?.let { mapToRoktConfig(it) }
199+
val roktConfig = mpRoktConfig?.toRoktSdkConfig()
201200
Rokt.execute(
202201
viewName,
203202
finalAttributes,
@@ -312,30 +311,7 @@ class RoktKit :
312311
}
313312
}
314313

315-
private fun mapToRoktConfig(config: RoktConfig): com.rokt.roktsdk.RoktConfig {
316-
val colorMode = when (config.colorMode) {
317-
RoktConfig.ColorMode.LIGHT -> com.rokt.roktsdk.RoktConfig.ColorMode.LIGHT
318-
RoktConfig.ColorMode.DARK -> com.rokt.roktsdk.RoktConfig.ColorMode.DARK
319-
RoktConfig.ColorMode.SYSTEM -> com.rokt.roktsdk.RoktConfig.ColorMode.SYSTEM
320-
else -> com.rokt.roktsdk.RoktConfig.ColorMode.SYSTEM
321-
}
322-
323-
val cacheConfig = config.cacheConfig?.cacheDurationInSeconds?.let {
324-
CacheConfig(
325-
cacheDurationInSeconds = it,
326-
cacheAttributes = config.cacheConfig?.cacheAttributes,
327-
)
328-
}
329314

330-
val edgeToEdgeDisplay = config.edgeToEdgeDisplay
331-
332-
val builder = com.rokt.roktsdk.RoktConfig.Builder().colorMode(colorMode).edgeToEdgeDisplay(edgeToEdgeDisplay)
333-
334-
cacheConfig?.let {
335-
builder.cacheConfig(it)
336-
}
337-
return builder.build()
338-
}
339315

340316
private fun addIdentityAttributes(
341317
attributes: MutableMap<String, String>?,

src/main/kotlin/com/mparticle/kits/RoktLayout.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import androidx.compose.runtime.mutableStateOf
66
import androidx.compose.runtime.remember
77
import androidx.compose.ui.Modifier
88
import com.mparticle.MpRoktEventCallback
9+
import com.mparticle.rokt.RoktConfig
910
import com.rokt.roktsdk.Rokt
1011

1112
@Composable
@@ -17,6 +18,7 @@ fun RoktLayout(
1718
location: String,
1819
modifier: Modifier = Modifier,
1920
mpRoktEventCallback: MpRoktEventCallback? = null,
21+
config: RoktConfig? = null,
2022
) {
2123
val instance = RoktKit.instance
2224
val resultMapState = remember { mutableStateOf<RoktResult?>(null) }
@@ -38,6 +40,7 @@ fun RoktLayout(
3840
onShouldShowLoadingIndicator = { resultMap.callback.onShouldShowLoadingIndicator() },
3941
onShouldHideLoadingIndicator = { resultMap.callback.onShouldHideLoadingIndicator() },
4042
onUnload = { reason -> resultMap.callback.onUnload(reason) },
43+
config = config?.toRoktSdkConfig(),
4144
)
4245
}
4346
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.mparticle.kits
2+
3+
import com.mparticle.rokt.CacheConfig
4+
import com.mparticle.rokt.RoktConfig
5+
import com.rokt.roktsdk.RoktConfig as SdkRoktConfig
6+
import io.mockk.every
7+
import io.mockk.mockk
8+
import org.junit.Assert.assertEquals
9+
import org.junit.Test
10+
import org.junit.Assert.assertNotNull
11+
12+
class RoktConfigExtensionsTest {
13+
14+
@Test
15+
fun `toRoktSdkConfig maps color mode and edgeToEdge`() {
16+
val source = mockk<RoktConfig>()
17+
every { source.colorMode } returns RoktConfig.ColorMode.DARK
18+
every { source.edgeToEdgeDisplay } returns true
19+
every { source.cacheConfig } returns null
20+
21+
val result: SdkRoktConfig = source.toRoktSdkConfig()
22+
23+
assertEquals(SdkRoktConfig.ColorMode.DARK, result.colorMode)
24+
assertEquals(true, result.edgeToEdgeDisplay)
25+
}
26+
27+
@Test
28+
fun `toRoktSdkConfig maps cacheConfig when present`() {
29+
val cacheAttributes = mapOf(
30+
"key1" to "value1",
31+
"key2" to "value2",
32+
)
33+
34+
val cacheConfig = mockk<CacheConfig>()
35+
every { cacheConfig.cacheDurationInSeconds } returns 3600
36+
every { cacheConfig.cacheAttributes } returns cacheAttributes
37+
38+
val source = mockk<RoktConfig>()
39+
every { source.colorMode } returns RoktConfig.ColorMode.LIGHT
40+
every { source.edgeToEdgeDisplay } returns false
41+
every { source.cacheConfig } returns cacheConfig
42+
43+
val result: SdkRoktConfig = source.toRoktSdkConfig()
44+
45+
assertEquals(SdkRoktConfig.ColorMode.LIGHT, result.colorMode)
46+
assertEquals(false, result.edgeToEdgeDisplay)
47+
assertNotNull(result.cacheConfig)
48+
assertEquals(3600L, result.cacheConfig?.cacheDurationInSeconds)
49+
assertEquals(cacheAttributes, result.cacheConfig?.cacheAttributes)
50+
}
51+
52+
@Test
53+
fun `toRoktSdkCacheConfig maps fields`() {
54+
val cacheAttributes = mapOf(
55+
"a" to "1",
56+
"b" to "2",
57+
)
58+
val mpCache = mockk<CacheConfig>()
59+
every { mpCache.cacheDurationInSeconds } returns 120
60+
every { mpCache.cacheAttributes } returns cacheAttributes
61+
62+
val sdkCache = mpCache.toRoktSdkCacheConfig()
63+
64+
assertEquals(120, sdkCache.cacheDurationInSeconds)
65+
assertEquals(cacheAttributes, sdkCache.cacheAttributes)
66+
}
67+
}

0 commit comments

Comments
 (0)