From ab6c428a616b173ff5aa985fcf4dc1f05d9fd3ab Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 29 May 2024 18:03:39 +0200 Subject: [PATCH] Fix performance issue reported by Konsist test `Sealed interface used in Composable MUST be Immutable or Stable` --- .../io/element/android/appnav/room/joined/LoadingRoomState.kt | 2 ++ .../element/android/features/joinroom/impl/JoinRoomState.kt | 1 + .../impl/attachments/preview/AttachmentsPreviewState.kt | 4 ++++ .../android/features/messages/impl/sender/SenderNameMode.kt | 2 ++ .../android/features/roomdetails/impl/RoomDetailsState.kt | 3 +++ .../android/libraries/matrix/api/core/RoomIdOrAlias.kt | 2 ++ 6 files changed, 14 insertions(+) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/joined/LoadingRoomState.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/joined/LoadingRoomState.kt index dbc190354f..73c5b9f4b8 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/joined/LoadingRoomState.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/joined/LoadingRoomState.kt @@ -16,6 +16,7 @@ package io.element.android.appnav.room.joined +import androidx.compose.runtime.Immutable import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.libraries.di.SessionScope import io.element.android.libraries.di.SingleIn @@ -31,6 +32,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import javax.inject.Inject +@Immutable sealed interface LoadingRoomState { data object Loading : LoadingRoomState data object Error : LoadingRoomState diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt index 0f849aac24..905d5dd2d1 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt @@ -42,6 +42,7 @@ data class JoinRoomState( } } +@Immutable sealed interface ContentState { data class Loading(val roomIdOrAlias: RoomIdOrAlias) : ContentState data class Failure(val roomIdOrAlias: RoomIdOrAlias, val error: Throwable) : ContentState diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/preview/AttachmentsPreviewState.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/preview/AttachmentsPreviewState.kt index ad44a1368e..8b013f165a 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/preview/AttachmentsPreviewState.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/preview/AttachmentsPreviewState.kt @@ -16,6 +16,7 @@ package io.element.android.features.messages.impl.attachments.preview +import androidx.compose.runtime.Immutable import io.element.android.features.messages.impl.attachments.Attachment data class AttachmentsPreviewState( @@ -24,8 +25,11 @@ data class AttachmentsPreviewState( val eventSink: (AttachmentsPreviewEvents) -> Unit ) +@Immutable sealed interface SendActionState { data object Idle : SendActionState + + @Immutable sealed interface Sending : SendActionState { data object Processing : Sending data class Uploading(val progress: Float) : Sending diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameMode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameMode.kt index 6b83480650..c61033500a 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameMode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/sender/SenderNameMode.kt @@ -16,8 +16,10 @@ package io.element.android.features.messages.impl.sender +import androidx.compose.runtime.Immutable import androidx.compose.ui.graphics.Color +@Immutable sealed interface SenderNameMode { data class Timeline(val mainColor: Color) : SenderNameMode data object Reply : SenderNameMode diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt index 43605eb7b6..aee1694e93 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsState.kt @@ -16,6 +16,7 @@ package io.element.android.features.roomdetails.impl +import androidx.compose.runtime.Immutable import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.userprofile.shared.UserProfileState import io.element.android.libraries.matrix.api.core.RoomAlias @@ -45,11 +46,13 @@ data class RoomDetailsState( val eventSink: (RoomDetailsEvent) -> Unit ) +@Immutable sealed interface RoomDetailsType { data object Room : RoomDetailsType data class Dm(val roomMember: RoomMember) : RoomDetailsType } +@Immutable sealed interface RoomTopicState { data object Hidden : RoomTopicState data object CanAddTopic : RoomTopicState diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/core/RoomIdOrAlias.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/core/RoomIdOrAlias.kt index 5dd4117b0a..f7377d77c2 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/core/RoomIdOrAlias.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/core/RoomIdOrAlias.kt @@ -17,8 +17,10 @@ package io.element.android.libraries.matrix.api.core import android.os.Parcelable +import androidx.compose.runtime.Immutable import kotlinx.parcelize.Parcelize +@Immutable sealed interface RoomIdOrAlias : Parcelable { @Parcelize @JvmInline