Bug 1809998 - Part 3: Add an OnboardingView for displaying the list of onboarding cards

fenix/115.2.0
Gabriel Luong 1 year ago committed by mergify[bot]
parent 9b77eb348a
commit 28727ccb99

@ -23,12 +23,8 @@ import org.mozilla.fenix.home.Mode
import org.mozilla.fenix.home.recentbookmarks.RecentBookmark
import org.mozilla.fenix.home.recentvisits.RecentlyVisitedItem
import org.mozilla.fenix.messaging.FenixMessageSurfaceId
import org.mozilla.fenix.nimbus.OnboardingPanel
import org.mozilla.fenix.onboarding.HomeCFRPresenter
import org.mozilla.fenix.onboarding.OnboardingState
import org.mozilla.fenix.onboarding.view.OnboardingAdapterItem
import org.mozilla.fenix.utils.Settings
import org.mozilla.fenix.nimbus.Onboarding as OnboardingConfig
// This method got a little complex with the addition of the tab tray feature flag
// When we remove the tabs from the home screen this will get much simpler again.
@ -130,35 +126,6 @@ private fun showCollections(
private fun privateModeAdapterItems() = listOf(AdapterItem.PrivateBrowsingDescription)
@Suppress("UnusedPrivateMember")
private fun onboardingAdapterItems(
onboardingState: OnboardingState,
onboardingConfig: OnboardingConfig,
): List<OnboardingAdapterItem> {
val items: MutableList<OnboardingAdapterItem> = mutableListOf(OnboardingAdapterItem.OnboardingHeader)
onboardingConfig.order.forEach {
when (it) {
OnboardingPanel.THEMES -> items.add(OnboardingAdapterItem.OnboardingThemePicker)
OnboardingPanel.TOOLBAR_PLACEMENT -> items.add(OnboardingAdapterItem.OnboardingToolbarPositionPicker)
// Customize FxA items based on where we are with the account state:
OnboardingPanel.SYNC -> if (onboardingState == OnboardingState.SignedOutNoAutoSignIn) {
items.add(OnboardingAdapterItem.OnboardingManualSignIn)
}
OnboardingPanel.TCP -> items.add(OnboardingAdapterItem.OnboardingTrackingProtection)
OnboardingPanel.PRIVACY_NOTICE -> items.add(OnboardingAdapterItem.OnboardingPrivacyNotice)
}
}
items.addAll(
listOf(
OnboardingAdapterItem.OnboardingFinish,
OnboardingAdapterItem.BottomSpacer,
),
)
return items
}
private fun AppState.toAdapterList(settings: Settings): List<AdapterItem> = when (mode) {
is Mode.Normal -> normalModeAdapterItems(
settings,

@ -0,0 +1,74 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.onboarding.view
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import org.mozilla.fenix.nimbus.OnboardingPanel
import org.mozilla.fenix.onboarding.OnboardingState
import org.mozilla.fenix.onboarding.interactor.OnboardingInteractor
import org.mozilla.fenix.nimbus.Onboarding as OnboardingConfig
/**
* Shows a list of onboarding cards.
*/
class OnboardingView(
containerView: RecyclerView,
interactor: OnboardingInteractor,
) {
private val onboardingAdapter = OnboardingAdapter(interactor)
init {
containerView.apply {
adapter = onboardingAdapter
layoutManager = LinearLayoutManager(containerView.context)
}
}
/**
* Updates the display of the onboarding cards based on the given [OnboardingState].
*
* @param onboardingState The new user onboarding page state.
* @param onboardingConfig The new user onboarding page configuration.
*/
fun update(
onboardingState: OnboardingState,
onboardingConfig: OnboardingConfig,
) {
onboardingAdapter.submitList(onboardingAdapterItems(onboardingState, onboardingConfig))
}
private fun onboardingAdapterItems(
onboardingState: OnboardingState,
onboardingConfig: OnboardingConfig,
): List<OnboardingAdapterItem> {
val items: MutableList<OnboardingAdapterItem> =
mutableListOf(OnboardingAdapterItem.OnboardingHeader)
onboardingConfig.order.forEach {
when (it) {
OnboardingPanel.THEMES -> items.add(OnboardingAdapterItem.OnboardingThemePicker)
OnboardingPanel.TOOLBAR_PLACEMENT -> items.add(OnboardingAdapterItem.OnboardingToolbarPositionPicker)
// Customize FxA items based on where we are with the account state:
OnboardingPanel.SYNC -> if (onboardingState == OnboardingState.SignedOutNoAutoSignIn) {
items.add(OnboardingAdapterItem.OnboardingManualSignIn)
}
OnboardingPanel.TCP -> items.add(OnboardingAdapterItem.OnboardingTrackingProtection)
OnboardingPanel.PRIVACY_NOTICE -> items.add(OnboardingAdapterItem.OnboardingPrivacyNotice)
}
}
items.addAll(
listOf(
OnboardingAdapterItem.OnboardingFinish,
OnboardingAdapterItem.BottomSpacer,
),
)
return items
}
}
Loading…
Cancel
Save