From 83e7aab156dd1f122d7721998b604ddf2a1a20c9 Mon Sep 17 00:00:00 2001 From: James Newman Date: Mon, 16 Feb 2026 11:45:01 -0500 Subject: [PATCH 1/2] feat: Map mParticle log level to Rokt --- build.gradle | 2 +- src/main/kotlin/com/mparticle/kits/RoktKit.kt | 13 ++++ .../kotlin/com/mparticle/kits/RoktKitTests.kt | 64 +++++++++++++++++++ 3 files changed, 78 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 08edcdc..4d49a24 100644 --- a/build.gradle +++ b/build.gradle @@ -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.13.1' + api 'com.rokt:roktsdk:4.14.0' testImplementation files('libs/java-json.jar') testImplementation 'com.squareup.assertj:assertj-android:1.2.0' diff --git a/src/main/kotlin/com/mparticle/kits/RoktKit.kt b/src/main/kotlin/com/mparticle/kits/RoktKit.kt index bac0ab9..1c33e50 100644 --- a/src/main/kotlin/com/mparticle/kits/RoktKit.kt +++ b/src/main/kotlin/com/mparticle/kits/RoktKit.kt @@ -18,6 +18,7 @@ import com.mparticle.commerce.CommerceEvent import com.mparticle.identity.MParticleUser import com.mparticle.internal.Logger import com.mparticle.kits.KitIntegration.CommerceListener +import com.rokt.roktsdk.logging.RoktLogLevel import com.mparticle.kits.KitIntegration.IdentityListener import com.mparticle.kits.KitIntegration.RoktListener import com.mparticle.rokt.PlacementOptions @@ -86,6 +87,9 @@ class RoktKit : val fontFilePathMap = roktOptions?.fontFilePathMap ?: emptyMap() val fontPostScriptNames = roktOptions?.fontPostScriptNames ?: emptySet() + val mappedLogLevel = Logger.getMinLogLevel().toRoktLogLevel() + Rokt.setLogLevel(mappedLogLevel) + Rokt.init( roktTagId = roktTagId, appVersion = info.versionName, @@ -161,6 +165,15 @@ class RoktKit : Logger.error(t, "RoktKit: $message") } + private fun MParticle.LogLevel.toRoktLogLevel(): RoktLogLevel = when (this) { + MParticle.LogLevel.VERBOSE -> RoktLogLevel.VERBOSE + MParticle.LogLevel.DEBUG -> RoktLogLevel.DEBUG + MParticle.LogLevel.INFO -> RoktLogLevel.INFO + MParticle.LogLevel.WARNING -> RoktLogLevel.WARNING + MParticle.LogLevel.ERROR -> RoktLogLevel.ERROR + MParticle.LogLevel.NONE -> RoktLogLevel.NONE + } + private fun throwOnKitCreateError(message: String): Unit = throw IllegalArgumentException(message) /* diff --git a/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt b/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt index d1a9f7d..9717978 100644 --- a/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt +++ b/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt @@ -20,6 +20,7 @@ import com.mparticle.kits.mocks.MockKitConfiguration import com.rokt.roktsdk.FulfillmentAttributes import com.rokt.roktsdk.Rokt import com.rokt.roktsdk.RoktEvent +import com.rokt.roktsdk.logging.RoktLogLevel import io.mockk.every import io.mockk.just import io.mockk.mockk @@ -1439,4 +1440,67 @@ class RoktKitTests { override fun onKitApiCalled(methodName: String?, kitId: Int, used: Boolean?, vararg objects: Any?) {} } } + + @Test + fun testLogLevelMapping_VERBOSE() { + // Arrange + val method = RoktKit::class.java.getDeclaredMethod( + "toRoktLogLevel", + MParticle.LogLevel::class.java, + ) + method.isAccessible = true + + // Act & Assert + assertEquals(RoktLogLevel.VERBOSE, method.invoke(roktKit, MParticle.LogLevel.VERBOSE)) + } + + @Test + fun testLogLevelMapping_DEBUG() { + val method = RoktKit::class.java.getDeclaredMethod( + "toRoktLogLevel", + MParticle.LogLevel::class.java, + ) + method.isAccessible = true + assertEquals(RoktLogLevel.DEBUG, method.invoke(roktKit, MParticle.LogLevel.DEBUG)) + } + + @Test + fun testLogLevelMapping_INFO() { + val method = RoktKit::class.java.getDeclaredMethod( + "toRoktLogLevel", + MParticle.LogLevel::class.java, + ) + method.isAccessible = true + assertEquals(RoktLogLevel.INFO, method.invoke(roktKit, MParticle.LogLevel.INFO)) + } + + @Test + fun testLogLevelMapping_WARNING() { + val method = RoktKit::class.java.getDeclaredMethod( + "toRoktLogLevel", + MParticle.LogLevel::class.java, + ) + method.isAccessible = true + assertEquals(RoktLogLevel.WARNING, method.invoke(roktKit, MParticle.LogLevel.WARNING)) + } + + @Test + fun testLogLevelMapping_ERROR() { + val method = RoktKit::class.java.getDeclaredMethod( + "toRoktLogLevel", + MParticle.LogLevel::class.java, + ) + method.isAccessible = true + assertEquals(RoktLogLevel.ERROR, method.invoke(roktKit, MParticle.LogLevel.ERROR)) + } + + @Test + fun testLogLevelMapping_NONE() { + val method = RoktKit::class.java.getDeclaredMethod( + "toRoktLogLevel", + MParticle.LogLevel::class.java, + ) + method.isAccessible = true + assertEquals(RoktLogLevel.NONE, method.invoke(roktKit, MParticle.LogLevel.NONE)) + } } From 08f1e681ca81a17fe6162eb37e0a8f815601c0f1 Mon Sep 17 00:00:00 2001 From: James Newman Date: Mon, 16 Feb 2026 12:35:48 -0500 Subject: [PATCH 2/2] Update import order --- src/main/kotlin/com/mparticle/kits/RoktKit.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/com/mparticle/kits/RoktKit.kt b/src/main/kotlin/com/mparticle/kits/RoktKit.kt index 1c33e50..091ba63 100644 --- a/src/main/kotlin/com/mparticle/kits/RoktKit.kt +++ b/src/main/kotlin/com/mparticle/kits/RoktKit.kt @@ -18,7 +18,6 @@ import com.mparticle.commerce.CommerceEvent import com.mparticle.identity.MParticleUser import com.mparticle.internal.Logger import com.mparticle.kits.KitIntegration.CommerceListener -import com.rokt.roktsdk.logging.RoktLogLevel import com.mparticle.kits.KitIntegration.IdentityListener import com.mparticle.kits.KitIntegration.RoktListener import com.mparticle.rokt.PlacementOptions @@ -33,6 +32,7 @@ import com.rokt.roktsdk.Rokt.SdkFrameworkType.ReactNative import com.rokt.roktsdk.RoktEvent import com.rokt.roktsdk.RoktWidgetDimensionCallBack import com.rokt.roktsdk.Widget +import com.rokt.roktsdk.logging.RoktLogLevel import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers