@@ -6,6 +6,7 @@ import android.content.pm.PackageInfo
66import android.content.pm.PackageManager
77import android.graphics.Typeface
88import android.os.Build
9+ import androidx.compose.runtime.Composable
910import com.mparticle.BuildConfig
1011import com.mparticle.MParticle
1112import com.mparticle.MParticle.IdentityType
@@ -23,15 +24,20 @@ import com.mparticle.rokt.RoktConfig
2324import com.mparticle.rokt.RoktEmbeddedView
2425import com.rokt.roktsdk.CacheConfig
2526import com.rokt.roktsdk.Rokt
27+ import com.rokt.roktsdk.Rokt.RoktCallback
2628import com.rokt.roktsdk.Rokt.SdkFrameworkType.Android
2729import com.rokt.roktsdk.Rokt.SdkFrameworkType.Cordova
2830import com.rokt.roktsdk.Rokt.SdkFrameworkType.Flutter
2931import com.rokt.roktsdk.Rokt.SdkFrameworkType.ReactNative
3032import com.rokt.roktsdk.RoktEvent
3133import com.rokt.roktsdk.RoktWidgetDimensionCallBack
3234import com.rokt.roktsdk.Widget
35+ import kotlinx.coroutines.CompletableDeferred
36+ import kotlinx.coroutines.CoroutineScope
37+ import kotlinx.coroutines.Dispatchers
3338import kotlinx.coroutines.flow.Flow
3439import kotlinx.coroutines.flow.map
40+ import kotlinx.coroutines.launch
3541import java.lang.ref.WeakReference
3642import java.math.BigDecimal
3743
@@ -49,10 +55,13 @@ class RoktKit : KitIntegration(), CommerceListener, IdentityListener, RoktListen
4955
5056 override fun getInstance (): RoktKit = this
5157
58+ private var deferredAttributes: CompletableDeferred <Map <String , String >>? = null
59+
5260 public override fun onKitCreate (
5361 settings : Map <String , String >,
5462 ctx : Context
5563 ): List <ReportingMessage > {
64+ register(this )
5665 applicationContext = ctx.applicationContext
5766 val roktTagId = settings[ROKT_ACCOUNT_ID ]
5867 if (KitUtils .isEmpty(roktTagId)) {
@@ -189,6 +198,23 @@ class RoktKit : KitIntegration(), CommerceListener, IdentityListener, RoktListen
189198 }?.toMap()
190199
191200 this .mpRoktEventCallback = mpRoktEventCallback
201+ val finalAttributes = prepareFinalAttributes(filterUser, attributes)
202+ val roktConfig = mpRoktConfig?.let { mapToRoktConfig(it) }
203+ Rokt .execute(
204+ viewName,
205+ finalAttributes,
206+ this ,
207+ // Pass placeholders and fontTypefaces only if they are not empty or null
208+ placeholders.takeIf { it?.isNotEmpty() == true },
209+ fontTypefaces.takeIf { it?.isNotEmpty() == true },
210+ roktConfig
211+ )
212+ }
213+
214+ private fun prepareFinalAttributes (
215+ filterUser : FilteredMParticleUser ? ,
216+ attributes : Map <String , String >?
217+ ): Map <String , String > {
192218 val finalAttributes = mutableMapOf<String , String >()
193219 filterUser?.userAttributes?.let { userAttrs ->
194220 for ((key, value) in userAttrs) {
@@ -208,16 +234,9 @@ class RoktKit : KitIntegration(), CommerceListener, IdentityListener, RoktListen
208234 finalAttributes.put(SANDBOX_MODE_ROKT , value)
209235 }
210236 verifyHashedEmail(finalAttributes)
211- val roktConfig = mpRoktConfig?.let { mapToRoktConfig(it) }
212- Rokt .execute(
213- viewName,
214- finalAttributes,
215- this ,
216- // Pass placeholders and fontTypefaces only if they are not empty or null
217- placeholders.takeIf { it?.isNotEmpty() == true },
218- fontTypefaces.takeIf { it?.isNotEmpty() == true },
219- roktConfig
220- )
237+
238+
239+ return finalAttributes
221240 }
222241
223242 override fun events (identifier : String ): Flow <com.mparticle.RoktEvent > {
@@ -277,6 +296,26 @@ class RoktKit : KitIntegration(), CommerceListener, IdentityListener, RoktListen
277296 Rokt .close()
278297 }
279298
299+ override fun callRoktComposable (attributes : MutableMap <String , String >, user : FilteredMParticleUser ? ) {
300+ val finalAttributes = prepareFinalAttributes(user, attributes)
301+ deferredAttributes?.complete(finalAttributes)
302+ }
303+
304+ fun ComposableTest (
305+ attributes : Map <String , String >,
306+ mpRoktEventCallback : MpRoktEventCallback ? ,
307+ onResult : (Map <String , String >, RoktCallback ) -> Unit
308+ ) {
309+ val instance = MParticle .getInstance()
310+ deferredAttributes = CompletableDeferred ()
311+ instance?.Internal ()?.kitManager?.callExecuteForComposable(attributes)
312+ this .mpRoktEventCallback = mpRoktEventCallback
313+ CoroutineScope (Dispatchers .Default ).launch {
314+ val resultAttributes = deferredAttributes!! .await()
315+ onResult(resultAttributes, this @RoktKit)
316+ }
317+ }
318+
280319 private fun mapToRoktConfig (config : RoktConfig ): com.rokt.roktsdk.RoktConfig {
281320 val colorMode = when (config.colorMode) {
282321 RoktConfig .ColorMode .LIGHT -> com.rokt.roktsdk.RoktConfig .ColorMode .LIGHT
@@ -371,6 +410,13 @@ class RoktKit : KitIntegration(), CommerceListener, IdentityListener, RoktListen
371410 }
372411
373412 companion object {
413+ private var instance: RoktKit ? = null
414+
415+ fun register (kit : RoktKit ) {
416+ instance = kit
417+ }
418+
419+ fun get (): RoktKit ? = instance
374420 const val NAME = " Rokt"
375421 const val ROKT_ACCOUNT_ID = " accountId"
376422 const val MPID = " mpid"
0 commit comments