1
0
Fork 0

For #2390 - Applies onboarding mode on start

master
Jeff Boek 2019-05-15 20:46:52 -07:00
parent ba3edbcf92
commit b14d0fa80c
3 changed files with 47 additions and 10 deletions

View File

@ -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<SessionControlChange>().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"
}
}

View File

@ -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(

View File

@ -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
}
}