Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion kits/rokt/rokt/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ dependencies {
implementation 'androidx.annotation:annotation:1.5.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4'
implementation 'androidx.compose.runtime:runtime'
api 'com.rokt:roktsdk:4.14.0'
api 'com.rokt:roktsdk:5.1.0'

testImplementation files('libs/java-json.jar')
testImplementation 'com.squareup.assertj:assertj-android:1.2.0'
Expand Down
12 changes: 4 additions & 8 deletions kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/Rokt.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import com.mparticle.MParticle
import com.mparticle.internal.KitManager
import com.mparticle.internal.Logger
import com.rokt.roktsdk.PlacementOptions
import com.rokt.roktsdk.Rokt.RoktCallback
import com.rokt.roktsdk.RoktConfig
import com.rokt.roktsdk.RoktEvent
import kotlinx.coroutines.flow.Flow
Expand All @@ -21,7 +20,6 @@ class Rokt internal constructor(private val mKitManager: KitManager) {
*
* @param identifier The placement identifier
* @param attributes User attributes to pass to Rokt
* @param callbacks Optional callback for Rokt events
* @param embeddedViews Optional map of embedded view placeholders
* @param fontTypefaces Optional map of font typefaces
* @param config Optional Rokt configuration
Expand All @@ -30,7 +28,6 @@ class Rokt internal constructor(private val mKitManager: KitManager) {
fun selectPlacements(
identifier: String,
attributes: Map<String, String>,
callbacks: RoktCallback? = null,
embeddedViews: Map<String, WeakReference<RoktEmbeddedView>>? = null,
fontTypefaces: Map<String, WeakReference<Typeface>>? = null,
config: RoktConfig? = null,
Expand All @@ -44,7 +41,6 @@ class Rokt internal constructor(private val mKitManager: KitManager) {
roktListener = roktListener,
viewName = identifier,
attributes = HashMap(attributes),
roktCallback = callbacks,
placeHolders = embeddedViews,
fontTypefaces = fontTypefaces,
config = config,
Expand All @@ -71,13 +67,13 @@ class Rokt internal constructor(private val mKitManager: KitManager) {
/**
* Notify Rokt that a purchase has been finalized.
*
* @param placementId The placement identifier
* @param identifier The placement identifier
* @param catalogItemId The catalog item identifier
* @param status Whether the purchase was successful
* @param success Whether the purchase was successful
*/
fun purchaseFinalized(placementId: String, catalogItemId: String, status: Boolean) {
fun purchaseFinalized(identifier: String, catalogItemId: String, success: Boolean) {
if (isEnabled()) {
resolveRoktKit()?.second?.purchaseFinalized(placementId, catalogItemId, status)
resolveRoktKit()?.second?.purchaseFinalized(identifier, catalogItemId, success)
}
}

Expand Down
62 changes: 14 additions & 48 deletions kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktKit.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import com.mparticle.kits.KitIntegration.IdentityListener
import com.mparticle.kits.KitIntegration.RoktListener
import com.rokt.roktsdk.PlacementOptions
import com.rokt.roktsdk.Rokt
import com.rokt.roktsdk.Rokt.RoktCallback
import com.rokt.roktsdk.Rokt.SdkFrameworkType.Android
import com.rokt.roktsdk.Rokt.SdkFrameworkType.Cordova
import com.rokt.roktsdk.Rokt.SdkFrameworkType.Flutter
Expand Down Expand Up @@ -52,10 +51,8 @@ class RoktKit :
CommerceListener,
IdentityListener,
RoktListener,
RoktKitBridge,
Rokt.RoktCallback {
RoktKitBridge {
private var applicationContext: Context? = null
private var roktCallback: RoktCallback? = null
private var hashedEmailUserIdentityType: String? = null
override fun getName(): String = NAME

Expand Down Expand Up @@ -93,11 +90,6 @@ class RoktKit :
application = application,
fontPostScriptNames = fontPostScriptNames,
fontFilePathMap = fontFilePathMap,
callback = object : Rokt.RoktInitCallback {
override fun onInitComplete(success: Boolean) {
Logger.verbose("Rokt Kit Initialization success: $success")
}
},
mParticleSdkVersion = mparticleVersion,
mParticleKitVersion = mparticleVersion,
)
Expand Down Expand Up @@ -180,7 +172,6 @@ class RoktKit :
override fun selectPlacements(
viewName: String,
attributes: Map<String, String>,
roktCallback: RoktCallback?,
placeHolders: MutableMap<String, WeakReference<RoktEmbeddedView>>?,
fontTypefaces: MutableMap<String, WeakReference<Typeface>>?,
filterUser: FilteredMParticleUser?,
Expand All @@ -197,27 +188,23 @@ class RoktKit :
override fun onHeightChanged(height: Int) {
it.onHeightChanged(height)
}

override fun onMarginChanged(start: Int, top: Int, end: Int, bottom: Int) {
it.onMarginChanged(start, top, end, bottom)
}
},
)
}
entry.key to WeakReference(widget)
}?.toMap()

this.roktCallback = roktCallback
val finalAttributes = prepareFinalAttributes(filterUser, attributes)
Rokt.execute(
viewName,
finalAttributes,
this,

Rokt.selectPlacements(
identifier = viewName,
attributes = finalAttributes,
eventCollector = null,
// Pass placeholders and fontTypefaces only if they are not empty or null
placeholders.takeIf { it?.isNotEmpty() == true },
fontTypefaces.takeIf { it?.isNotEmpty() == true },
roktConfig,
placementOptions,
placeholders = placeholders.takeIf { it?.isNotEmpty() == true },
fontTypefaces = fontTypefaces.takeIf { it?.isNotEmpty() == true },
config = roktConfig,
placementOptions = placementOptions,
)
}

Expand Down Expand Up @@ -283,8 +270,8 @@ class RoktKit :
Rokt.setFrameworkType(sdkFrameworkType)
}

override fun purchaseFinalized(placementId: String, catalogItemId: String, status: Boolean) {
Rokt.purchaseFinalized(placementId, catalogItemId, status)
override fun purchaseFinalized(identifier: String, catalogItemId: String, success: Boolean) {
Rokt.purchaseFinalized(identifier, catalogItemId, success)
}

override fun close() {
Expand Down Expand Up @@ -314,21 +301,16 @@ class RoktKit :
deferredAttributes?.complete(finalAttributes)
}

suspend fun runComposableWithCallback(
attributes: Map<String, String>,
roktCallback: RoktCallback?,
onResult: (Map<String, String>, RoktCallback) -> Unit,
) {
suspend fun prepareComposableAttributes(attributes: Map<String, String>, onResult: (Map<String, String>) -> Unit) {
deferredAttributes = CompletableDeferred()
RoktKitRequestHelper.prepareAttributesAsync(
kitIntegration = this,
roktListener = this,
attributes = attributes,
)
this.roktCallback = roktCallback
CoroutineScope(Dispatchers.Default).launch {
val resultAttributes = deferredAttributes!!.await()
onResult(resultAttributes, this@RoktKit)
onResult(resultAttributes)
}
}

Expand Down Expand Up @@ -427,22 +409,6 @@ class RoktKit :
const val NO_ROKT_ACCOUNT_ID = "No Rokt account ID provided, can't initialize kit."
const val NO_APP_VERSION_FOUND = "No App version found, can't initialize kit."
}

override fun onLoad() {
roktCallback?.onLoad()
}

override fun onShouldHideLoadingIndicator() {
roktCallback?.onShouldHideLoadingIndicator()
}

override fun onShouldShowLoadingIndicator() {
roktCallback?.onShouldShowLoadingIndicator()
}

override fun onUnload(reason: Rokt.UnloadReasons) {
roktCallback?.onUnload(reason)
}
}

fun PackageManager.getPackageInfoForApp(packageName: String, flags: Int = 0): PackageInfo =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package com.mparticle.kits

import android.graphics.Typeface
import com.rokt.roktsdk.PlacementOptions
import com.rokt.roktsdk.Rokt.RoktCallback
import com.rokt.roktsdk.RoktConfig
import com.rokt.roktsdk.RoktEvent
import kotlinx.coroutines.flow.Flow
Expand All @@ -12,7 +11,6 @@ internal interface RoktKitBridge {
fun selectPlacements(
viewName: String,
attributes: Map<String, String>,
roktCallback: RoktCallback?,
placeHolders: MutableMap<String, WeakReference<RoktEmbeddedView>>?,
fontTypefaces: MutableMap<String, WeakReference<Typeface>>?,
user: FilteredMParticleUser?,
Expand All @@ -24,7 +22,7 @@ internal interface RoktKitBridge {

fun enrichAttributes(attributes: MutableMap<String, String>, user: FilteredMParticleUser?)

fun purchaseFinalized(placementId: String, catalogItemId: String, status: Boolean)
fun purchaseFinalized(identifier: String, catalogItemId: String, success: Boolean)

fun close()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import com.mparticle.identity.MParticleUser
import com.mparticle.internal.Logger
import com.mparticle.internal.MPUtility
import com.rokt.roktsdk.PlacementOptions
import com.rokt.roktsdk.Rokt.RoktCallback
import com.rokt.roktsdk.RoktConfig
import org.json.JSONException
import java.lang.ref.WeakReference
Expand All @@ -20,7 +19,6 @@ internal object RoktKitRequestHelper {
roktListener: RoktKitBridge,
viewName: String,
attributes: Map<String, String>,
roktCallback: RoktCallback?,
placeHolders: Map<String, WeakReference<RoktEmbeddedView>>?,
fontTypefaces: Map<String, WeakReference<Typeface>>?,
config: RoktConfig?,
Expand All @@ -42,7 +40,6 @@ internal object RoktKitRequestHelper {
roktListener.selectPlacements(
viewName,
finalAttributes,
roktCallback,
placeHolders?.toMutableMap(),
fontTypefaces?.toMutableMap(),
FilteredMParticleUser.getInstance(user?.id ?: 0L, kitIntegration),
Expand Down
28 changes: 10 additions & 18 deletions kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktLayout.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import com.rokt.roktsdk.PlacementOptions
import com.rokt.roktsdk.Rokt
import com.rokt.roktsdk.RoktConfig

@Composable
Expand All @@ -17,40 +16,33 @@ fun RoktLayout(
attributes: Map<String, String>,
location: String,
modifier: Modifier = Modifier,
roktCallback: Rokt.RoktCallback? = null,
config: RoktConfig? = null,
) {
var placementOptions: PlacementOptions? = null
val instance = RoktKit.instance
val resultMapState = remember { mutableStateOf<RoktResult?>(null) }
val resolvedAttributes = remember { mutableStateOf<Map<String, String>?>(null) }
if (sdkTriggered) {
// Capture the timestamp when the SDK is triggered
placementOptions = PlacementOptions(
jointSdkSelectPlacements = System.currentTimeMillis(),
dynamicPerformanceMarkers = mapOf(),
)
LaunchedEffect(Unit) {
instance?.runComposableWithCallback(
HashMap(attributes),
roktCallback,
{ resultMap, callback ->
resultMapState.value = RoktResult(resultMap, callback)
},
)
instance?.prepareComposableAttributes(HashMap(attributes)) { result ->
resolvedAttributes.value = result
}
}
}

resultMapState.value?.let { resultMap ->
resolvedAttributes.value?.let { finalAttributes ->
com.rokt.roktsdk.RoktLayout(
sdkTriggered, identifier, modifier, resultMap.attributes, location,
onLoad = { resultMap.callback.onLoad() },
onShouldShowLoadingIndicator = { resultMap.callback.onShouldShowLoadingIndicator() },
onShouldHideLoadingIndicator = { resultMap.callback.onShouldHideLoadingIndicator() },
onUnload = { reason -> resultMap.callback.onUnload(reason) },
sdkTriggered = sdkTriggered,
identifier = identifier,
modifier = modifier,
attributes = finalAttributes,
location = location,
config = config,
placementOptions = placementOptions,
)
}
}

data class RoktResult(val attributes: Map<String, String>, val callback: Rokt.RoktCallback)
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@ package com.mparticle.kits

interface RoktLayoutDimensionCallBack {
fun onHeightChanged(height: Int)

fun onMarginChanged(start: Int, top: Int, end: Int, bottom: Int)
}
Loading
Loading