diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index a2dddf3c3..5e7592de5 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -57,6 +57,8 @@ import org.mozilla.fenix.lib.Do import org.mozilla.fenix.mvi.ActionBusFactory import org.mozilla.fenix.mvi.getAutoDisposeObservable import org.mozilla.fenix.mvi.getManagedEmitter +import org.mozilla.fenix.onboarding.FenixOnboarding +import org.mozilla.fenix.onboarding.Onboarding import org.mozilla.fenix.settings.SupportUtils import org.mozilla.fenix.utils.ItsNotBrokenSnack import kotlin.coroutines.CoroutineContext @@ -70,6 +72,7 @@ class HomeFragment : Fragment(), CoroutineScope { var deleteSessionJob: (suspend () -> Unit)? = null + private val onboarding by lazy { FenixOnboarding(requireContext()) } private lateinit var sessionControlComponent: SessionControlComponent private lateinit var job: Job @@ -86,7 +89,8 @@ class HomeFragment : Fragment(), CoroutineScope { ): View? { job = Job() val view = inflater.inflate(R.layout.fragment_home, container, false) - val mode = if ((activity as HomeActivity).browsingModeManager.isPrivate) Mode.Private else Mode.Normal + + val mode = currentMode() sessionControlComponent = SessionControlComponent( view.homeLayout, @@ -220,7 +224,7 @@ class HomeFragment : Fragment(), CoroutineScope { } } - val mode = if ((activity as HomeActivity).browsingModeManager.isPrivate) Mode.Private else Mode.Normal + val mode = currentMode() getManagedEmitter().onNext(SessionControlChange.ModeChange(mode)) emitSessionChanges() @@ -495,10 +499,15 @@ class HomeFragment : Fragment(), CoroutineScope { } } + private fun currentMode(): Mode = if (!onboarding.userHasBeenOnboarded()) { + Mode.Onboarding + } else if ((activity as HomeActivity).browsingModeManager.isPrivate) { + Mode.Private + } else { Mode.Normal } + companion object { private const val toolbarPaddingDp = 12f private const val KEY_TABS = "tabs" private const val KEY_COLLECTIONS = "collections" - private const val KEY_MODE = "mode" } } diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlComponent.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlComponent.kt index df768de92..ac8c6aeea 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlComponent.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlComponent.kt @@ -58,16 +58,10 @@ data class TabCollection( var expanded: Boolean = false ) : Parcelable -sealed class FirefoxAcocuntsState { - object SignedOut : FirefoxAcocuntsState() - data class AutoSignedIn(val email: String) : FirefoxAcocuntsState() - data class SignedIn(val email: String) : FirefoxAcocuntsState() -} - sealed class Mode { object Normal : Mode() object Private : Mode() - data class Onboarding(val firefoxAccountsState: FirefoxAcocuntsState) : Mode() + object Onboarding : Mode() } data class SessionControlState( diff --git a/app/src/main/java/org/mozilla/fenix/onboarding/FenixOnboarding.kt b/app/src/main/java/org/mozilla/fenix/onboarding/FenixOnboarding.kt new file mode 100644 index 000000000..806760d1a --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/onboarding/FenixOnboarding.kt @@ -0,0 +1,34 @@ +/* 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 + +import android.content.Context +import android.content.SharedPreferences + +class FenixOnboarding(private val context: Context) { + private val onboardingPrefs = context.applicationContext.getSharedPreferences( + OnboardingKeys.PREF_NAME.key, + Context.MODE_PRIVATE + ) + + private var SharedPreferences.onboardedVersion: Int + get() = getInt(OnboardingKeys.LAST_VERSION.key, 0) + set(version) { edit().putInt(OnboardingKeys.LAST_VERSION.key, version).apply() } + + fun finish() { + onboardingPrefs.onboardedVersion = CURRENT_ONBOARDING_VERSION + } + + fun userHasBeenOnboarded(): Boolean = onboardingPrefs.onboardedVersion == CURRENT_ONBOARDING_VERSION + + private enum class OnboardingKeys(val key: String) { + PREF_NAME("fenix.onboarding"), + LAST_VERSION("fenix.onboarding.last_version") + } + + companion object { + private const val CURRENT_ONBOARDING_VERSION = 1 + } +}