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" />
+
+
+ app:layout_constraintTop_toBottomOf="@id/accountCreatedSpace4" />
+
+
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@id/ctaBottomBarrier" />