diff --git a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewModel.kt b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewModel.kt index 413745f98c..2688c2e811 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewModel.kt @@ -48,6 +48,7 @@ import im.vector.app.features.login.ReAuthHelper import im.vector.app.features.login.ServerType import im.vector.app.features.login.SignMode import kotlinx.coroutines.Job +import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.launch import org.matrix.android.sdk.api.MatrixPatterns.getDomain import org.matrix.android.sdk.api.auth.AuthenticationService @@ -80,6 +81,7 @@ class OnboardingViewModel @AssistedInject constructor( private val stringProvider: StringProvider, private val homeServerHistoryService: HomeServerHistoryService, private val vectorFeatures: VectorFeatures, + private val vectorOverrides: VectorOverrides, private val analyticsTracker: AnalyticsTracker, private val uriFilenameResolver: UriFilenameResolver, private val vectorOverrides: VectorOverrides @@ -762,15 +764,24 @@ class OnboardingViewModel @AssistedInject constructor( authenticationService.reset() session.configureAndStart(applicationContext) - setState { - copy( - asyncLoginAction = Success(Unit) - ) - } when (isAccountCreated) { - true -> _viewEvents.post(OnboardingViewEvents.OnAccountCreated) - false -> _viewEvents.post(OnboardingViewEvents.OnAccountSignedIn) + true -> { + val homeServerCapabilities = session.getHomeServerCapabilities() + val capabilityOverrides = vectorOverrides.forceHomeserverCapabilities()?.firstOrNull() + val personalizationState = state.personalizationState.copy( + supportsChangingDisplayName = capabilityOverrides?.canChangeDisplayName ?: homeServerCapabilities.canChangeDisplayName, + supportsChangingProfilePicture = capabilityOverrides?.canChangeAvatar ?: homeServerCapabilities.canChangeAvatar + ) + setState { + copy(asyncLoginAction = Success(Unit), personalizationState = personalizationState) + } + _viewEvents.post(OnboardingViewEvents.OnAccountCreated) + } + false -> { + setState { copy(asyncLoginAction = Success(Unit)) } + _viewEvents.post(OnboardingViewEvents.OnAccountSignedIn) + } } } diff --git a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewState.kt b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewState.kt index bd5d93ae4d..76c6998b1f 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewState.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewState.kt @@ -97,6 +97,11 @@ enum class OnboardingFlow { @Parcelize data class PersonalizationState( + val supportsChangingDisplayName: Boolean = false, + val supportsChangingProfilePicture: Boolean = false, val displayName: String? = null, val selectedPictureUri: Uri? = null -) : Parcelable +) : Parcelable { + + fun supportsPersonalization() = supportsChangingDisplayName || supportsChangingProfilePicture +} diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthAccountCreatedFragment.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthAccountCreatedFragment.kt index d021fd2813..ec2ad12f8d 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthAccountCreatedFragment.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthAccountCreatedFragment.kt @@ -20,11 +20,13 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.view.isVisible import im.vector.app.R import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.databinding.FragmentFtueAccountCreatedBinding import im.vector.app.features.onboarding.OnboardingAction import im.vector.app.features.onboarding.OnboardingViewEvents +import im.vector.app.features.onboarding.OnboardingViewState import javax.inject.Inject class FtueAuthAccountCreatedFragment @Inject constructor( @@ -44,6 +46,13 @@ class FtueAuthAccountCreatedFragment @Inject constructor( views.accountCreatedSubtitle.text = getString(R.string.ftue_account_created_subtitle, activeSessionHolder.getActiveSession().myUserId) views.accountCreatedPersonalize.debouncedClicks { viewModel.handle(OnboardingAction.PostViewEvent(OnboardingViewEvents.OnPersonalizeProfile)) } views.accountCreatedTakeMeHome.debouncedClicks { viewModel.handle(OnboardingAction.PostViewEvent(OnboardingViewEvents.OnTakeMeHome)) } + views.accountCreatedTakeMeHomeCta.debouncedClicks { viewModel.handle(OnboardingAction.PostViewEvent(OnboardingViewEvents.OnTakeMeHome)) } + } + + override fun updateWithState(state: OnboardingViewState) { + val canPersonalize = state.personalizationState.supportsPersonalization() + views.personalizeButtonGroup.isVisible = canPersonalize + views.takeMeHomeButtonGroup.isVisible = !canPersonalize } override fun resetViewModel() { diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthVariant.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthVariant.kt index 6eb2933e00..fc9eeb4334 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthVariant.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthVariant.kt @@ -230,7 +230,7 @@ class FtueAuthVariant( FtueAuthUseCaseFragment::class.java, option = commonOption) } - OnboardingViewEvents.OnAccountCreated -> onAccountCreated() + is OnboardingViewEvents.OnAccountCreated -> onAccountCreated() OnboardingViewEvents.OnAccountSignedIn -> onAccountSignedIn() OnboardingViewEvents.OnPersonalizeProfile -> onPersonalizeProfile() OnboardingViewEvents.OnTakeMeHome -> navigateToHome(createdAccount = true) @@ -399,15 +399,11 @@ class FtueAuthVariant( } private fun onAccountCreated() { - if (vectorFeatures.isOnboardingPersonalizeEnabled()) { - activity.supportFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE) - activity.replaceFragment( - views.loginFragmentContainer, - FtueAuthAccountCreatedFragment::class.java, - ) - } else { - navigateToHome(createdAccount = true) - } + activity.supportFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE) + activity.replaceFragment( + views.loginFragmentContainer, + FtueAuthAccountCreatedFragment::class.java + ) } private fun navigateToHome(createdAccount: Boolean) { diff --git a/vector/src/main/res/layout/fragment_ftue_account_created.xml b/vector/src/main/res/layout/fragment_ftue_account_created.xml index 1985af1d5e..65bcdf2b63 100644 --- a/vector/src/main/res/layout/fragment_ftue_account_created.xml +++ b/vector/src/main/res/layout/fragment_ftue_account_created.xml @@ -86,6 +86,14 @@ app:layout_constraintBottom_toTopOf="@id/accountCreatedPersonalize" app:layout_constraintTop_toBottomOf="@id/accountCreatedSubtitle" /> + +