Avoid using ActiveSessionHolder in a Fragment. Move the userId to state.personalizationState

This commit is contained in:
Benoit Marty 2022-09-23 15:54:30 +02:00 committed by Benoit Marty
parent 36e5166051
commit b5eb15c7e3
4 changed files with 8 additions and 8 deletions

View File

@ -641,6 +641,7 @@ class OnboardingViewModel @AssistedInject constructor(
val homeServerCapabilities = session.homeServerCapabilitiesService().getHomeServerCapabilities() val homeServerCapabilities = session.homeServerCapabilitiesService().getHomeServerCapabilities()
val capabilityOverrides = vectorOverrides.forceHomeserverCapabilities?.firstOrNull() val capabilityOverrides = vectorOverrides.forceHomeserverCapabilities?.firstOrNull()
state.personalizationState.copy( state.personalizationState.copy(
userId = session.myUserId,
displayName = state.registrationState.selectedMatrixId?.let { MatrixPatterns.extractUserNameFromId(it) }, displayName = state.registrationState.selectedMatrixId?.let { MatrixPatterns.extractUserNameFromId(it) },
supportsChangingDisplayName = capabilityOverrides?.canChangeDisplayName ?: homeServerCapabilities.canChangeDisplayName, supportsChangingDisplayName = capabilityOverrides?.canChangeDisplayName ?: homeServerCapabilities.canChangeDisplayName,
supportsChangingProfilePicture = capabilityOverrides?.canChangeAvatar ?: homeServerCapabilities.canChangeAvatar supportsChangingProfilePicture = capabilityOverrides?.canChangeAvatar ?: homeServerCapabilities.canChangeAvatar

View File

@ -78,10 +78,11 @@ data class SelectedHomeserverState(
@Parcelize @Parcelize
data class PersonalizationState( data class PersonalizationState(
val userId: String = "",
val supportsChangingDisplayName: Boolean = false, val supportsChangingDisplayName: Boolean = false,
val supportsChangingProfilePicture: Boolean = false, val supportsChangingProfilePicture: Boolean = false,
val displayName: String? = null, val displayName: String? = null,
val selectedPictureUri: Uri? = null val selectedPictureUri: Uri? = null,
) : Parcelable { ) : Parcelable {
fun supportsPersonalization() = supportsChangingDisplayName || supportsChangingProfilePicture fun supportsPersonalization() = supportsChangingDisplayName || supportsChangingProfilePicture

View File

@ -26,7 +26,6 @@ import androidx.core.view.isInvisible
import com.airbnb.mvrx.withState import com.airbnb.mvrx.withState
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import im.vector.app.R import im.vector.app.R
import im.vector.app.core.di.ActiveSessionHolder
import im.vector.app.core.dialogs.GalleryOrCameraDialogHelper import im.vector.app.core.dialogs.GalleryOrCameraDialogHelper
import im.vector.app.core.dialogs.GalleryOrCameraDialogHelperFactory import im.vector.app.core.dialogs.GalleryOrCameraDialogHelperFactory
import im.vector.app.databinding.FragmentFtueProfilePictureBinding import im.vector.app.databinding.FragmentFtueProfilePictureBinding
@ -42,7 +41,6 @@ class FtueAuthChooseProfilePictureFragment :
AbstractFtueAuthFragment<FragmentFtueProfilePictureBinding>(), AbstractFtueAuthFragment<FragmentFtueProfilePictureBinding>(),
GalleryOrCameraDialogHelper.Listener { GalleryOrCameraDialogHelper.Listener {
@Inject lateinit var activeSessionHolder: ActiveSessionHolder
@Inject lateinit var galleryOrCameraDialogHelperFactory: GalleryOrCameraDialogHelperFactory @Inject lateinit var galleryOrCameraDialogHelperFactory: GalleryOrCameraDialogHelperFactory
@Inject lateinit var avatarRenderer: AvatarRenderer @Inject lateinit var avatarRenderer: AvatarRenderer
@ -85,10 +83,9 @@ class FtueAuthChooseProfilePictureFragment :
views.profilePictureSubmit.isEnabled = hasSetPicture views.profilePictureSubmit.isEnabled = hasSetPicture
views.changeProfilePictureIcon.setImageResource(if (hasSetPicture) R.drawable.ic_edit else R.drawable.ic_camera_plain) views.changeProfilePictureIcon.setImageResource(if (hasSetPicture) R.drawable.ic_edit else R.drawable.ic_camera_plain)
val session = activeSessionHolder.getActiveSession()
val matrixItem = MatrixItem.UserItem( val matrixItem = MatrixItem.UserItem(
id = session.myUserId, id = state.personalizationState.userId,
displayName = state.personalizationState.displayName ?: "" displayName = state.personalizationState.displayName.orEmpty()
) )
avatarRenderer.render(matrixItem, localUri = state.personalizationState.selectedPictureUri, imageView = views.profilePictureView) avatarRenderer.render(matrixItem, localUri = state.personalizationState.selectedPictureUri, imageView = views.profilePictureView)
} }

View File

@ -687,7 +687,7 @@ class OnboardingViewModelTest {
.assertStatesChanges( .assertStatesChanges(
initialState, initialState,
{ copy(isLoading = true) }, { copy(isLoading = true) },
{ copy(isLoading = false, personalizationState = A_HOMESERVER_CAPABILITIES.toPersonalisationState(A_USERNAME)) } { copy(isLoading = false, personalizationState = A_HOMESERVER_CAPABILITIES.toPersonalisationState(A_MATRIX_ID, A_USERNAME)) }
) )
.assertEvents(OnboardingViewEvents.OnAccountCreated) .assertEvents(OnboardingViewEvents.OnAccountCreated)
.finish() .finish()
@ -1196,7 +1196,8 @@ class OnboardingViewModelTest {
} }
} }
private fun HomeServerCapabilities.toPersonalisationState(displayName: String? = null) = PersonalizationState( private fun HomeServerCapabilities.toPersonalisationState(userId: String, displayName: String? = null) = PersonalizationState(
userId = userId,
supportsChangingDisplayName = canChangeDisplayName, supportsChangingDisplayName = canChangeDisplayName,
supportsChangingProfilePicture = canChangeAvatar, supportsChangingProfilePicture = canChangeAvatar,
displayName = displayName, displayName = displayName,