Skip to content

Commit e765872

Browse files
authored
Revert "initialize VisualDesignExperimentDataStore on a worker thread" (#6184)
Task/Issue URL: https://app.asana.com/1/137249556945/project/1208671518894266/task/1210473006294609?focus=true Reverts #6181, as it causes a crash when using the Fire Button
1 parent 8a0dba0 commit e765872

File tree

6 files changed

+21
-301
lines changed

6 files changed

+21
-301
lines changed

app/src/main/java/com/duckduckgo/app/browser/omnibar/experiments/FadeOmnibarLayout.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import com.duckduckgo.app.browser.omnibar.Omnibar.ViewMode
4444
import com.duckduckgo.app.browser.omnibar.OmnibarLayout
4545
import com.duckduckgo.app.browser.omnibar.OmnibarLayoutViewModel.ViewState
4646
import com.duckduckgo.app.browser.omnibar.model.OmnibarPosition
47+
import com.duckduckgo.common.ui.experiments.visual.store.VisualDesignExperimentDataStore
4748
import com.duckduckgo.common.ui.view.gone
4849
import com.duckduckgo.common.ui.view.hide
4950
import com.duckduckgo.common.ui.view.show
@@ -63,6 +64,9 @@ class FadeOmnibarLayout @JvmOverloads constructor(
6364
defStyle: Int = 0,
6465
) : OmnibarLayout(context, attrs, defStyle) {
6566

67+
@Inject
68+
lateinit var experimentDataStore: VisualDesignExperimentDataStore
69+
6670
@Inject
6771
lateinit var globalActivityStarter: GlobalActivityStarter
6872

app/src/main/java/com/duckduckgo/app/launch/LaunchBridgeActivity.kt

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,35 +20,26 @@ import android.os.Bundle
2020
import androidx.activity.result.ActivityResult
2121
import androidx.activity.result.contract.ActivityResultContracts
2222
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
23-
import androidx.lifecycle.ViewModelProvider
2423
import androidx.lifecycle.lifecycleScope
2524
import com.duckduckgo.anvil.annotations.InjectWith
2625
import com.duckduckgo.app.browser.BrowserActivity
2726
import com.duckduckgo.app.browser.R
2827
import com.duckduckgo.app.onboarding.ui.OnboardingActivity
29-
import com.duckduckgo.common.ui.experiments.visual.store.VisualDesignExperimentDataStoreInitializer
28+
import com.duckduckgo.common.ui.DuckDuckGoActivity
3029
import com.duckduckgo.daxprompts.api.DaxPromptBrowserComparisonNoParams
3130
import com.duckduckgo.daxprompts.api.DaxPromptDuckPlayerNoParams
3231
import com.duckduckgo.daxprompts.impl.ui.DaxPromptBrowserComparisonActivity.Companion.DAX_PROMPT_BROWSER_COMPARISON_SET_DEFAULT_EXTRA
3332
import com.duckduckgo.daxprompts.impl.ui.DaxPromptDuckPlayerActivity.Companion.DAX_PROMPT_DUCK_PLAYER_ACTIVITY_URL_EXTRA
3433
import com.duckduckgo.di.scopes.ActivityScope
3534
import com.duckduckgo.navigation.api.GlobalActivityStarter
36-
import dagger.android.AndroidInjection
37-
import dagger.android.DaggerActivity
3835
import javax.inject.Inject
3936
import kotlinx.coroutines.launch
4037
import logcat.logcat
4138

4239
@InjectWith(ActivityScope::class)
43-
class LaunchBridgeActivity : DaggerActivity() {
40+
class LaunchBridgeActivity : DuckDuckGoActivity() {
4441

45-
@Inject lateinit var visualDesignExperimentDataStoreInitializer: VisualDesignExperimentDataStoreInitializer
46-
47-
@Inject lateinit var viewModelFactory: ViewModelProvider.NewInstanceFactory
48-
49-
private val viewModel: LaunchViewModel by lazy {
50-
ViewModelProvider(this, viewModelFactory)[LaunchViewModel::class.java]
51-
}
42+
private val viewModel: LaunchViewModel by bindViewModel()
5243

5344
private val startDaxPromptDuckPlayerActivityForResult =
5445
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
@@ -78,7 +69,6 @@ class LaunchBridgeActivity : DaggerActivity() {
7869
lateinit var globalActivityStarter: GlobalActivityStarter
7970

8071
override fun onCreate(savedInstanceState: Bundle?) {
81-
AndroidInjection.inject(this, bindingKey = DaggerActivity::class.java)
8272
val splashScreen = installSplashScreen()
8373
super.onCreate(savedInstanceState)
8474
splashScreen.setKeepOnScreenCondition { true }
@@ -87,10 +77,7 @@ class LaunchBridgeActivity : DaggerActivity() {
8777

8878
configureObservers()
8979

90-
lifecycleScope.launch {
91-
visualDesignExperimentDataStoreInitializer.initialize()
92-
viewModel.determineViewToShow()
93-
}
80+
lifecycleScope.launch { viewModel.determineViewToShow() }
9481
}
9582

9683
private fun configureObservers() {

common/common-ui/src/main/java/com/duckduckgo/common/ui/experiments/visual/store/VisualDesignExperimentDataStore.kt

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,6 @@ package com.duckduckgo.common.ui.experiments.visual.store
1818

1919
import kotlinx.coroutines.flow.StateFlow
2020

21-
interface VisualDesignExperimentDataStoreInitializer {
22-
/**
23-
* Initializes the [VisualDesignExperimentDataStore].
24-
*
25-
* This is a special, idempotent function to be called while the splash screen is visible to pre-warm the store and allow for non-blocking, synchronous access afterwards.
26-
*/
27-
suspend fun initialize(): VisualDesignExperimentDataStore
28-
}
29-
3021
interface VisualDesignExperimentDataStore {
3122

3223
/**

common/common-ui/src/main/java/com/duckduckgo/common/ui/experiments/visual/store/VisualDesignExperimentDataStoreImpl.kt

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ import com.duckduckgo.feature.toggles.api.FeatureTogglesInventory
2424
import com.duckduckgo.feature.toggles.api.Toggle
2525
import com.duckduckgo.privacy.config.api.PrivacyConfigCallbackPlugin
2626
import com.squareup.anvil.annotations.ContributesBinding
27+
import com.squareup.anvil.annotations.ContributesMultibinding
28+
import dagger.SingleInstanceIn
2729
import javax.inject.Inject
2830
import kotlinx.coroutines.CoroutineScope
2931
import kotlinx.coroutines.flow.MutableStateFlow
@@ -35,7 +37,13 @@ import kotlinx.coroutines.flow.stateIn
3537
import kotlinx.coroutines.launch
3638
import kotlinx.coroutines.runBlocking
3739

38-
class VisualDesignExperimentDataStoreImpl(
40+
@ContributesBinding(
41+
scope = AppScope::class,
42+
boundType = VisualDesignExperimentDataStore::class,
43+
)
44+
@ContributesMultibinding(scope = AppScope::class, boundType = PrivacyConfigCallbackPlugin::class)
45+
@SingleInstanceIn(scope = AppScope::class)
46+
class VisualDesignExperimentDataStoreImpl @Inject constructor(
3947
@AppCoroutineScope private val appCoroutineScope: CoroutineScope,
4048
private val experimentalUIThemingFeature: ExperimentalUIThemingFeature,
4149
private val featureTogglesInventory: FeatureTogglesInventory,
@@ -83,6 +91,10 @@ class VisualDesignExperimentDataStoreImpl(
8391
initialValue = _duckAIFeatureFlagEnabled.value && isExperimentEnabled.value,
8492
)
8593

94+
/**
95+
* This is a blocking call but it only blocks the main thread when the class initializes, so when the splash screen is visible.
96+
* All subsequent calls are moved off of the main thread.
97+
*/
8698
private fun isAnyConflictingExperimentEnabled(): Boolean = runBlocking {
8799
val activeExperimentsNames = featureTogglesInventory.getAllActiveExperimentToggles().map { it.featureName().name }
88100
conflictingExperimentsNames.any { activeExperimentsNames.contains(it) }
@@ -115,30 +127,3 @@ class VisualDesignExperimentDataStoreImpl(
115127
}
116128
}
117129
}
118-
119-
/**
120-
* Factory for integration with [VisualDesignExperimentDataStoreLazyProvider] and testing purposes,
121-
* to get an actual instance for your use case just inject [VisualDesignExperimentDataStore].
122-
*/
123-
interface VisualDesignExperimentDataStoreImplFactory {
124-
fun create(
125-
appCoroutineScope: CoroutineScope,
126-
experimentalUIThemingFeature: ExperimentalUIThemingFeature,
127-
featureTogglesInventory: FeatureTogglesInventory,
128-
): VisualDesignExperimentDataStoreImpl
129-
}
130-
131-
@ContributesBinding(scope = AppScope::class)
132-
class VisualDesignExperimentDataStoreImplFactoryImpl @Inject constructor() : VisualDesignExperimentDataStoreImplFactory {
133-
override fun create(
134-
appCoroutineScope: CoroutineScope,
135-
experimentalUIThemingFeature: ExperimentalUIThemingFeature,
136-
featureTogglesInventory: FeatureTogglesInventory,
137-
): VisualDesignExperimentDataStoreImpl {
138-
return VisualDesignExperimentDataStoreImpl(
139-
appCoroutineScope = appCoroutineScope,
140-
experimentalUIThemingFeature = experimentalUIThemingFeature,
141-
featureTogglesInventory = featureTogglesInventory,
142-
)
143-
}
144-
}

common/common-ui/src/main/java/com/duckduckgo/common/ui/experiments/visual/store/VisualDesignExperimentDataStoreLazyProvider.kt

Lines changed: 0 additions & 114 deletions
This file was deleted.

0 commit comments

Comments
 (0)