Closes #17045: Crash caused by calling consumeFlow on wrong thread

upstream-sync
Christian Sadilek 4 years ago
parent 80d54c435f
commit 5157a3f50e

@ -230,10 +230,8 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler,
observeTabSelection(requireComponents.core.store)
lifecycleScope.launch(IO) {
if (!onboarding.userHasBeenOnboarded()) {
observeTabSource(requireComponents.core.store)
}
if (!onboarding.userHasBeenOnboarded()) {
observeTabSource(requireComponents.core.store)
}
requireContext().accessibilityManager.addAccessibilityStateChangeListener(this)

@ -6,6 +6,7 @@ package org.mozilla.fenix.onboarding
import android.content.Context
import android.content.SharedPreferences
import android.os.StrictMode
import androidx.annotation.VisibleForTesting
import mozilla.components.support.ktx.android.content.PreferencesHolder
import mozilla.components.support.ktx.android.content.intPreference
@ -15,10 +16,13 @@ import org.mozilla.fenix.ext.components
class FenixOnboarding(context: Context) : PreferencesHolder {
private val metrics = context.components.analytics.metrics
override val preferences: SharedPreferences = context.getSharedPreferences(
PREF_NAME_ONBOARDING_KEY,
Context.MODE_PRIVATE
)
private val strictMode = context.components.strictMode
override val preferences: SharedPreferences = strictMode.resetAfter(StrictMode.allowThreadDiskReads()) {
context.getSharedPreferences(
PREF_NAME_ONBOARDING_KEY,
Context.MODE_PRIVATE
)
}
private var onboardedVersion by intPreference(LAST_VERSION_ONBOARDING_KEY, default = 0)
@ -27,7 +31,11 @@ class FenixOnboarding(context: Context) : PreferencesHolder {
metrics.track(Event.DismissedOnboarding)
}
fun userHasBeenOnboarded() = onboardedVersion == CURRENT_ONBOARDING_VERSION
fun userHasBeenOnboarded(): Boolean {
return strictMode.resetAfter(StrictMode.allowThreadDiskReads()) {
onboardedVersion == CURRENT_ONBOARDING_VERSION
}
}
companion object {
/**

@ -14,12 +14,17 @@ import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.metrics.MetricController
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
import org.mozilla.fenix.helpers.perf.TestStrictModeManager
import org.mozilla.fenix.onboarding.FenixOnboarding.Companion.CURRENT_ONBOARDING_VERSION
import org.mozilla.fenix.onboarding.FenixOnboarding.Companion.LAST_VERSION_ONBOARDING_KEY
import org.mozilla.fenix.perf.StrictModeManager
@RunWith(FenixRobolectricTestRunner::class)
class FenixOnboardingTest {
private lateinit var onboarding: FenixOnboarding
@ -36,6 +41,7 @@ class FenixOnboardingTest {
every { preferences.edit() } returns preferencesEditor
every { metrics.track(any()) } returns Unit
every { context.components.analytics.metrics } returns metrics
every { context.components.strictMode } returns TestStrictModeManager() as StrictModeManager
every { context.getSharedPreferences(any(), MODE_PRIVATE) } returns preferences
onboarding = FenixOnboarding(context)

Loading…
Cancel
Save