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) observeTabSelection(requireComponents.core.store)
lifecycleScope.launch(IO) { if (!onboarding.userHasBeenOnboarded()) {
if (!onboarding.userHasBeenOnboarded()) { observeTabSource(requireComponents.core.store)
observeTabSource(requireComponents.core.store)
}
} }
requireContext().accessibilityManager.addAccessibilityStateChangeListener(this) requireContext().accessibilityManager.addAccessibilityStateChangeListener(this)

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

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

Loading…
Cancel
Save