mirror of
https://github.com/anyproto/anytype-kotlin.git
synced 2025-06-08 05:47:05 +09:00
DROID-3629 Onboarding | Flow update (#2397)
This commit is contained in:
parent
94042fe4b9
commit
a52bd6f4ae
11 changed files with 443 additions and 264 deletions
|
@ -6,6 +6,7 @@ import androidx.lifecycle.viewModelScope
|
|||
import com.anytypeio.anytype.analytics.base.Analytics
|
||||
import com.anytypeio.anytype.analytics.base.EventsDictionary
|
||||
import com.anytypeio.anytype.core_models.Id
|
||||
import com.anytypeio.anytype.core_models.NetworkModeConfig
|
||||
import com.anytypeio.anytype.core_models.primitives.SpaceId
|
||||
import com.anytypeio.anytype.domain.auth.interactor.GetMnemonic
|
||||
import com.anytypeio.anytype.domain.config.ConfigStorage
|
||||
|
@ -57,24 +58,35 @@ class OnboardingMnemonicViewModel @Inject constructor(
|
|||
type = EventsDictionary.ClickOnboardingButton.CHECK_LATER,
|
||||
step = EventsDictionary.ScreenOnboardingStep.PHRASE
|
||||
)
|
||||
viewModelScope.launch {
|
||||
val config = configStorage.getOrNull()
|
||||
if (config != null) {
|
||||
analytics.sendOpenAccountEvent(
|
||||
analytics = config.analytics
|
||||
)
|
||||
} else {
|
||||
Timber.w("config was missing before the end of onboarding")
|
||||
}
|
||||
if (!startingObject.isNullOrEmpty()) {
|
||||
if (shouldShowEmail()) {
|
||||
viewModelScope.launch {
|
||||
commands.emit(
|
||||
Command.OpenStartingObject(
|
||||
space = SpaceId(space),
|
||||
startingObject = startingObject
|
||||
Command.NavigateToAddEmailScreen(
|
||||
startingObject = startingObject,
|
||||
space = space
|
||||
)
|
||||
)
|
||||
} else {
|
||||
commands.emit(Command.OpenVault)
|
||||
}
|
||||
} else {
|
||||
viewModelScope.launch {
|
||||
val config = configStorage.getOrNull()
|
||||
if (config != null) {
|
||||
analytics.sendOpenAccountEvent(
|
||||
analytics = config.analytics
|
||||
)
|
||||
} else {
|
||||
Timber.w("config was missing before the end of onboarding")
|
||||
}
|
||||
if (!startingObject.isNullOrEmpty()) {
|
||||
commands.emit(
|
||||
Command.OpenStartingObject(
|
||||
space = SpaceId(space),
|
||||
startingObject = startingObject
|
||||
)
|
||||
)
|
||||
} else {
|
||||
commands.emit(Command.OpenVault)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -83,28 +95,44 @@ class OnboardingMnemonicViewModel @Inject constructor(
|
|||
space: Id,
|
||||
startingObject: Id?,
|
||||
) {
|
||||
viewModelScope.launch {
|
||||
val config = configStorage.getOrNull()
|
||||
if (config != null) {
|
||||
analytics.sendOpenAccountEvent(
|
||||
analytics = config.analytics
|
||||
)
|
||||
} else {
|
||||
Timber.w("config was missing before the end of onboarding")
|
||||
}
|
||||
if (!startingObject.isNullOrEmpty()) {
|
||||
if (shouldShowEmail()) {
|
||||
viewModelScope.launch {
|
||||
commands.emit(
|
||||
Command.OpenStartingObject(
|
||||
space = SpaceId(space),
|
||||
startingObject = startingObject
|
||||
Command.NavigateToAddEmailScreen(
|
||||
startingObject = startingObject,
|
||||
space = space
|
||||
)
|
||||
)
|
||||
} else {
|
||||
commands.emit(Command.OpenVault)
|
||||
}
|
||||
} else {
|
||||
viewModelScope.launch {
|
||||
val config = configStorage.getOrNull()
|
||||
if (config != null) {
|
||||
analytics.sendOpenAccountEvent(
|
||||
analytics = config.analytics
|
||||
)
|
||||
} else {
|
||||
Timber.w("config was missing before the end of onboarding")
|
||||
}
|
||||
if (!startingObject.isNullOrEmpty()) {
|
||||
commands.emit(
|
||||
Command.OpenStartingObject(
|
||||
space = SpaceId(space),
|
||||
startingObject = startingObject
|
||||
)
|
||||
)
|
||||
} else {
|
||||
commands.emit(Command.OpenVault)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun shouldShowEmail(): Boolean {
|
||||
//todo: update with Local Only config
|
||||
return true
|
||||
}
|
||||
|
||||
private suspend fun proceedWithMnemonicPhrase() {
|
||||
getMnemonic.invoke(Unit).proceed(
|
||||
failure = { e -> Timber.e(e, "Error while getting mnemonic") },
|
||||
|
@ -145,5 +173,9 @@ class OnboardingMnemonicViewModel @Inject constructor(
|
|||
val space: SpaceId,
|
||||
val startingObject: Id
|
||||
) : Command()
|
||||
data class NavigateToAddEmailScreen(
|
||||
val startingObject: String?,
|
||||
val space: String
|
||||
) : Command()
|
||||
}
|
||||
}
|
|
@ -28,6 +28,8 @@ import com.anytypeio.anytype.presentation.BuildConfig
|
|||
import com.anytypeio.anytype.presentation.common.BaseViewModel
|
||||
import com.anytypeio.anytype.presentation.extension.proceedWithAccountEvent
|
||||
import com.anytypeio.anytype.presentation.extension.sendAnalyticsOnboardingScreenEvent
|
||||
import com.anytypeio.anytype.presentation.extension.sendOpenAccountEvent
|
||||
import com.anytypeio.anytype.presentation.onboarding.signup.OnboardingSetProfileNameViewModel.Navigation.OpenStartingObject
|
||||
import com.anytypeio.anytype.presentation.spaces.SpaceGradientProvider
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.delay
|
||||
|
@ -71,11 +73,7 @@ class OnboardingSetProfileNameViewModel @Inject constructor(
|
|||
) {
|
||||
if (state.value !is ScreenState.Loading) {
|
||||
viewModelScope.launch {
|
||||
navigation.emit(
|
||||
Navigation.NavigateToAddEmailScreen(
|
||||
name = name
|
||||
)
|
||||
)
|
||||
proceedWithCreatingWallet(name)
|
||||
}
|
||||
} else {
|
||||
sendToast(LOADING_MSG)
|
||||
|
@ -256,27 +254,54 @@ class OnboardingSetProfileNameViewModel @Inject constructor(
|
|||
//region Email screen
|
||||
fun onEmailContinueClicked(
|
||||
email: String,
|
||||
name: String,
|
||||
space: Id,
|
||||
startingObject: String?
|
||||
) {
|
||||
proceedWithSettingEmail(email = email)
|
||||
if (state.value !is ScreenState.Loading) {
|
||||
proceedWithCreatingWallet(
|
||||
name = name
|
||||
)
|
||||
} else {
|
||||
if (state.value is ScreenState.Loading) {
|
||||
sendToast(LOADING_MSG)
|
||||
return
|
||||
}
|
||||
state.value = ScreenState.Loading
|
||||
proceedWithSettingEmail(email = email)
|
||||
proceedWithNavigation(space, startingObject)
|
||||
}
|
||||
|
||||
fun onEmailSkippedClicked(
|
||||
name: String
|
||||
space: Id,
|
||||
startingObject: String?
|
||||
) {
|
||||
if (state.value !is ScreenState.Loading) {
|
||||
proceedWithCreatingWallet(
|
||||
name = name
|
||||
if (state.value is ScreenState.Loading) {
|
||||
sendToast(LOADING_MSG)
|
||||
return
|
||||
}
|
||||
state.value = ScreenState.Loading
|
||||
proceedWithNavigation(space, startingObject)
|
||||
}
|
||||
|
||||
private fun proceedWithNavigation(space: Id, startingObject: String?) {
|
||||
viewModelScope.launch {
|
||||
sendOpenAccountAnalytics()
|
||||
if (!startingObject.isNullOrEmpty()) {
|
||||
navigation.emit(
|
||||
OpenStartingObject(
|
||||
space = SpaceId(space),
|
||||
startingObject = startingObject
|
||||
)
|
||||
)
|
||||
} else {
|
||||
navigation.emit(Navigation.OpenVault)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun sendOpenAccountAnalytics() {
|
||||
val config = configStorage.getOrNull()
|
||||
if (config != null) {
|
||||
analytics.sendOpenAccountEvent(
|
||||
analytics = config.analytics
|
||||
)
|
||||
} else {
|
||||
sendToast(LOADING_MSG)
|
||||
Timber.w("config was missing before the end of onboarding")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -288,12 +313,12 @@ class OnboardingSetProfileNameViewModel @Inject constructor(
|
|||
)
|
||||
viewModelScope.launch {
|
||||
setMembershipEmail.async(params).fold(
|
||||
onSuccess = { Timber.d("Email set") },
|
||||
onSuccess = { Timber.d("Email set successfully") },
|
||||
onFailure = { error ->
|
||||
Timber.e(error, "Error setting email")
|
||||
if (BuildConfig.DEBUG) {
|
||||
sendToast("Error setting email")
|
||||
sendToast("Error setting email: ${error.message}")
|
||||
}
|
||||
Timber.e("Error setting email: $error")
|
||||
}
|
||||
)
|
||||
}
|
||||
|
@ -348,10 +373,12 @@ class OnboardingSetProfileNameViewModel @Inject constructor(
|
|||
|
||||
sealed class Navigation {
|
||||
data class NavigateToMnemonic(val space: SpaceId, val startingObject: Id?): Navigation()
|
||||
data class NavigateToAddEmailScreen(
|
||||
val name: String
|
||||
) : Navigation()
|
||||
data object GoBack: Navigation()
|
||||
data class OpenStartingObject(
|
||||
val space: SpaceId,
|
||||
val startingObject: Id
|
||||
) : Navigation()
|
||||
data object OpenVault : Navigation()
|
||||
}
|
||||
|
||||
sealed class ScreenState {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue