For #26717 - Only show the MR onboarding dialog for existing users

This commit is contained in:
Gabriel Luong 2022-08-30 13:26:47 -04:00 committed by mergify[bot]
parent 8a9c68c872
commit 3507f12484
5 changed files with 37 additions and 7 deletions

View File

@ -385,9 +385,10 @@ class HomeFragment : Fragment() {
updateLayout(binding.root)
sessionControlView = SessionControlView(
binding.sessionControlRecyclerView,
viewLifecycleOwner,
sessionControlInteractor
containerView = binding.sessionControlRecyclerView,
viewLifecycleOwner = viewLifecycleOwner,
interactor = sessionControlInteractor,
onboarding = onboarding,
)
updateSessionControlView()

View File

@ -23,6 +23,7 @@ import org.mozilla.fenix.home.Mode
import org.mozilla.fenix.home.OnboardingState
import org.mozilla.fenix.home.recentbookmarks.RecentBookmark
import org.mozilla.fenix.home.recentvisits.RecentlyVisitedItem
import org.mozilla.fenix.onboarding.FenixOnboarding
import org.mozilla.fenix.onboarding.JumpBackInCFRDialog
import org.mozilla.fenix.onboarding.SyncCFRPresenter
import org.mozilla.fenix.utils.Settings
@ -184,10 +185,21 @@ private fun collectionTabItems(collection: TabCollection) =
AdapterItem.TabInCollectionItem(collection, tab, index == collection.tabs.lastIndex)
}
/**
* Shows a list of Home screen views.
*
* @param containerView The [View] that is used to initialize the Home recycler view.
* @param viewLifecycleOwner [LifecycleOwner] for the view.
* @property interactor [SessionControlInteractor] which will have delegated to all user
* interactions.
* @property onboarding [FenixOnboarding] that is used to determine whether or not the user has
* been onboarded.
*/
class SessionControlView(
val containerView: View,
containerView: View,
viewLifecycleOwner: LifecycleOwner,
internal val interactor: SessionControlInteractor
private val interactor: SessionControlInteractor,
private val onboarding: FenixOnboarding,
) {
val view: RecyclerView = containerView as RecyclerView
@ -229,7 +241,7 @@ class SessionControlView(
}
fun update(state: AppState, shouldReportMetrics: Boolean = false) {
if (view.context.settings().showHomeOnboardingDialog) {
if (view.context.settings().showHomeOnboardingDialog && onboarding.userHasBeenOnboarded()) {
interactor.showOnboardingDialog()
}

View File

@ -11,10 +11,13 @@ import androidx.annotation.VisibleForTesting
import mozilla.components.support.ktx.android.content.PreferencesHolder
import mozilla.components.support.ktx.android.content.intPreference
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.settings
class FenixOnboarding(context: Context) : PreferencesHolder {
private val strictMode = context.components.strictMode
private val settings = context.settings()
override val preferences: SharedPreferences = strictMode.resetAfter(StrictMode.allowThreadDiskReads()) {
context.getSharedPreferences(
PREF_NAME_ONBOARDING_KEY,
@ -25,6 +28,10 @@ class FenixOnboarding(context: Context) : PreferencesHolder {
private var onboardedVersion by intPreference(LAST_VERSION_ONBOARDING_KEY, default = 0)
fun finish() {
// New users that goes through the first run onboarding do not need to see the home
// onboarding dialog.
settings.showHomeOnboardingDialog = false
onboardedVersion = CURRENT_ONBOARDING_VERSION
}

View File

@ -36,7 +36,8 @@ class SessionControlViewTest {
val controller = SessionControlView(
view,
mockk(relaxed = true),
interactor
interactor,
mockk(relaxed = true),
)
val state = AppState()

View File

@ -16,11 +16,13 @@ import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.settings
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
import org.mozilla.fenix.utils.Settings
@RunWith(FenixRobolectricTestRunner::class)
class FenixOnboardingTest {
@ -28,15 +30,18 @@ class FenixOnboardingTest {
private lateinit var onboarding: FenixOnboarding
private lateinit var preferences: SharedPreferences
private lateinit var preferencesEditor: SharedPreferences.Editor
private lateinit var settings: Settings
@Before
fun setup() {
preferences = mockk()
preferencesEditor = mockk(relaxed = true)
settings = mockk(relaxed = true)
val context = mockk<Context>()
every { preferences.edit() } returns preferencesEditor
every { context.components.strictMode } returns TestStrictModeManager() as StrictModeManager
every { context.getSharedPreferences(any(), MODE_PRIVATE) } returns preferences
every { context.settings() } returns settings
onboarding = FenixOnboarding(context)
}
@ -56,7 +61,11 @@ class FenixOnboardingTest {
@Test
fun testFinish() {
settings.showHomeOnboardingDialog = true
onboarding.finish()
assertFalse(settings.showHomeOnboardingDialog)
verify { preferencesEditor.putInt(LAST_VERSION_ONBOARDING_KEY, CURRENT_ONBOARDING_VERSION) }
}
}