Skip to content

Commit

Permalink
Merge pull request #1731 from vector-im/feature/bma/variousCleanup
Browse files Browse the repository at this point in the history
Konsist: check if sealed class could be sealed interface
  • Loading branch information
bmarty authored Nov 3, 2023
2 parents f37c0f4 + 6fda11a commit fe69db3
Show file tree
Hide file tree
Showing 30 changed files with 148 additions and 59 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@

package io.element.android.features.lockscreen.impl.pin.model

import androidx.compose.runtime.Immutable

@Immutable
sealed interface PinDigit {
data object Empty : PinDigit
data class Filled(val value: Char) : PinDigit
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,9 +170,8 @@ private fun CustomSheetState.getIntOffset(): Int? = try {
null
}

private sealed class Slot {
data class SheetContent(val key: Int?) : Slot()
data object DragHandle : Slot()
data object Scaffold : Slot()
private sealed interface Slot {
data class SheetContent(val key: Int?) : Slot
data object DragHandle : Slot
data object Scaffold : Slot
}

Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import android.Manifest
import android.annotation.SuppressLint
import android.net.Uri
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.getValue
Expand Down Expand Up @@ -409,6 +410,7 @@ class MessageComposerPresenter @Inject constructor(
}
}

@Immutable
sealed interface RoomMemberSuggestion {
data object Room : RoomMemberSuggestion
data class Member(val roomMember: RoomMember) : RoomMemberSuggestion
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import androidx.compose.foundation.shape.CornerSize
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
Expand Down Expand Up @@ -103,11 +104,12 @@ fun MessagesReactionButton(
}
}

sealed class MessagesReactionsButtonContent {
data class Text(val text: String) : MessagesReactionsButtonContent()
data class Icon(@DrawableRes val resourceId: Int) : MessagesReactionsButtonContent()
@Immutable
sealed interface MessagesReactionsButtonContent {
data class Text(val text: String) : MessagesReactionsButtonContent
data class Icon(@DrawableRes val resourceId: Int) : MessagesReactionsButtonContent

data class Reaction(val reaction: AggregatedReaction) : MessagesReactionsButtonContent()
data class Reaction(val reaction: AggregatedReaction) : MessagesReactionsButtonContent

val isHighlighted get() = this is Reaction && reaction.isHighlighted
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@

package io.element.android.features.messages.impl.timeline.model.event

import androidx.compose.runtime.Immutable

@Immutable
sealed interface TimelineItemStateContent : TimelineItemEventContent {
val body: String
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@

package io.element.android.features.messages.impl.timeline.model.event

import androidx.compose.runtime.Immutable
import org.jsoup.nodes.Document

@Immutable
sealed interface TimelineItemTextBasedContent : TimelineItemEventContent {
val body: String
val htmlDocument: Document?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ import android.os.SystemClock
class FirstThrottler(private val minimumInterval: Long = 800) {
private var lastDate = 0L

sealed class CanHandleResult {
data object Yes : CanHandleResult()
data class No(val shouldWaitMillis: Long) : CanHandleResult()
sealed interface CanHandleResult {
data object Yes : CanHandleResult
data class No(val shouldWaitMillis: Long) : CanHandleResult

fun waitMillis(): Long {
return when (this) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,16 @@ package io.element.android.libraries.designsystem.components.button

import androidx.compose.material3.Icon
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
import io.element.android.libraries.designsystem.theme.components.Button
import io.element.android.libraries.designsystem.theme.components.IconButton
import io.element.android.libraries.designsystem.theme.components.IconSource
import io.element.android.libraries.designsystem.theme.components.TextButton

/**
* A sealed class that represents the different visual styles that a button can have.
* A sealed interface that represents the different visual styles that a button can have.
*/
@Immutable
sealed interface ButtonVisuals {

val action: () -> Unit
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package io.element.android.libraries.designsystem.components.list
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.widthIn
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.DpSize
Expand All @@ -34,6 +35,7 @@ import io.element.android.libraries.designsystem.theme.components.Text as TextCo
/**
* This is a helper to set default leading and trailing content for [ListItem]s.
*/
@Immutable
sealed interface ListItemContent {
/**
* Default Switch content for [ListItem].
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
Expand Down Expand Up @@ -238,6 +239,7 @@ private fun ButtonInternal(
}
}

@Immutable
sealed interface IconSource {
val contentDescription: String?

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.LocalTextStyle
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
Expand Down Expand Up @@ -134,6 +135,7 @@ fun ListItem(
/**
* The style to use for a [ListItem].
*/
@Immutable
sealed interface ListItemStyle {
data object Default : ListItemStyle
data object Primary : ListItemStyle
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.ExperimentalTextApi
Expand Down Expand Up @@ -82,6 +83,7 @@ fun ListSupportingText(
object ListSupportingTextDefaults {

/** Specifies the padding to use for the supporting text. */
@Immutable
sealed interface Padding {
/** No padding. */
data object None : Padding
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import androidx.compose.material3.SearchBarColors
import androidx.compose.material3.SearchBarDefaults
import androidx.compose.material3.TextFieldDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
Expand Down Expand Up @@ -180,6 +181,7 @@ object ElementSearchBarDefaults {
)
}

@Immutable
sealed interface SearchBarResultState<in T> {
/** No search results are available yet (e.g. because the user hasn't entered a search term). */
class NotSearching<T> : SearchBarResultState<T>
Expand Down
2 changes: 1 addition & 1 deletion libraries/matrix/api/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
*/

plugins {
id("io.element.android-library")
id("io.element.android-compose-library")
id("kotlin-parcelize")
alias(libs.plugins.anvil)
kotlin("plugin.serialization") version "1.9.10"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,14 @@ import android.net.Uri
* This sealed class represents all the permalink cases.
* You don't have to instantiate yourself but should use [PermalinkParser] instead.
*/
sealed class PermalinkData {
sealed interface PermalinkData {

data class RoomLink(
val roomIdOrAlias: String,
val isRoomAlias: Boolean,
val eventId: String?,
val viaParameters: List<String>
) : PermalinkData()
) : PermalinkData

/*
* &room_name=Team2
Expand All @@ -47,9 +47,9 @@ sealed class PermalinkData {
val token: String,
val privateKey: String,
val roomType: String?
) : PermalinkData()
) : PermalinkData

data class UserLink(val userId: String) : PermalinkData()
data class UserLink(val userId: String) : PermalinkData

data class FallbackLink(val uri: Uri, val isLegacyGroupLink: Boolean = false) : PermalinkData()
data class FallbackLink(val uri: Uri, val isLegacyGroupLink: Boolean = false) : PermalinkData
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@

package io.element.android.libraries.matrix.api.room

import androidx.compose.runtime.Immutable

@Immutable
sealed interface MatrixRoomMembersState {
data object Unknown : MatrixRoomMembersState
data class Pending(val prevRoomMembers: List<RoomMember>? = null) : MatrixRoomMembersState
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ import kotlin.time.Duration
* Can be retrieved from [RoomListService] methods.
*/
interface RoomList {
sealed class LoadingState {
data object NotLoaded : LoadingState()
data class Loaded(val numberOfRooms: Int) : LoadingState()
sealed interface LoadingState {
data object NotLoaded : LoadingState
data class Loaded(val numberOfRooms: Int) : LoadingState
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,16 @@ import kotlinx.coroutines.flow.StateFlow
*/
interface RoomListService {

sealed class State {
data object Idle : State()
data object Running : State()
data object Error : State()
data object Terminated : State()
sealed interface State {
data object Idle : State
data object Running : State
data object Error : State
data object Terminated : State
}

sealed class SyncIndicator {
data object Show : SyncIndicator()
data object Hide : SyncIndicator()
sealed interface SyncIndicator {
data object Show : SyncIndicator
data object Hide : SyncIndicator
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

package io.element.android.libraries.matrix.api.tracing

sealed class WriteToFilesConfiguration {
data object Disabled : WriteToFilesConfiguration()
data class Enabled(val directory: String, val filenamePrefix: String) : WriteToFilesConfiguration()
sealed interface WriteToFilesConfiguration {
data object Disabled : WriteToFilesConfiguration
data class Enabled(val directory: String, val filenamePrefix: String) : WriteToFilesConfiguration
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,10 @@ import android.net.Uri
import androidx.activity.result.PickVisualMediaRequest
import androidx.activity.result.contract.ActivityResultContract
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.runtime.Immutable
import io.element.android.libraries.core.mimetype.MimeTypes

@Immutable
sealed interface PickerType<Input, Output> {
fun getContract(): ActivityResultContract<Input, Output>
fun getDefaultRequest(): Input
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,13 @@
package io.element.android.libraries.textcomposer.model

import android.os.Parcelable
import androidx.compose.runtime.Immutable
import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.TransactionId
import io.element.android.libraries.matrix.ui.components.AttachmentThumbnailInfo
import kotlinx.parcelize.Parcelize

@Immutable
sealed interface MessageComposerMode : Parcelable {
@Parcelize
data object Normal: MessageComposerMode
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@

package io.element.android.libraries.textcomposer.model

sealed class PressEvent {
data object PressStart: PressEvent()
data object Tapped: PressEvent()
data object LongPressEnd: PressEvent()
sealed interface PressEvent {
data object PressStart: PressEvent
data object Tapped: PressEvent
data object LongPressEnd: PressEvent
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@

package io.element.android.libraries.textcomposer.model

sealed class VoiceMessagePlayerEvent {
data object Play: VoiceMessagePlayerEvent()
data object Pause: VoiceMessagePlayerEvent()
sealed interface VoiceMessagePlayerEvent {
data object Play: VoiceMessagePlayerEvent
data object Pause: VoiceMessagePlayerEvent

data class Seek(
val position: Float
): VoiceMessagePlayerEvent()
): VoiceMessagePlayerEvent
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,13 @@

package io.element.android.libraries.textcomposer.model

import androidx.compose.runtime.Immutable
import kotlinx.collections.immutable.ImmutableList
import kotlin.time.Duration

sealed class VoiceMessageState {
data object Idle: VoiceMessageState()
@Immutable
sealed interface VoiceMessageState {
data object Idle: VoiceMessageState

data class Preview(
val isSending: Boolean,
Expand All @@ -29,10 +31,10 @@ sealed class VoiceMessageState {
val playbackProgress: Float,
val time: Duration,
val waveform: ImmutableList<Float>,
): VoiceMessageState()
): VoiceMessageState

data class Recording(
val duration: Duration,
val levels: ImmutableList<Float>,
): VoiceMessageState()
): VoiceMessageState
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@ package io.element.android.libraries.textcomposer.utils
/**
* State of a press gesture.
*/
internal sealed class PressState {
internal sealed interface PressState {
data class Idle(
val lastPress: Pressing?
) : PressState()
) : PressState

sealed class Pressing : PressState()
data object Tapping : Pressing()
data object LongPressing : Pressing()
sealed interface Pressing : PressState
data object Tapping : Pressing
data object LongPressing : Pressing
}

Loading

0 comments on commit fe69db3

Please sign in to comment.