From 31ddc537c8c97bca8874096ef5363e685412bad5 Mon Sep 17 00:00:00 2001 From: Noelia Alcala Date: Wed, 26 Feb 2025 16:56:26 +0000 Subject: [PATCH] Fixed experiment pixel metrics --- .../freetrial/FreeTrialExperimentDataStore.kt | 16 ++++++++++++++++ .../FreeTrialPrivacyProMetricsPixelPlugin.kt | 5 ++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/subscriptions/subscriptions-impl/src/main/java/com/duckduckgo/subscriptions/impl/freetrial/FreeTrialExperimentDataStore.kt b/subscriptions/subscriptions-impl/src/main/java/com/duckduckgo/subscriptions/impl/freetrial/FreeTrialExperimentDataStore.kt index 6b7f759143f3..31051e30dfaa 100644 --- a/subscriptions/subscriptions-impl/src/main/java/com/duckduckgo/subscriptions/impl/freetrial/FreeTrialExperimentDataStore.kt +++ b/subscriptions/subscriptions-impl/src/main/java/com/duckduckgo/subscriptions/impl/freetrial/FreeTrialExperimentDataStore.kt @@ -41,6 +41,11 @@ interface FreeTrialExperimentDataStore { * Returns the number [Int] of paywall impressions for the given [definition] */ suspend fun getMetricForPixelDefinition(definition: PixelDefinition): Int + + /** + * Increases the count of paywall impressions for the given [definition] + */ + suspend fun increaseMetricForPixelDefinition(definition: PixelDefinition): Int } @ContributesBinding(AppScope::class) @@ -68,6 +73,17 @@ class FreeTrialExperimentDataStoreImpl @Inject constructor( } } + override suspend fun increaseMetricForPixelDefinition(definition: PixelDefinition): Int = + withContext(dispatcherProvider.io()) { + val tag = "$definition" + val count = preferences.getInt(tag, 0) + preferences.edit { + putInt(tag, count + 1) + apply() + } + preferences.getInt(tag, 0) + } + companion object { private const val FILENAME = "com.duckduckgo.subscriptions.freetrial.store" private const val KEY_PAYWALL_IMPRESSIONS = "PAYWALL_IMPRESSIONS" diff --git a/subscriptions/subscriptions-impl/src/main/java/com/duckduckgo/subscriptions/impl/freetrial/FreeTrialPrivacyProMetricsPixelPlugin.kt b/subscriptions/subscriptions-impl/src/main/java/com/duckduckgo/subscriptions/impl/freetrial/FreeTrialPrivacyProMetricsPixelPlugin.kt index 99e158d671be..5c588c64999b 100644 --- a/subscriptions/subscriptions-impl/src/main/java/com/duckduckgo/subscriptions/impl/freetrial/FreeTrialPrivacyProMetricsPixelPlugin.kt +++ b/subscriptions/subscriptions-impl/src/main/java/com/duckduckgo/subscriptions/impl/freetrial/FreeTrialPrivacyProMetricsPixelPlugin.kt @@ -111,7 +111,10 @@ class FreeTrialPrivacyProPixelsPlugin @Inject constructor( metricsPixel?.let { metric -> metric.getPixelDefinitions().forEach { definition -> if (definition.isInConversionWindow()) { - freeTrialExperimentDataStore.getMetricForPixelDefinition(definition).takeIf { it < metric.value.toInt() }?.let { + freeTrialExperimentDataStore.getMetricForPixelDefinition(definition).takeIf { + it < freeTrialExperimentDataStore.paywallImpressions + }?.let { + freeTrialExperimentDataStore.increaseMetricForPixelDefinition(definition) pixel.fire(definition.pixelName, definition.params) } }