Bug 1809998 - Part 3: Add an OnboardingView for displaying the list of onboarding cards
parent
9b77eb348a
commit
28727ccb99
@ -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…
Reference in New Issue