Skip to content

Commit c0e2247

Browse files
authored
Android: NewTabLegacyPage onboardingComplete logic incomplete (#5923)
Task/Issue URL: https://app.asana.com/1/137249556945/project/1200581511062568/task/1209979916234701?focus=true ### Description Added a few conditions for when onboarding is considered complete in NewTabLegacyPageViewModel: `noBrowserCtas` toggle enabled or tips hidden or add widget dismissed. ### Steps to test this PR - [x] Fresh install from this branch. - [x] Skip onboarding. - [x] You should see the new tab with the Dax icon and no flickering. ### NO UI changes
1 parent 215403e commit c0e2247

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

app/src/main/java/com/duckduckgo/app/browser/newtab/NewTabLegacyPageViewModel.kt

+9-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ import com.duckduckgo.anvil.annotations.ContributesViewModel
2525
import com.duckduckgo.app.browser.remotemessage.CommandActionMapper
2626
import com.duckduckgo.app.cta.db.DismissedCtaDao
2727
import com.duckduckgo.app.cta.model.CtaId
28+
import com.duckduckgo.app.onboarding.ui.page.extendedonboarding.ExtendedOnboardingFeatureToggles
29+
import com.duckduckgo.app.settings.db.SettingsDataStore
2830
import com.duckduckgo.common.utils.DispatcherProvider
2931
import com.duckduckgo.common.utils.playstore.PlayStoreUtils
3032
import com.duckduckgo.di.scopes.ViewScope
@@ -58,6 +60,8 @@ class NewTabLegacyPageViewModel @Inject constructor(
5860
private val syncEngine: SyncEngine,
5961
private val commandActionMapper: CommandActionMapper,
6062
private val dismissedCtaDao: DismissedCtaDao,
63+
private val extendedOnboardingFeatureToggles: ExtendedOnboardingFeatureToggles,
64+
private val settingsDataStore: SettingsDataStore,
6165
) : ViewModel(), DefaultLifecycleObserver {
6266

6367
data class ViewState(
@@ -133,7 +137,11 @@ class NewTabLegacyPageViewModel @Inject constructor(
133137
// We only want to show New Tab when the Home CTAs from Onboarding has finished
134138
// https://app.asana.com/0/1157893581871903/1207769731595075/f
135139
private fun isHomeOnboardingComplete(): Boolean {
136-
return dismissedCtaDao.exists(CtaId.DAX_END)
140+
val noBrowserCtaExperiment = extendedOnboardingFeatureToggles.noBrowserCtas().isEnabled()
141+
return dismissedCtaDao.exists(CtaId.DAX_END) ||
142+
noBrowserCtaExperiment ||
143+
settingsDataStore.hideTips ||
144+
dismissedCtaDao.exists(CtaId.ADD_WIDGET)
137145
}
138146

139147
fun onMessageShown() {

app/src/test/java/com/duckduckgo/app/browser/newtab/NewTabLegacyPageViewModelTest.kt

+12
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,12 @@ import com.duckduckgo.app.browser.newtab.NewTabLegacyPageViewModel.Command
2222
import com.duckduckgo.app.browser.remotemessage.CommandActionMapper
2323
import com.duckduckgo.app.cta.db.DismissedCtaDao
2424
import com.duckduckgo.app.cta.model.CtaId.DAX_END
25+
import com.duckduckgo.app.onboarding.store.UserStageStore
26+
import com.duckduckgo.app.onboarding.ui.page.extendedonboarding.ExtendedOnboardingFeatureToggles
27+
import com.duckduckgo.app.settings.db.SettingsDataStore
2528
import com.duckduckgo.common.test.CoroutineTestRule
2629
import com.duckduckgo.common.utils.playstore.PlayStoreUtils
30+
import com.duckduckgo.feature.toggles.api.Toggle
2731
import com.duckduckgo.remote.messaging.api.Action
2832
import com.duckduckgo.remote.messaging.api.Content
2933
import com.duckduckgo.remote.messaging.api.RemoteMessage
@@ -38,6 +42,7 @@ import org.junit.Assert.assertTrue
3842
import org.junit.Before
3943
import org.junit.Rule
4044
import org.junit.Test
45+
import org.mockito.kotlin.doReturn
4146
import org.mockito.kotlin.mock
4247
import org.mockito.kotlin.verify
4348
import org.mockito.kotlin.whenever
@@ -54,11 +59,16 @@ class NewTabLegacyPageViewModelTest {
5459
private var mockPlaystoreUtils: PlayStoreUtils = mock()
5560
private var mockRemoteMessageModel: RemoteMessageModel = mock()
5661
private var mockDismissedCtaDao: DismissedCtaDao = mock()
62+
private val mockExtendedOnboardingFeatureToggles: ExtendedOnboardingFeatureToggles = mock()
63+
private val mockSettingsDataStore: SettingsDataStore = mock()
64+
private val mockUserStageStore: UserStageStore = mock()
5765

5866
private lateinit var testee: NewTabLegacyPageViewModel
5967

6068
@Before
6169
fun setUp() {
70+
val mockDisabledToggle: Toggle = mock { on { it.isEnabled() } doReturn false }
71+
whenever(mockExtendedOnboardingFeatureToggles.noBrowserCtas()).thenReturn(mockDisabledToggle)
6272
whenever(mockSavedSitesRepository.getFavorites()).thenReturn(flowOf(emptyList()))
6373
whenever(mockRemoteMessageModel.getActiveMessages()).thenReturn(flowOf(null))
6474

@@ -70,6 +80,8 @@ class NewTabLegacyPageViewModelTest {
7080
syncEngine = mockSyncEngine,
7181
commandActionMapper = mockCommandActionMapper,
7282
dismissedCtaDao = mockDismissedCtaDao,
83+
extendedOnboardingFeatureToggles = mockExtendedOnboardingFeatureToggles,
84+
settingsDataStore = mockSettingsDataStore,
7385
)
7486
}
7587

0 commit comments

Comments
 (0)