diff --git a/src/main/kotlin/com/mparticle/kits/RoktConfigExtensions.kt b/src/main/kotlin/com/mparticle/kits/RoktConfigExtensions.kt index a5492a4..45a6ee4 100644 --- a/src/main/kotlin/com/mparticle/kits/RoktConfigExtensions.kt +++ b/src/main/kotlin/com/mparticle/kits/RoktConfigExtensions.kt @@ -1,5 +1,6 @@ package com.mparticle.kits +import com.mparticle.rokt.PlacementOptions import com.mparticle.rokt.RoktConfig import com.rokt.roktsdk.CacheConfig import com.mparticle.rokt.CacheConfig as MpCacheConfig @@ -30,3 +31,8 @@ fun RoktConfig.toRoktSdkConfig(): RoktSdkConfig { return builder.build() } + +fun PlacementOptions.toRoktSdkPlacementOptions(): com.rokt.roktsdk.PlacementOptions = com.rokt.roktsdk.PlacementOptions( + jointSdkSelectPlacements = this.jointSdkSelectPlacements, + dynamicPerformanceMarkers = this.dynamicPerformanceMarkers, +) diff --git a/src/main/kotlin/com/mparticle/kits/RoktKit.kt b/src/main/kotlin/com/mparticle/kits/RoktKit.kt index 4cfc804..bac0ab9 100644 --- a/src/main/kotlin/com/mparticle/kits/RoktKit.kt +++ b/src/main/kotlin/com/mparticle/kits/RoktKit.kt @@ -20,6 +20,7 @@ import com.mparticle.internal.Logger import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.IdentityListener import com.mparticle.kits.KitIntegration.RoktListener +import com.mparticle.rokt.PlacementOptions import com.mparticle.rokt.RoktConfig import com.mparticle.rokt.RoktEmbeddedView import com.rokt.roktsdk.Rokt @@ -166,7 +167,7 @@ class RoktKit : For more details, visit the official documentation: https://docs.rokt.com/developers/integration-guides/android/how-to/adding-a-placement/ */ - override fun execute( + override fun selectPlacements( viewName: String, attributes: Map, mpRoktEventCallback: MpRoktEventCallback?, @@ -174,6 +175,7 @@ class RoktKit : fontTypefaces: MutableMap>?, filterUser: FilteredMParticleUser?, mpRoktConfig: RoktConfig?, + placementOptions: PlacementOptions?, ) { val placeholders: Map>? = placeHolders?.mapNotNull { entry -> val widget = Widget(entry.value.get()?.context as Context) @@ -206,6 +208,7 @@ class RoktKit : placeholders.takeIf { it?.isNotEmpty() == true }, fontTypefaces.takeIf { it?.isNotEmpty() == true }, roktConfig, + placementOptions?.toRoktSdkPlacementOptions(), ) } @@ -348,7 +351,7 @@ class RoktKit : ) { val instance = MParticle.getInstance() deferredAttributes = CompletableDeferred() - instance?.Internal()?.kitManager?.prepareAttributesAsync(attributes) + instance?.Internal()?.kitManager?.roktKitApi?.prepareAttributesAsync(attributes) this.mpRoktEventCallback = mpRoktEventCallback CoroutineScope(Dispatchers.Default).launch { val resultAttributes = deferredAttributes!!.await() diff --git a/src/main/kotlin/com/mparticle/kits/RoktLayout.kt b/src/main/kotlin/com/mparticle/kits/RoktLayout.kt index a088573..0987ea4 100644 --- a/src/main/kotlin/com/mparticle/kits/RoktLayout.kt +++ b/src/main/kotlin/com/mparticle/kits/RoktLayout.kt @@ -6,6 +6,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import com.mparticle.MpRoktEventCallback +import com.mparticle.rokt.PlacementOptions import com.mparticle.rokt.RoktConfig import com.rokt.roktsdk.Rokt @@ -20,9 +21,15 @@ fun RoktLayout( mpRoktEventCallback: MpRoktEventCallback? = null, config: RoktConfig? = null, ) { + var placementOptions: PlacementOptions? = null val instance = RoktKit.instance val resultMapState = remember { mutableStateOf(null) } if (sdkTriggered) { + // Capture the timestamp when the SDK is triggered + placementOptions = PlacementOptions( + jointSdkSelectPlacements = System.currentTimeMillis(), + dynamicPerformanceMarkers = mapOf(), + ) LaunchedEffect(Unit) { instance?.runComposableWithCallback( HashMap(attributes), @@ -42,6 +49,7 @@ fun RoktLayout( onShouldHideLoadingIndicator = { resultMap.callback.onShouldHideLoadingIndicator() }, onUnload = { reason -> resultMap.callback.onUnload(reason) }, config = config?.toRoktSdkConfig(), + placementOptions = placementOptions?.toRoktSdkPlacementOptions(), ) } } diff --git a/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt b/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt index 1a18b5a..d1a9f7d 100644 --- a/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt +++ b/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt @@ -156,7 +156,7 @@ class RoktKitTests { // Act val inputAttributes: Map = mapOf("initial_attr" to "initial_value") - roktKit.execute( + roktKit.selectPlacements( viewName = "test_view", attributes = inputAttributes, mpRoktEventCallback = null, @@ -164,6 +164,7 @@ class RoktKitTests { fontTypefaces = null, filterUser = mockFilterUser, mpRoktConfig = null, + placementOptions = null, ) // Assert @@ -212,7 +213,7 @@ class RoktKitTests { roktKit.configuration = MockKitConfiguration.createKitConfiguration(JSONObject().put("hs", JSONObject())) // Act - roktKit.execute( + roktKit.selectPlacements( viewName = "test_view", attributes = emptyMap(), mpRoktEventCallback = null, @@ -220,6 +221,7 @@ class RoktKitTests { fontTypefaces = null, filterUser = mockFilterUser, mpRoktConfig = null, + placementOptions = null, ) // Assert @@ -260,7 +262,7 @@ class RoktKitTests { roktKit.configuration = MockKitConfiguration.createKitConfiguration(JSONObject().put("hs", JSONObject())) // Act - roktKit.execute( + roktKit.selectPlacements( viewName = "test_view", attributes = emptyMap(), mpRoktEventCallback = null, @@ -268,6 +270,7 @@ class RoktKitTests { fontTypefaces = null, filterUser = mockFilterUser, mpRoktConfig = null, + placementOptions = null, ) // Assert @@ -308,7 +311,7 @@ class RoktKitTests { roktKit.configuration = MockKitConfiguration.createKitConfiguration(JSONObject().put("hs", JSONObject())) // Act - roktKit.execute( + roktKit.selectPlacements( viewName = "test_view", attributes = emptyMap(), mpRoktEventCallback = null, @@ -316,6 +319,7 @@ class RoktKitTests { fontTypefaces = null, filterUser = mockFilterUser, mpRoktConfig = null, + placementOptions = null, ) // Assert @@ -374,7 +378,7 @@ class RoktKitTests { "ShouldFilter" to "testData", ) // Act - roktKit.execute( + roktKit.selectPlacements( viewName = "test", attributes = inputAttributes, mpRoktEventCallback = null, @@ -382,6 +386,7 @@ class RoktKitTests { fontTypefaces = null, filterUser = mockFilterUser, mpRoktConfig = null, + placementOptions = null, ) // Assert @@ -448,7 +453,7 @@ class RoktKitTests { "ShouldFilter" to "testData", ) // Act - roktKit.execute( + roktKit.selectPlacements( viewName = "test", attributes = inputAttributes, mpRoktEventCallback = null, @@ -456,6 +461,7 @@ class RoktKitTests { fontTypefaces = null, filterUser = mockFilterUser, mpRoktConfig = null, + placementOptions = null, ) // Assert @@ -1348,7 +1354,7 @@ class RoktKitTests { // Set MParticle instance to null MParticle.setInstance(null) - roktKit.execute( + roktKit.selectPlacements( viewName = "test_view", attributes = testAttributes, mpRoktEventCallback = null, @@ -1356,6 +1362,7 @@ class RoktKitTests { fontTypefaces = null, filterUser = mockFilterUser, mpRoktConfig = null, + placementOptions = null, ) verify(exactly = 1) {