1
0
Fork 0
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:
Konstantin Ivanov 2025-05-13 22:23:06 +02:00 committed by konstantiniiv
parent 94042fe4b9
commit a52bd6f4ae
11 changed files with 443 additions and 264 deletions

View file

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

View file

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