@@ -36,34 +36,58 @@ import com.duckduckgo.privacy.config.api.PrivacyConfigCallbackPlugin
36
36
import com.squareup.anvil.annotations.ContributesBinding
37
37
import com.squareup.anvil.annotations.ContributesMultibinding
38
38
import dagger.SingleInstanceIn
39
- import javax.inject.Inject
40
39
import kotlinx.coroutines.CoroutineScope
41
40
import kotlinx.coroutines.delay
42
41
import kotlinx.coroutines.launch
43
42
import kotlinx.coroutines.withContext
43
+ import javax.inject.Inject
44
44
45
45
interface OnboardingDesignExperimentManager {
46
46
suspend fun enroll ()
47
+
47
48
fun isAnyExperimentEnrolledAndEnabled (): Boolean
49
+
48
50
fun isModifiedControlEnrolledAndEnabled (): Boolean
51
+
49
52
fun isBuckEnrolledAndEnabled (): Boolean
53
+
50
54
fun isBbEnrolledAndEnabled (): Boolean
55
+
51
56
suspend fun fireIntroScreenDisplayedPixel ()
57
+
52
58
suspend fun fireComparisonScreenDisplayedPixel ()
59
+
53
60
suspend fun fireChooseBrowserPixel ()
61
+
54
62
suspend fun fireSetDefaultRatePixel ()
63
+
55
64
suspend fun fireSetAddressBarDisplayedPixel ()
65
+
56
66
suspend fun fireAddressBarSetTopPixel ()
67
+
57
68
suspend fun fireAddressBarSetBottomPixel ()
69
+
58
70
suspend fun fireSearchOrNavCustomPixel ()
71
+
59
72
suspend fun firePrivacyDashClickedFromOnboardingPixel ()
73
+
60
74
suspend fun fireFireButtonClickedFromOnboardingPixel ()
75
+
61
76
suspend fun fireInContextDialogShownPixel (cta : Cta ? )
62
- suspend fun fireOptionSelectedPixel (cta : Cta , index : Int )
77
+
78
+ suspend fun fireOptionSelectedPixel (
79
+ cta : Cta ,
80
+ index : Int ,
81
+ )
82
+
63
83
suspend fun fireSiteSuggestionOptionSelectedPixel (index : Int )
84
+
64
85
suspend fun onWebPageFinishedLoading (url : String? )
86
+
65
87
fun getCohort (): String?
88
+
66
89
suspend fun waitForPrivacyConfig (): Boolean
90
+
67
91
suspend fun isWaitForLocalPrivacyConfigEnabled (): Boolean
68
92
}
69
93
@@ -86,8 +110,8 @@ class RealOnboardingDesignExperimentManager @Inject constructor(
86
110
private val appBuildConfig : AppBuildConfig ,
87
111
private val deviceInfo : DeviceInfo ,
88
112
private val duckDuckGoUrlDetector : DuckDuckGoUrlDetector ,
89
- ) : OnboardingDesignExperimentManager, PrivacyConfigCallbackPlugin {
90
-
113
+ ) : OnboardingDesignExperimentManager,
114
+ PrivacyConfigCallbackPlugin {
91
115
private var isExperimentEnabled: Boolean? = null
92
116
private var onboardingDesignExperimentCohort: OnboardingDesignExperimentCohort ? = null
93
117
@@ -100,9 +124,7 @@ class RealOnboardingDesignExperimentManager @Inject constructor(
100
124
return true
101
125
}
102
126
103
- override suspend fun isWaitForLocalPrivacyConfigEnabled (): Boolean {
104
- return onboardingDesignExperimentToggles.waitForLocalPrivacyConfig().isEnabled()
105
- }
127
+ override suspend fun isWaitForLocalPrivacyConfigEnabled (): Boolean = onboardingDesignExperimentToggles.waitForLocalPrivacyConfig().isEnabled()
106
128
107
129
override fun onPrivacyConfigPersisted () {
108
130
privacyPersisted = true
@@ -117,9 +139,7 @@ class RealOnboardingDesignExperimentManager @Inject constructor(
117
139
}
118
140
}
119
141
120
- override fun getCohort (): String? {
121
- return onboardingDesignExperimentCohort?.cohortName
122
- }
142
+ override fun getCohort (): String? = onboardingDesignExperimentCohort?.cohortName
123
143
124
144
/* *
125
145
* Enrolls the user in the onboarding design experiment if they are eligible.
@@ -128,24 +148,28 @@ class RealOnboardingDesignExperimentManager @Inject constructor(
128
148
override suspend fun enroll () {
129
149
withContext(dispatcherProvider.io()) {
130
150
if (isEligibleForEnrolment()) {
131
- onboardingDesignExperimentToggles.onboardingDesignExperimentAug25 ().enroll()
151
+ onboardingDesignExperimentToggles.onboardingDesignExperimentOct25 ().enroll()
132
152
setCachedProperties()
133
153
}
134
154
}
135
155
}
136
156
137
- override fun isAnyExperimentEnrolledAndEnabled () = isModifiedControlEnrolledAndEnabled() ||
138
- isBuckEnrolledAndEnabled() ||
139
- isBbEnrolledAndEnabled()
157
+ override fun isAnyExperimentEnrolledAndEnabled () =
158
+ isModifiedControlEnrolledAndEnabled() ||
159
+ isBuckEnrolledAndEnabled() ||
160
+ isBbEnrolledAndEnabled()
140
161
141
- override fun isModifiedControlEnrolledAndEnabled (): Boolean = isExperimentEnabled == true &&
142
- onboardingDesignExperimentCohort == MODIFIED_CONTROL
162
+ override fun isModifiedControlEnrolledAndEnabled (): Boolean =
163
+ isExperimentEnabled == true &&
164
+ onboardingDesignExperimentCohort == MODIFIED_CONTROL
143
165
144
- override fun isBuckEnrolledAndEnabled (): Boolean = isExperimentEnabled == true &&
145
- onboardingDesignExperimentCohort == BUCK
166
+ override fun isBuckEnrolledAndEnabled (): Boolean =
167
+ isExperimentEnabled == true &&
168
+ onboardingDesignExperimentCohort == BUCK
146
169
147
- override fun isBbEnrolledAndEnabled (): Boolean = isExperimentEnabled == true &&
148
- onboardingDesignExperimentCohort == BB
170
+ override fun isBbEnrolledAndEnabled (): Boolean =
171
+ isExperimentEnabled == true &&
172
+ onboardingDesignExperimentCohort == BB
149
173
150
174
override suspend fun fireIntroScreenDisplayedPixel () {
151
175
onboardingExperimentMetricsPixelPlugin.getIntroScreenDisplayedMetric()?.fire()
@@ -326,24 +350,21 @@ class RealOnboardingDesignExperimentManager @Inject constructor(
326
350
327
351
private suspend fun isEligibleForEnrolment (): Boolean = isAtLeastAndroid11() && ! isTablet() && ! isReturningUser()
328
352
329
- private fun isTablet (): Boolean =
330
- deviceInfo.formFactor() == TABLET
353
+ private fun isTablet (): Boolean = deviceInfo.formFactor() == TABLET
331
354
332
- private suspend fun isReturningUser (): Boolean =
333
- appBuildConfig.isAppReinstall()
355
+ private suspend fun isReturningUser (): Boolean = appBuildConfig.isAppReinstall()
334
356
335
- private fun isAtLeastAndroid11 (): Boolean =
336
- appBuildConfig.sdkInt >= 30
357
+ private fun isAtLeastAndroid11 (): Boolean = appBuildConfig.sdkInt >= 30
337
358
338
359
private suspend fun setCachedProperties () {
339
360
withContext(dispatcherProvider.io()) {
340
361
onboardingDesignExperimentCohort = getEnrolledAndEnabledExperimentCohort()
341
- isExperimentEnabled = onboardingDesignExperimentToggles.onboardingDesignExperimentAug25 ().isEnabled()
362
+ isExperimentEnabled = onboardingDesignExperimentToggles.onboardingDesignExperimentOct25 ().isEnabled()
342
363
}
343
364
}
344
365
345
366
private suspend fun getEnrolledAndEnabledExperimentCohort (): OnboardingDesignExperimentCohort ? {
346
- val cohort = onboardingDesignExperimentToggles.onboardingDesignExperimentAug25 ().getCohort()
367
+ val cohort = onboardingDesignExperimentToggles.onboardingDesignExperimentOct25 ().getCohort()
347
368
348
369
return when (cohort?.name) {
349
370
MODIFIED_CONTROL .cohortName -> MODIFIED_CONTROL
@@ -353,7 +374,8 @@ class RealOnboardingDesignExperimentManager @Inject constructor(
353
374
}
354
375
}
355
376
356
- private fun MetricsPixel.fire () = getPixelDefinitions().forEach {
357
- pixel.fire(it.pixelName, it.params)
358
- }
377
+ private fun MetricsPixel.fire () =
378
+ getPixelDefinitions().forEach {
379
+ pixel.fire(it.pixelName, it.params)
380
+ }
359
381
}
0 commit comments