Fix performance issue reported by Konsist test Sealed interface used in Composable MUST be Immutable or Stable

This commit is contained in:
Benoit Marty 2024-05-29 18:03:39 +02:00 committed by Benoit Marty
parent 8d3fe2daa5
commit ab6c428a61
6 changed files with 14 additions and 0 deletions

View file

@ -16,6 +16,7 @@
package io.element.android.appnav.room.joined package io.element.android.appnav.room.joined
import androidx.compose.runtime.Immutable
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.di.SessionScope import io.element.android.libraries.di.SessionScope
import io.element.android.libraries.di.SingleIn import io.element.android.libraries.di.SingleIn
@ -31,6 +32,7 @@ import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.stateIn
import javax.inject.Inject import javax.inject.Inject
@Immutable
sealed interface LoadingRoomState { sealed interface LoadingRoomState {
data object Loading : LoadingRoomState data object Loading : LoadingRoomState
data object Error : LoadingRoomState data object Error : LoadingRoomState

View file

@ -42,6 +42,7 @@ data class JoinRoomState(
} }
} }
@Immutable
sealed interface ContentState { sealed interface ContentState {
data class Loading(val roomIdOrAlias: RoomIdOrAlias) : ContentState data class Loading(val roomIdOrAlias: RoomIdOrAlias) : ContentState
data class Failure(val roomIdOrAlias: RoomIdOrAlias, val error: Throwable) : ContentState data class Failure(val roomIdOrAlias: RoomIdOrAlias, val error: Throwable) : ContentState

View file

@ -16,6 +16,7 @@
package io.element.android.features.messages.impl.attachments.preview package io.element.android.features.messages.impl.attachments.preview
import androidx.compose.runtime.Immutable
import io.element.android.features.messages.impl.attachments.Attachment import io.element.android.features.messages.impl.attachments.Attachment
data class AttachmentsPreviewState( data class AttachmentsPreviewState(
@ -24,8 +25,11 @@ data class AttachmentsPreviewState(
val eventSink: (AttachmentsPreviewEvents) -> Unit val eventSink: (AttachmentsPreviewEvents) -> Unit
) )
@Immutable
sealed interface SendActionState { sealed interface SendActionState {
data object Idle : SendActionState data object Idle : SendActionState
@Immutable
sealed interface Sending : SendActionState { sealed interface Sending : SendActionState {
data object Processing : Sending data object Processing : Sending
data class Uploading(val progress: Float) : Sending data class Uploading(val progress: Float) : Sending

View file

@ -16,8 +16,10 @@
package io.element.android.features.messages.impl.sender package io.element.android.features.messages.impl.sender
import androidx.compose.runtime.Immutable
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
@Immutable
sealed interface SenderNameMode { sealed interface SenderNameMode {
data class Timeline(val mainColor: Color) : SenderNameMode data class Timeline(val mainColor: Color) : SenderNameMode
data object Reply : SenderNameMode data object Reply : SenderNameMode

View file

@ -16,6 +16,7 @@
package io.element.android.features.roomdetails.impl 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.leaveroom.api.LeaveRoomState
import io.element.android.features.userprofile.shared.UserProfileState import io.element.android.features.userprofile.shared.UserProfileState
import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomAlias
@ -45,11 +46,13 @@ data class RoomDetailsState(
val eventSink: (RoomDetailsEvent) -> Unit val eventSink: (RoomDetailsEvent) -> Unit
) )
@Immutable
sealed interface RoomDetailsType { sealed interface RoomDetailsType {
data object Room : RoomDetailsType data object Room : RoomDetailsType
data class Dm(val roomMember: RoomMember) : RoomDetailsType data class Dm(val roomMember: RoomMember) : RoomDetailsType
} }
@Immutable
sealed interface RoomTopicState { sealed interface RoomTopicState {
data object Hidden : RoomTopicState data object Hidden : RoomTopicState
data object CanAddTopic : RoomTopicState data object CanAddTopic : RoomTopicState

View file

@ -17,8 +17,10 @@
package io.element.android.libraries.matrix.api.core package io.element.android.libraries.matrix.api.core
import android.os.Parcelable import android.os.Parcelable
import androidx.compose.runtime.Immutable
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
@Immutable
sealed interface RoomIdOrAlias : Parcelable { sealed interface RoomIdOrAlias : Parcelable {
@Parcelize @Parcelize
@JvmInline @JvmInline