Merge pull request #5508 from element-hq/feature/bma/noUriInComposeState

Replace Uri by String in States that are used in Composable function.
This commit is contained in:
Benoit Marty 2025-10-13 15:32:39 +02:00 committed by GitHub
commit d441c43993
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 78 additions and 87 deletions

View file

@ -61,11 +61,11 @@ class RoomDetailsEditPresenter(
val cameraPermissionState = cameraPermissionPresenter.present()
val roomSyncUpdateFlow = room.syncUpdateFlow.collectAsState()
val roomAvatarUri = room.avatarUrl()?.toUri()
var roomAvatarUriEdited by rememberSaveable { mutableStateOf<Uri?>(null) }
val roomAvatarUri = room.avatarUrl()
var roomAvatarUriEdited by rememberSaveable { mutableStateOf<String?>(null) }
LaunchedEffect(roomAvatarUri) {
// Every time the roomAvatar change (from sync), we can set the new avatar.
temporaryUriDeleter.delete(roomAvatarUriEdited)
temporaryUriDeleter.delete(roomAvatarUriEdited?.toUri())
roomAvatarUriEdited = roomAvatarUri
}
@ -107,16 +107,16 @@ class RoomDetailsEditPresenter(
val cameraPhotoPicker = mediaPickerProvider.registerCameraPhotoPicker(
onResult = { uri ->
if (uri != null) {
temporaryUriDeleter.delete(roomAvatarUriEdited)
roomAvatarUriEdited = uri
temporaryUriDeleter.delete(roomAvatarUriEdited?.toUri())
roomAvatarUriEdited = uri.toString()
}
}
)
val galleryImagePicker = mediaPickerProvider.registerGalleryImagePicker(
onResult = { uri ->
if (uri != null) {
temporaryUriDeleter.delete(roomAvatarUriEdited)
roomAvatarUriEdited = uri
temporaryUriDeleter.delete(roomAvatarUriEdited?.toUri())
roomAvatarUriEdited = uri.toString()
}
}
)
@ -147,8 +147,8 @@ class RoomDetailsEditPresenter(
newNameTrimmed = roomRawNameEdited.trim(),
currentTopicTrimmed = roomTopicTrimmed,
newTopicTrimmed = roomTopicEdited.trim(),
currentAvatar = roomAvatarUri,
newAvatarUri = roomAvatarUriEdited,
currentAvatar = roomAvatarUri?.toUri(),
newAvatarUri = roomAvatarUriEdited?.toUri(),
action = saveAction,
)
is RoomDetailsEditEvents.HandleAvatarAction -> {
@ -161,7 +161,7 @@ class RoomDetailsEditPresenter(
cameraPermissionState.eventSink(PermissionsEvents.RequestPermissions)
}
AvatarAction.Remove -> {
temporaryUriDeleter.delete(roomAvatarUriEdited)
temporaryUriDeleter.delete(roomAvatarUriEdited?.toUri())
roomAvatarUriEdited = null
}
}

View file

@ -7,16 +7,12 @@
package io.element.android.features.roomdetails.impl.edit
import android.net.Uri
import androidx.compose.runtime.Immutable
import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.ui.media.AvatarAction
import io.element.android.libraries.permissions.api.PermissionsState
import kotlinx.collections.immutable.ImmutableList
// Annotate with @Immutable since `Uri` is unstable
@Immutable
data class RoomDetailsEditState(
val roomId: RoomId,
/** The raw room name (i.e. the room name from the state event `m.room.name`), not the display name. */
@ -24,7 +20,7 @@ data class RoomDetailsEditState(
val canChangeName: Boolean,
val roomTopic: String,
val canChangeTopic: Boolean,
val roomAvatarUrl: Uri?,
val roomAvatarUrl: String?,
val canChangeAvatar: Boolean,
val avatarActions: ImmutableList<AvatarAction>,
val saveButtonEnabled: Boolean,

View file

@ -7,9 +7,7 @@
package io.element.android.features.roomdetails.impl.edit
import android.net.Uri
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import androidx.core.net.toUri
import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.ui.media.AvatarAction
@ -23,7 +21,7 @@ open class RoomDetailsEditStateProvider : PreviewParameterProvider<RoomDetailsEd
aRoomDetailsEditState(),
aRoomDetailsEditState(roomTopic = ""),
aRoomDetailsEditState(roomRawName = ""),
aRoomDetailsEditState(roomAvatarUrl = "example://uri".toUri()),
aRoomDetailsEditState(roomAvatarUrl = "example://uri"),
aRoomDetailsEditState(canChangeName = true, canChangeTopic = false, canChangeAvatar = true, saveButtonEnabled = false),
aRoomDetailsEditState(canChangeName = false, canChangeTopic = true, canChangeAvatar = false, saveButtonEnabled = false),
aRoomDetailsEditState(saveAction = AsyncAction.Loading),
@ -37,7 +35,7 @@ fun aRoomDetailsEditState(
canChangeName: Boolean = true,
roomTopic: String = "a room topic that is quite long so should wrap onto multiple lines",
canChangeTopic: Boolean = true,
roomAvatarUrl: Uri? = null,
roomAvatarUrl: String? = null,
canChangeAvatar: Boolean = true,
avatarActions: List<AvatarAction> = emptyList(),
saveButtonEnabled: Boolean = true,