Skip to content

Commit 1fb4a93

Browse files
authored
Cleanup everything that mentions the experiment to avoid confusion (#6593)
Task/Issue URL: https://app.asana.com/1/137249556945/project/1200581511062568/task/1211055203890351?focus=true ### Description This PR renames the default browser prompts stages to improve clarity: - `NOT_ENROLLED` → `NOT_STARTED` - `ENROLLED` → `STARTED` These changes make the stage names more intuitive and better reflect their purpose in the default browser prompts flow. Additionally, this PR: - Renames `storeExperimentStage` to `storeStage` - Renames `getActiveDaysUsedSinceEnrollment` to `getActiveDaysUsedSinceStart` - Renames database table from `experiment_app_usage_entity` to `default_browser_prompts_app_usage` - Renames related classes and methods to be more consistent with the new terminology - Removes experiment-related diagrams that are no longer needed ### Steps to test this PR Code Review only. ### NO UI changes
1 parent 934654c commit 1fb4a93

13 files changed

+129
-442
lines changed

app/src/androidTest/java/com/duckduckgo/app/browser/defaultbrowsing/prompts/store/DefaultBrowserPromptsPrefsDataStoreImplTest.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,22 +64,22 @@ class DefaultBrowserPromptsPrefsDataStoreImplTest {
6464
fun whenExperimentInitializedThenDefaultValueIsNotEnrolled() = runTest {
6565
val testee = DefaultBrowserPromptsPrefsDataStoreImpl(testDataStore, coroutinesTestRule.testDispatcherProvider)
6666

67-
assertEquals(testee.stage.first(), Stage.NOT_ENROLLED)
67+
assertEquals(testee.stage.first(), Stage.NOT_STARTED)
6868
}
6969

7070
@Test
7171
fun whenExperimentStageIsUpdatedThenValueIsPropagated() = runTest {
7272
val testee = DefaultBrowserPromptsPrefsDataStoreImpl(testDataStore, coroutinesTestRule.testDispatcherProvider)
7373
val expectedUpdates = listOf(
74-
Stage.NOT_ENROLLED,
74+
Stage.NOT_STARTED,
7575
Stage.STAGE_1,
7676
)
7777
val actualUpdates = mutableListOf<Stage>()
7878
coroutinesTestRule.testScope.launch {
7979
testee.stage.toList(actualUpdates)
8080
}
8181

82-
testee.storeExperimentStage(Stage.STAGE_1)
82+
testee.storeStage(Stage.STAGE_1)
8383

8484
assertEquals(expectedUpdates, actualUpdates)
8585
}

app/src/main/java/com/duckduckgo/app/browser/defaultbrowsing/prompts/AdditionalDefaultBrowserPromptsImpl.kt

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ import com.duckduckgo.app.browser.defaultbrowsing.prompts.AdditionalDefaultBrows
3131
import com.duckduckgo.app.browser.defaultbrowsing.prompts.store.DefaultBrowserPromptsAppUsageRepository
3232
import com.duckduckgo.app.browser.defaultbrowsing.prompts.store.DefaultBrowserPromptsDataStore
3333
import com.duckduckgo.app.browser.defaultbrowsing.prompts.store.DefaultBrowserPromptsDataStore.Stage
34-
import com.duckduckgo.app.browser.defaultbrowsing.prompts.store.DefaultBrowserPromptsDataStore.Stage.ENROLLED
35-
import com.duckduckgo.app.browser.defaultbrowsing.prompts.store.DefaultBrowserPromptsDataStore.Stage.NOT_ENROLLED
34+
import com.duckduckgo.app.browser.defaultbrowsing.prompts.store.DefaultBrowserPromptsDataStore.Stage.NOT_STARTED
3635
import com.duckduckgo.app.browser.defaultbrowsing.prompts.store.DefaultBrowserPromptsDataStore.Stage.STAGE_1
3736
import com.duckduckgo.app.browser.defaultbrowsing.prompts.store.DefaultBrowserPromptsDataStore.Stage.STAGE_2
3837
import com.duckduckgo.app.browser.defaultbrowsing.prompts.store.DefaultBrowserPromptsDataStore.Stage.STAGE_3
38+
import com.duckduckgo.app.browser.defaultbrowsing.prompts.store.DefaultBrowserPromptsDataStore.Stage.STARTED
3939
import com.duckduckgo.app.browser.defaultbrowsing.prompts.store.DefaultBrowserPromptsDataStore.Stage.STOPPED
4040
import com.duckduckgo.app.di.AppCoroutineScope
4141
import com.duckduckgo.app.global.DefaultRoleBrowserDialog
@@ -205,7 +205,7 @@ class AdditionalDefaultBrowserPromptsImpl @Inject constructor(
205205
appCoroutineScope.launch {
206206
defaultBrowserPromptsDataStore.storeShowSetAsDefaultMessageState(false)
207207
if (doNotShowAgain) {
208-
defaultBrowserPromptsDataStore.storeExperimentStage(STOPPED)
208+
defaultBrowserPromptsDataStore.storeStage(STOPPED)
209209
}
210210
}
211211
}
@@ -244,17 +244,17 @@ class AdditionalDefaultBrowserPromptsImpl @Inject constructor(
244244
}
245245
logcat { "evaluate: DuckDuckGo is default browser. Set the stage to STOPPED." }
246246
STOPPED
247-
} else if (currentStage == NOT_ENROLLED) {
248-
logcat { "evaluate: new stage is ENROLLED" }
249-
ENROLLED
247+
} else if (currentStage == NOT_STARTED) {
248+
logcat { "evaluate: new stage is STARTED" }
249+
STARTED
250250
} else {
251-
logcat { "evaluate: current stage is other than NOT_ENROLLED and DuckDuckGo is NOT default browser." }
252-
val appActiveDaysUsedSinceEnrollment = defaultBrowserPromptsAppUsageRepository.getActiveDaysUsedSinceEnrollment().getOrElse { throwable ->
251+
logcat { "evaluate: current stage is other than NOT_STARTED and DuckDuckGo is NOT default browser." }
252+
val appActiveDaysUsedSinceStart = defaultBrowserPromptsAppUsageRepository.getActiveDaysUsedSinceStart().getOrElse { throwable ->
253253
logcat(ERROR) { throwable.asLog() }
254254
return
255255
}
256256

257-
logcat { "evaluate: active days used since enrollment = $appActiveDaysUsedSinceEnrollment" }
257+
logcat { "evaluate: active days used since flow started = $appActiveDaysUsedSinceStart" }
258258

259259
val configSettings = featureSettings ?: run {
260260
// If feature settings weren't cached before, deserialize and cache them now.
@@ -269,11 +269,11 @@ class AdditionalDefaultBrowserPromptsImpl @Inject constructor(
269269
when (userType) {
270270
DefaultBrowserPromptsDataStore.UserType.NEW -> {
271271
logcat { "evaluate: user is new" }
272-
getNewStageForNewUser(currentStage, appActiveDaysUsedSinceEnrollment, configSettings)
272+
getNewStageForNewUser(currentStage, appActiveDaysUsedSinceStart, configSettings)
273273
}
274274
DefaultBrowserPromptsDataStore.UserType.EXISTING -> {
275275
logcat { "evaluate: user is existing" }
276-
getNewStageForExistingUser(currentStage, appActiveDaysUsedSinceEnrollment, configSettings)
276+
getNewStageForExistingUser(currentStage, appActiveDaysUsedSinceStart, configSettings)
277277
}
278278
else -> {
279279
logcat { "evaluate: user type is not known, skipping evaluation" }
@@ -283,7 +283,7 @@ class AdditionalDefaultBrowserPromptsImpl @Inject constructor(
283283
}
284284

285285
if (newStage != null) {
286-
defaultBrowserPromptsDataStore.storeExperimentStage(newStage)
286+
defaultBrowserPromptsDataStore.storeStage(newStage)
287287

288288
val action = stageEvaluator.evaluate(newStage)
289289
logcat { "evaluate: action = $action show message dialog = ${action.showMessageDialog}" }
@@ -325,7 +325,7 @@ class AdditionalDefaultBrowserPromptsImpl @Inject constructor(
325325
fireInteractionPixel(AppPixelName.SET_AS_DEFAULT_PROMPT_DO_NOT_ASK_AGAIN_CLICK)
326326
appCoroutineScope.launch {
327327
// The user does not want to see the prompt again, so we jump to stage 2.
328-
defaultBrowserPromptsDataStore.storeExperimentStage(STAGE_2)
328+
defaultBrowserPromptsDataStore.storeStage(STAGE_2)
329329
}
330330
}
331331

@@ -406,21 +406,21 @@ class AdditionalDefaultBrowserPromptsImpl @Inject constructor(
406406

407407
private fun getNewStageForNewUser(
408408
currentStage: Stage?,
409-
appActiveDaysUsedSinceEnrollment: Long,
409+
appActiveDaysUsedSinceStart: Long,
410410
configSettings: FeatureSettings,
411411
): Stage? {
412412
return when (currentStage) {
413-
ENROLLED -> {
414-
if (appActiveDaysUsedSinceEnrollment >= configSettings.newUserActiveDaysUntilStage1) {
415-
logcat { "evaluate: user is new, go from ENROLLED to STAGE_1." }
413+
STARTED -> {
414+
if (appActiveDaysUsedSinceStart >= configSettings.newUserActiveDaysUntilStage1) {
415+
logcat { "evaluate: user is new, go from STARTED to STAGE_1." }
416416
STAGE_1
417417
} else {
418418
null
419419
}
420420
}
421421

422422
STAGE_1 -> {
423-
if (appActiveDaysUsedSinceEnrollment >= configSettings.newUserActiveDaysUntilStage2) {
423+
if (appActiveDaysUsedSinceStart >= configSettings.newUserActiveDaysUntilStage2) {
424424
logcat { "evaluate: user is new, go from STAGE_1 to STAGE_2." }
425425
STAGE_2
426426
} else {
@@ -429,7 +429,7 @@ class AdditionalDefaultBrowserPromptsImpl @Inject constructor(
429429
}
430430

431431
STAGE_2 -> {
432-
if (appActiveDaysUsedSinceEnrollment >= configSettings.newUserActiveDaysUntilStage3) {
432+
if (appActiveDaysUsedSinceStart >= configSettings.newUserActiveDaysUntilStage3) {
433433
logcat { "evaluate: user is new, go from STAGE_2 to STAGE_3." }
434434
STAGE_3
435435
} else {
@@ -451,21 +451,21 @@ class AdditionalDefaultBrowserPromptsImpl @Inject constructor(
451451

452452
private fun getNewStageForExistingUser(
453453
currentStage: Stage?,
454-
appActiveDaysUsedSinceEnrollment: Long,
454+
appActiveDaysUsedSinceStart: Long,
455455
configSettings: FeatureSettings,
456456
): Stage? {
457457
return when (currentStage) {
458-
ENROLLED -> {
459-
if (appActiveDaysUsedSinceEnrollment >= configSettings.existingUserActiveDaysUntilStage1) {
460-
logcat { "evaluate: user is existing, go from ENROLLED to STAGE_1." }
458+
STARTED -> {
459+
if (appActiveDaysUsedSinceStart >= configSettings.existingUserActiveDaysUntilStage1) {
460+
logcat { "evaluate: user is existing, go from STARTED to STAGE_1." }
461461
STAGE_1
462462
} else {
463463
null
464464
}
465465
}
466466

467467
STAGE_1 -> {
468-
if (appActiveDaysUsedSinceEnrollment >= configSettings.existingUserActiveDaysUntilStage3) {
468+
if (appActiveDaysUsedSinceStart >= configSettings.existingUserActiveDaysUntilStage3) {
469469
logcat { "evaluate: user is existing, skip STAGE_2 and go from STAGE_1 to STAGE_3." }
470470
STAGE_3
471471
} else {

app/src/main/java/com/duckduckgo/app/browser/defaultbrowsing/prompts/DefaultBrowserPromptsFlowStages.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@
1717
package com.duckduckgo.app.browser.defaultbrowsing.prompts
1818

1919
import com.duckduckgo.app.browser.defaultbrowsing.prompts.store.DefaultBrowserPromptsDataStore.Stage
20-
import com.duckduckgo.app.browser.defaultbrowsing.prompts.store.DefaultBrowserPromptsDataStore.Stage.ENROLLED
21-
import com.duckduckgo.app.browser.defaultbrowsing.prompts.store.DefaultBrowserPromptsDataStore.Stage.NOT_ENROLLED
20+
import com.duckduckgo.app.browser.defaultbrowsing.prompts.store.DefaultBrowserPromptsDataStore.Stage.NOT_STARTED
2221
import com.duckduckgo.app.browser.defaultbrowsing.prompts.store.DefaultBrowserPromptsDataStore.Stage.STAGE_1
2322
import com.duckduckgo.app.browser.defaultbrowsing.prompts.store.DefaultBrowserPromptsDataStore.Stage.STAGE_2
2423
import com.duckduckgo.app.browser.defaultbrowsing.prompts.store.DefaultBrowserPromptsDataStore.Stage.STAGE_3
24+
import com.duckduckgo.app.browser.defaultbrowsing.prompts.store.DefaultBrowserPromptsDataStore.Stage.STARTED
2525
import com.duckduckgo.app.browser.defaultbrowsing.prompts.store.DefaultBrowserPromptsDataStore.Stage.STOPPED
2626
import com.duckduckgo.di.scopes.AppScope
2727
import com.squareup.anvil.annotations.ContributesBinding
@@ -52,9 +52,9 @@ class DefaultBrowserPromptsFlowStageEvaluatorImpl @Inject constructor() : Defaul
5252

5353
override suspend fun evaluate(newStage: Stage): DefaultBrowserPromptsFlowStageAction =
5454
when (newStage) {
55-
NOT_ENROLLED -> DefaultBrowserPromptsFlowStageAction.disableAll
55+
NOT_STARTED -> DefaultBrowserPromptsFlowStageAction.disableAll
5656

57-
ENROLLED -> DefaultBrowserPromptsFlowStageAction.disableAll
57+
STARTED -> DefaultBrowserPromptsFlowStageAction.disableAll
5858

5959
STAGE_1 -> DefaultBrowserPromptsFlowStageAction(
6060
showMessageDialog = true,
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import javax.inject.Qualifier
2929

3030
@ContributesTo(AppScope::class)
3131
@Module
32-
object DefaultBrowserPromptsExperimentModule {
32+
object DefaultBrowserPromptsModule {
3333

3434
private val Context.defaultBrowserPromptsDataStore: DataStore<Preferences> by preferencesDataStore(
3535
name = "default_browser_prompts",
@@ -40,7 +40,7 @@ object DefaultBrowserPromptsExperimentModule {
4040
fun providesDefaultBrowserPromptsDataStore(context: Context): DataStore<Preferences> = context.defaultBrowserPromptsDataStore
4141

4242
@Provides
43-
fun providesExperimentAppUsageDao(database: AppDatabase) = database.experimentAppUsageDao()
43+
fun providesDefaultBrowserPromptsAppUsageDao(database: AppDatabase) = database.defaultBrowserPromptsAppUsageDao()
4444
}
4545

4646
@Qualifier

0 commit comments

Comments
 (0)