For #26717 - Only show the MR onboarding dialog for existing users
This commit is contained in:
parent
8a9c68c872
commit
3507f12484
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -36,7 +36,8 @@ class SessionControlViewTest {
|
|||
val controller = SessionControlView(
|
||||
view,
|
||||
mockk(relaxed = true),
|
||||
interactor
|
||||
interactor,
|
||||
mockk(relaxed = true),
|
||||
)
|
||||
|
||||
val state = AppState()
|
||||
|
|
|
@ -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) }
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue