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 capabilityOverrides = vectorOverrides.forceHomeserverCapabilities?.firstOrNull()
state.personalizationState.copy(
userId = session.myUserId,
displayName = state.registrationState.selectedMatrixId?.let { MatrixPatterns.extractUserNameFromId(it) },
supportsChangingDisplayName = capabilityOverrides?.canChangeDisplayName ?: homeServerCapabilities.canChangeDisplayName,
supportsChangingProfilePicture = capabilityOverrides?.canChangeAvatar ?: homeServerCapabilities.canChangeAvatar

View File

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

View File

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

View File

@ -687,7 +687,7 @@ class OnboardingViewModelTest {
.assertStatesChanges(
initialState,
{ 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)
.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,
supportsChangingProfilePicture = canChangeAvatar,
displayName = displayName,