diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlView.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlView.kt index e88aee21f4..2f50a9494b 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlView.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlView.kt @@ -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 { - val items: MutableList = 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 = when (mode) { is Mode.Normal -> normalModeAdapterItems( settings, diff --git a/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingView.kt b/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingView.kt new file mode 100644 index 0000000000..50fdd9cf6e --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingView.kt @@ -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 { + val items: MutableList = + 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 + } +}