Bug 2019018 - Enabling adjust on start for aura distributions in nightly with play store kids mode for Adjust r=android-reviewers,mavduevskiy

Differential Revision: https://phabricator.services.mozilla.com/D284756
This commit is contained in:
John Oberhauser
2026-03-09 16:32:58 +00:00
committed by joberhauser@mozilla.com
parent 38a404b1e9
commit 9f5342870a
4 changed files with 118 additions and 15 deletions
@@ -21,6 +21,7 @@ import org.mozilla.fenix.BuildConfig
import org.mozilla.fenix.Config
import org.mozilla.fenix.GleanMetrics.AdjustAttribution
import org.mozilla.fenix.GleanMetrics.Pings
import org.mozilla.fenix.distributions.DistributionAdjustStartupStrategy
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.utils.Settings
@@ -64,8 +65,14 @@ class AdjustMetricsService(
// If we skipped the marketing consent screen, enable COPPA compliance to prevent
// personal identifiers from being shared with Adjust.
if (distributionIdManager.shouldSkipMarketingConsentScreen()) {
config.enableCoppaCompliance()
when (distributionIdManager.getDistributionAdjustStartupStrategy()) {
DistributionAdjustStartupStrategy.IMMEDIATE_WITH_COPPA ->
config.enableCoppaCompliance()
DistributionAdjustStartupStrategy.IMMEDIATE_WITH_PLAY_STORE_KIDS ->
config.enablePlayStoreKidsCompliance()
else -> {}
}
if (!alreadyKnown(settings)) {
@@ -9,6 +9,7 @@ import android.os.Build
import androidx.annotation.VisibleForTesting
import mozilla.components.support.base.log.logger.Logger
import mozilla.components.support.utils.ext.PackageManagerWrapper
import org.mozilla.fenix.Config
import org.mozilla.fenix.GleanMetrics.Metrics
import org.mozilla.fenix.GleanMetrics.Partnerships
import org.mozilla.fenix.components.metrics.MetricController
@@ -117,16 +118,42 @@ class DistributionIdManager(
* @return true if the marketing consent screen can be skipped during onboarding
*/
suspend fun shouldSkipMarketingConsentScreen(): Boolean {
val adjustStartupStrategy = getDistributionAdjustStartupStrategy()
return when (adjustStartupStrategy) {
DistributionAdjustStartupStrategy.NONE,
DistributionAdjustStartupStrategy.SHOW_CONSENT_SCREEN,
-> false
DistributionAdjustStartupStrategy.IMMEDIATE_WITH_COPPA,
DistributionAdjustStartupStrategy.IMMEDIATE_WITH_PLAY_STORE_KIDS,
-> true
}
}
/**
* Get the Adjust startup strategy for the current distribution.
*
* @return the Adjust startup strategy.
*/
suspend fun getDistributionAdjustStartupStrategy(): DistributionAdjustStartupStrategy {
val id = Distribution.fromId(getDistributionId())
return when (id) {
Distribution.DEFAULT -> false
Distribution.VIVO_001 -> true
Distribution.DT_001 -> true
Distribution.DT_002 -> true
Distribution.DT_003 -> true
Distribution.AURA_001 -> false
Distribution.XIAOMI_001 -> true
Distribution.DEFAULT -> DistributionAdjustStartupStrategy.NONE
Distribution.VIVO_001,
Distribution.DT_001,
Distribution.DT_002,
Distribution.DT_003,
Distribution.XIAOMI_001,
-> DistributionAdjustStartupStrategy.IMMEDIATE_WITH_COPPA
Distribution.AURA_001 -> if (Config.channel.isNightlyOrDebug) {
DistributionAdjustStartupStrategy.IMMEDIATE_WITH_PLAY_STORE_KIDS
} else {
DistributionAdjustStartupStrategy.SHOW_CONSENT_SCREEN
}
}
}
@@ -199,6 +226,25 @@ class DistributionIdManager(
}
}
/**
* This enum represents how / when adjust starts up for distributions.
*/
enum class DistributionAdjustStartupStrategy {
NONE,
// Show the adjust data collection consent screen during onboarding and start
// adjust after the user has consented.
SHOW_CONSENT_SCREEN,
// Start adjust immediately but enabled COPPA mode in adjust. COPPA mode will prevent
// adjust from collecting personal identifiers and sharing data with third parties.
IMMEDIATE_WITH_COPPA,
// Start adjust immediately but enable Play Store Kids mode in adjust. This mode will prevent
// adjust from collecting personal identifiers.
IMMEDIATE_WITH_PLAY_STORE_KIDS,
}
/**
* Checks for a file in the device that indicates if the app was preinstalled on a vivo device
*/
@@ -102,12 +102,8 @@ internal class MarketingAttributionServiceTest {
distributionIdManager.setDistribution(DistributionIdManager.Distribution.XIAOMI_001)
assertFalse(MarketingAttributionService.shouldShowMarketingOnboarding(null, distributionIdManager))
}
@Test
fun `GIVEN a partnership distribution WHEN we should not skip the marketing screen THEN we do not skip it`() =
runBlocking {
distributionIdManager.setDistribution(DistributionIdManager.Distribution.AURA_001)
assertTrue(MarketingAttributionService.shouldShowMarketingOnboarding(null, distributionIdManager))
assertFalse(MarketingAttributionService.shouldShowMarketingOnboarding(null, distributionIdManager))
}
}
@@ -280,12 +280,66 @@ class DistributionIdManagerTest {
assertEquals(true, subject.shouldSkipMarketingConsentScreen())
subject.setDistribution(DistributionIdManager.Distribution.AURA_001)
assertEquals(false, subject.shouldSkipMarketingConsentScreen())
assertEquals(true, subject.shouldSkipMarketingConsentScreen())
subject.setDistribution(DistributionIdManager.Distribution.XIAOMI_001)
assertEquals(true, subject.shouldSkipMarketingConsentScreen())
}
@Test
fun `WHEN checking the distribution startup strategy THEN the correct strategy is returned`() =
runBlocking {
val subject = DistributionIdManager(
packageManager = testContext.packageManagerWrapper,
testBrowserStoreProvider,
distributionProviderChecker = testDistributionProviderChecker,
distributionSettings = testDistributionSettings,
metricController = FakeMetricController(),
)
subject.setDistribution(DistributionIdManager.Distribution.DEFAULT)
assertEquals(
DistributionAdjustStartupStrategy.NONE,
subject.getDistributionAdjustStartupStrategy(),
)
subject.setDistribution(DistributionIdManager.Distribution.VIVO_001)
assertEquals(
DistributionAdjustStartupStrategy.IMMEDIATE_WITH_COPPA,
subject.getDistributionAdjustStartupStrategy(),
)
subject.setDistribution(DistributionIdManager.Distribution.DT_001)
assertEquals(
DistributionAdjustStartupStrategy.IMMEDIATE_WITH_COPPA,
subject.getDistributionAdjustStartupStrategy(),
)
subject.setDistribution(DistributionIdManager.Distribution.DT_002)
assertEquals(
DistributionAdjustStartupStrategy.IMMEDIATE_WITH_COPPA,
subject.getDistributionAdjustStartupStrategy(),
)
subject.setDistribution(DistributionIdManager.Distribution.DT_003)
assertEquals(
DistributionAdjustStartupStrategy.IMMEDIATE_WITH_COPPA,
subject.getDistributionAdjustStartupStrategy(),
)
subject.setDistribution(DistributionIdManager.Distribution.AURA_001)
assertEquals(
DistributionAdjustStartupStrategy.IMMEDIATE_WITH_PLAY_STORE_KIDS,
subject.getDistributionAdjustStartupStrategy(),
)
subject.setDistribution(DistributionIdManager.Distribution.XIAOMI_001)
assertEquals(
DistributionAdjustStartupStrategy.IMMEDIATE_WITH_COPPA,
subject.getDistributionAdjustStartupStrategy(),
)
}
@Test
fun `WHEN the provider is aura THEN the proper distribution ID is returned`() =
runBlocking {