diff --git a/android-core/src/main/java/com/mparticle/MParticle.java b/android-core/src/main/java/com/mparticle/MParticle.java index 0e783d72a..28e9fb856 100644 --- a/android-core/src/main/java/com/mparticle/MParticle.java +++ b/android-core/src/main/java/com/mparticle/MParticle.java @@ -1892,6 +1892,7 @@ public void selectPlacements(@NonNull String viewName, config); } } + public void selectPlacements(@NonNull String viewName, @NonNull Map attributes) { if (mConfigManager.isEnabled()) { @@ -1904,6 +1905,12 @@ public void selectPlacements(@NonNull String viewName, ); } } + + public void purchaseFinalized(@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..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` @@ -531,6 +530,31 @@ 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.purchaseFinalized("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.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/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, 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..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 @@ -1451,6 +1451,10 @@ class KitManagerImplTest { ) { println("Executed with $attributes") } + + override fun purchaseFinalized(placementId: String, catalogItemId: String, status: Boolean) { + println("purchaseFinalized with placementId: $placementId catalogItemId : $catalogItemId status : $status ") + } } internal inner class KitManagerEventCounter : MockKitManagerImpl() { var logBaseEventCalled = 0