From 8211199a3af7bb23e7e3dc38b1d53ff2a1903fc1 Mon Sep 17 00:00:00 2001 From: Mansi Pandya Date: Wed, 11 Jun 2025 16:27:18 -0400 Subject: [PATCH 1/4] feat: Add support purchaseFinalized API in android core --- .../main/java/com/mparticle/MParticle.java | 7 +++++ .../internal/KitFrameworkWrapper.java | 8 ++++++ .../com/mparticle/internal/KitManager.java | 2 ++ .../kotlin/com/mparticle/MParticleTest.kt | 26 +++++++++++++++++++ .../com/mparticle/kits/KitIntegration.java | 2 ++ .../com/mparticle/kits/KitManagerImpl.java | 13 ++++++++++ 6 files changed, 58 insertions(+) diff --git a/android-core/src/main/java/com/mparticle/MParticle.java b/android-core/src/main/java/com/mparticle/MParticle.java index 0e783d72a..47425d5a9 100644 --- a/android-core/src/main/java/com/mparticle/MParticle.java +++ b/android-core/src/main/java/com/mparticle/MParticle.java @@ -1877,6 +1877,7 @@ protected Rokt(){ } + public void selectPlacements(@NonNull String viewName, @NonNull Map attributes, @Nullable MpRoktEventCallback callbacks, @@ -1904,6 +1905,12 @@ public void selectPlacements(@NonNull String viewName, ); } } + + public void reportConversion(@NonNull String placementId, @NonNull String catalogItemId, boolean status) { + if (mConfigManager.isEnabled()) { + mKitManager.purchaseFinalized(placementId, catalogItemId, status); + } + } } /** * @hidden diff --git a/android-core/src/main/java/com/mparticle/internal/KitFrameworkWrapper.java b/android-core/src/main/java/com/mparticle/internal/KitFrameworkWrapper.java index 87bb28606..f24cea2eb 100644 --- a/android-core/src/main/java/com/mparticle/internal/KitFrameworkWrapper.java +++ b/android-core/src/main/java/com/mparticle/internal/KitFrameworkWrapper.java @@ -8,6 +8,7 @@ import android.net.Uri; import android.os.Bundle; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; @@ -666,6 +667,13 @@ public void execute(String viewName, } } + @Override + public void purchaseFinalized(@NonNull String placementId, @NonNull String catalogItemId, boolean status) { + if (mKitManager != null) { + mKitManager.purchaseFinalized(placementId, catalogItemId, status); + } + } + static class CoreCallbacksImpl implements CoreCallbacks { KitFrameworkWrapper mKitFrameworkWrapper; ConfigManager mConfigManager; diff --git a/android-core/src/main/java/com/mparticle/internal/KitManager.java b/android-core/src/main/java/com/mparticle/internal/KitManager.java index d8114d85a..7f436ae33 100644 --- a/android-core/src/main/java/com/mparticle/internal/KitManager.java +++ b/android-core/src/main/java/com/mparticle/internal/KitManager.java @@ -130,6 +130,8 @@ void execute(String viewName, Map> fontTypefaces, RoktConfig config); + void purchaseFinalized(@NonNull String placementId, @NonNull String catalogItemId, boolean status); + enum KitStatus { NOT_CONFIGURED, STOPPED, diff --git a/android-core/src/test/kotlin/com/mparticle/MParticleTest.kt b/android-core/src/test/kotlin/com/mparticle/MParticleTest.kt index 82bf6e441..d67c931dd 100644 --- a/android-core/src/test/kotlin/com/mparticle/MParticleTest.kt +++ b/android-core/src/test/kotlin/com/mparticle/MParticleTest.kt @@ -531,6 +531,32 @@ class MParticleTest { verify(instance.mKitManager, never()).execute(any(), any(), any(), any(), any(), any()) } + @Test + fun testReportConversion_withBasicParams_whenEnabled() { + var instance: MParticle = InnerMockMParticle() + MParticle.setInstance(instance) + `when`(instance.mConfigManager.isEnabled()).thenReturn(true) + + val attributes = mutableMapOf() + attributes.put("a", "b") + + instance.rokt.reportConversion("132", "1111",true) + + verify(instance.mKitManager).purchaseFinalized("132", "1111", true) + } + + @Test + fun testReportConversion_withBasicParams_whenDisabled() { + var instance: MParticle = InnerMockMParticle() + MParticle.setInstance(instance) + `when`(instance.mConfigManager.isEnabled()).thenReturn(false) + + instance.rokt.reportConversion("132", "1111",true) + + verify(instance.mKitManager, never()).purchaseFinalized("132", "1111",true) + } + + inner class InnerMockMParticle : MParticle() { init { mConfigManager = ConfigManager(MockContext()) diff --git a/android-kit-base/src/main/java/com/mparticle/kits/KitIntegration.java b/android-kit-base/src/main/java/com/mparticle/kits/KitIntegration.java index 030d838c0..a85ee0344 100644 --- a/android-kit-base/src/main/java/com/mparticle/kits/KitIntegration.java +++ b/android-kit-base/src/main/java/com/mparticle/kits/KitIntegration.java @@ -620,5 +620,7 @@ void execute(String viewName, Map> fontTypefaces, FilteredMParticleUser user, RoktConfig config); + + void purchaseFinalized(@NonNull String placementId, @NonNull String catalogItemId, boolean status); } } diff --git a/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java b/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java index 3904b8932..9185d0d4f 100644 --- a/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java +++ b/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java @@ -1401,6 +1401,19 @@ public void execute(String viewName, } } + @Override + public void purchaseFinalized(@NonNull String placementId, @NonNull String catalogItemId, boolean status) { + for (KitIntegration provider : providers.values()) { + try { + if (provider instanceof KitIntegration.RoktListener && !provider.isDisabled()) { + ((KitIntegration.RoktListener) provider).purchaseFinalized(placementId,catalogItemId,status); + } + } catch (Exception e) { + Logger.warning("Failed to call purchaseFinalized for kit: " + provider.getName() + ": " + e.getMessage()); + } + } + } + private void confirmEmail( @Nullable String email, @Nullable MParticleUser user, From 0c85fd8b5068b00f67eb79a417c7cb4a48766685 Mon Sep 17 00:00:00 2001 From: Mansi Pandya Date: Wed, 11 Jun 2025 16:57:43 -0400 Subject: [PATCH 2/4] fix lint error --- .../src/test/kotlin/com/mparticle/MParticleTest.kt | 7 +++---- .../test/kotlin/com/mparticle/kits/KitManagerImplTest.kt | 4 ++++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/android-core/src/test/kotlin/com/mparticle/MParticleTest.kt b/android-core/src/test/kotlin/com/mparticle/MParticleTest.kt index d67c931dd..61766d7dd 100644 --- a/android-core/src/test/kotlin/com/mparticle/MParticleTest.kt +++ b/android-core/src/test/kotlin/com/mparticle/MParticleTest.kt @@ -540,7 +540,7 @@ class MParticleTest { val attributes = mutableMapOf() attributes.put("a", "b") - instance.rokt.reportConversion("132", "1111",true) + instance.rokt.reportConversion("132", "1111", true) verify(instance.mKitManager).purchaseFinalized("132", "1111", true) } @@ -551,12 +551,11 @@ class MParticleTest { MParticle.setInstance(instance) `when`(instance.mConfigManager.isEnabled()).thenReturn(false) - instance.rokt.reportConversion("132", "1111",true) + instance.rokt.reportConversion("132", "1111", true) - verify(instance.mKitManager, never()).purchaseFinalized("132", "1111",true) + verify(instance.mKitManager, never()).purchaseFinalized("132", "1111", true) } - inner class InnerMockMParticle : MParticle() { init { mConfigManager = ConfigManager(MockContext()) diff --git a/android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt b/android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt index b87cf4faf..d95ed1964 100644 --- a/android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt +++ b/android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt @@ -1451,6 +1451,10 @@ class KitManagerImplTest { ) { println("Executed with $attributes") } + + override fun purchaseFinalized(placementId: String, catalogItemId: String, status: Boolean) { + TODO("Not yet implemented") + } } internal inner class KitManagerEventCounter : MockKitManagerImpl() { var logBaseEventCalled = 0 From b256eb7b881718de22d9da0594a11c4866a8d005 Mon Sep 17 00:00:00 2001 From: Mansi Pandya Date: Thu, 12 Jun 2025 10:03:38 -0400 Subject: [PATCH 3/4] Address review commets --- android-core/src/main/java/com/mparticle/MParticle.java | 2 +- android-core/src/test/kotlin/com/mparticle/MParticleTest.kt | 5 ++--- .../src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/android-core/src/main/java/com/mparticle/MParticle.java b/android-core/src/main/java/com/mparticle/MParticle.java index 47425d5a9..a3623d8b9 100644 --- a/android-core/src/main/java/com/mparticle/MParticle.java +++ b/android-core/src/main/java/com/mparticle/MParticle.java @@ -1906,7 +1906,7 @@ public void selectPlacements(@NonNull String viewName, } } - public void reportConversion(@NonNull String placementId, @NonNull String catalogItemId, boolean status) { + public void purchaseFinalized(@NonNull String placementId, @NonNull String catalogItemId, boolean status) { if (mConfigManager.isEnabled()) { mKitManager.purchaseFinalized(placementId, catalogItemId, status); } diff --git a/android-core/src/test/kotlin/com/mparticle/MParticleTest.kt b/android-core/src/test/kotlin/com/mparticle/MParticleTest.kt index 61766d7dd..49243ea97 100644 --- a/android-core/src/test/kotlin/com/mparticle/MParticleTest.kt +++ b/android-core/src/test/kotlin/com/mparticle/MParticleTest.kt @@ -30,7 +30,6 @@ import org.mockito.ArgumentCaptor import org.mockito.ArgumentMatchers import org.mockito.ArgumentMatchers.any import org.mockito.Mockito -import org.mockito.Mockito.mock import org.mockito.Mockito.never import org.mockito.Mockito.verify import org.mockito.Mockito.`when` @@ -540,7 +539,7 @@ class MParticleTest { val attributes = mutableMapOf() attributes.put("a", "b") - instance.rokt.reportConversion("132", "1111", true) + instance.rokt.purchaseFinalized("132", "1111", true) verify(instance.mKitManager).purchaseFinalized("132", "1111", true) } @@ -551,7 +550,7 @@ class MParticleTest { MParticle.setInstance(instance) `when`(instance.mConfigManager.isEnabled()).thenReturn(false) - instance.rokt.reportConversion("132", "1111", true) + instance.rokt.purchaseFinalized("132", "1111", true) verify(instance.mKitManager, never()).purchaseFinalized("132", "1111", true) } diff --git a/android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt b/android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt index d95ed1964..279a519c5 100644 --- a/android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt +++ b/android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt @@ -1453,7 +1453,7 @@ class KitManagerImplTest { } override fun purchaseFinalized(placementId: String, catalogItemId: String, status: Boolean) { - TODO("Not yet implemented") + println("purchaseFinalized with placementId: $placementId catalogItemId : $catalogItemId status : $status ") } } internal inner class KitManagerEventCounter : MockKitManagerImpl() { From c55bf6cf2d9b0456bd5b10d16d32f51cdc05fd1a Mon Sep 17 00:00:00 2001 From: Mansi Pandya Date: Thu, 12 Jun 2025 10:05:06 -0400 Subject: [PATCH 4/4] Removed Extra space --- android-core/src/main/java/com/mparticle/MParticle.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android-core/src/main/java/com/mparticle/MParticle.java b/android-core/src/main/java/com/mparticle/MParticle.java index a3623d8b9..28e9fb856 100644 --- a/android-core/src/main/java/com/mparticle/MParticle.java +++ b/android-core/src/main/java/com/mparticle/MParticle.java @@ -1877,7 +1877,6 @@ protected Rokt(){ } - public void selectPlacements(@NonNull String viewName, @NonNull Map attributes, @Nullable MpRoktEventCallback callbacks, @@ -1893,6 +1892,7 @@ public void selectPlacements(@NonNull String viewName, config); } } + public void selectPlacements(@NonNull String viewName, @NonNull Map attributes) { if (mConfigManager.isEnabled()) {