PreviewParameterProvider FTW

This commit is contained in:
Benoit Marty 2023-02-10 17:10:35 +01:00
parent 2a04cd3983
commit e1b9d1da02
6 changed files with 73 additions and 96 deletions

View file

@ -77,7 +77,7 @@ fun RootView(
} }
} }
open class RootStatePreviewParameter : PreviewParameterProvider<RootState> { open class RootStatePreviewParameterProvider : PreviewParameterProvider<RootState> {
override val values: Sequence<RootState> override val values: Sequence<RootState>
get() = sequenceOf( get() = sequenceOf(
aRootState().copy( aRootState().copy(
@ -95,11 +95,11 @@ open class RootStatePreviewParameter : PreviewParameterProvider<RootState> {
@Preview @Preview
@Composable @Composable
fun RootLightPreview(@PreviewParameter(RootStatePreviewParameter::class) rootState: RootState) = ElementPreviewLight { ContentToPreview(rootState) } fun RootLightPreview(@PreviewParameter(RootStatePreviewParameterProvider::class) rootState: RootState) = ElementPreviewLight { ContentToPreview(rootState) }
@Preview @Preview
@Composable @Composable
fun RootDarkPreview(@PreviewParameter(RootStatePreviewParameter::class) rootState: RootState) = ElementPreviewDark { ContentToPreview(rootState) } fun RootDarkPreview(@PreviewParameter(RootStatePreviewParameterProvider::class) rootState: RootState) = ElementPreviewDark { ContentToPreview(rootState) }
@Composable @Composable
private fun ContentToPreview(rootState: RootState) { private fun ContentToPreview(rootState: RootState) {

View file

@ -38,6 +38,8 @@ import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.snapshotFlow import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import io.element.android.features.messages.actionlist.model.TimelineItemAction import io.element.android.features.messages.actionlist.model.TimelineItemAction
import io.element.android.features.messages.timeline.createMessageEvent import io.element.android.features.messages.timeline.createMessageEvent
@ -134,56 +136,37 @@ private fun SheetContent(
} }
} }
@Preview open class ActionListStatePreviewParameterProvider : PreviewParameterProvider<ActionListState> {
@Composable override val values: Sequence<ActionListState>
fun SheetContentNoneLightPreview() = ElementPreviewLight { ContentNoneToPreview() } get() = sequenceOf(
anActionListState(),
@Preview anActionListState().copy(target = ActionListState.Target.Loading(createMessageEvent())),
@Composable anActionListState().copy(
fun SheetContentNoneDarkPreview() = ElementPreviewDark { ContentNoneToPreview() } target = ActionListState.Target.Success(
messageEvent = createMessageEvent(),
@Composable actions = persistentListOf(
private fun ContentNoneToPreview() { TimelineItemAction.Reply,
SheetContent(anActionListState()) TimelineItemAction.Forward,
} TimelineItemAction.Copy,
TimelineItemAction.Edit,
@Preview TimelineItemAction.Redact,
@Composable )
fun SheetContentLoadingLightPreview() = ElementPreviewLight { ContentLoadingToPreview() }
@Preview
@Composable
fun SheetContentLoadingDarkPreview() = ElementPreviewDark { ContentLoadingToPreview() }
@Composable
private fun ContentLoadingToPreview() {
SheetContent(
anActionListState().copy(target = ActionListState.Target.Loading(createMessageEvent()))
)
}
@Preview
@Composable
fun SheetContentSuccessLightPreview() = ElementPreviewLight { ContentSuccessToPreview() }
@Preview
@Composable
fun SheetContentSuccessDarkPreview() = ElementPreviewDark { ContentSuccessToPreview() }
@Composable
private fun ContentSuccessToPreview() {
SheetContent(
anActionListState().copy(
target = ActionListState.Target.Success(
messageEvent = createMessageEvent(),
actions = persistentListOf(
TimelineItemAction.Reply,
TimelineItemAction.Forward,
TimelineItemAction.Copy,
TimelineItemAction.Edit,
TimelineItemAction.Redact,
) )
) )
) )
) }
@Preview
@Composable
fun SheetContentLightPreview(@PreviewParameter(ActionListStatePreviewParameterProvider::class) state: ActionListState) =
ElementPreviewLight { ContentToPreview(state) }
@Preview
@Composable
fun SheetContentDarkPreview(@PreviewParameter(ActionListStatePreviewParameterProvider::class) state: ActionListState) =
ElementPreviewDark { ContentToPreview(state) }
@Composable
private fun ContentToPreview(state: ActionListState) {
SheetContent(state)
} }

View file

@ -23,6 +23,8 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.libraries.designsystem.components.preferences.PreferenceCategory import io.element.android.libraries.designsystem.components.preferences.PreferenceCategory
import io.element.android.libraries.designsystem.components.preferences.PreferenceSlide import io.element.android.libraries.designsystem.components.preferences.PreferenceSlide
import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch
@ -75,28 +77,25 @@ fun RageshakePreferencesView(
} }
} }
@Preview open class RageshakePreferencesStatePreviewParameterProvider : PreviewParameterProvider<RageshakePreferencesState> {
@Composable override val values: Sequence<RageshakePreferencesState>
fun RageshakePreferencesViewLightPreview() = ElementPreviewLight { ContentToPreview() } get() = sequenceOf(
aRageshakePreferencesState().copy(isEnabled = true, isSupported = true, sensitivity = 0.5f),
@Preview aRageshakePreferencesState().copy(isEnabled = true, isSupported = false, sensitivity = 0.5f),
@Composable )
fun RageshakePreferencesViewDarkPreview() = ElementPreviewDark { ContentToPreview() }
@Composable
private fun ContentToPreview() {
RageshakePreferencesView(aRageshakePreferencesState().copy(isEnabled = true, isSupported = true, sensitivity = 0.5f))
} }
@Preview @Preview
@Composable @Composable
fun RageshakePreferencesViewNotSupportedLightPreview() = ElementPreviewLight { ContentNotSupportedToPreview() } fun RageshakePreferencesViewLightPreview(@PreviewParameter(RageshakePreferencesStatePreviewParameterProvider::class) state: RageshakePreferencesState) =
ElementPreviewLight { ContentToPreview(state) }
@Preview @Preview
@Composable @Composable
fun RageshakePreferencesViewNotSupportedDarkPreview() = ElementPreviewDark { ContentNotSupportedToPreview() } fun RageshakePreferencesViewDarkPreview(@PreviewParameter(RageshakePreferencesStatePreviewParameterProvider::class) state: RageshakePreferencesState) =
ElementPreviewDark { ContentToPreview(state) }
@Composable @Composable
private fun ContentNotSupportedToPreview() { private fun ContentToPreview(state: RageshakePreferencesState) {
RageshakePreferencesView(aRageshakePreferencesState().copy(isEnabled = true, isSupported = false, sensitivity = 0.5f)) RageshakePreferencesView(state)
} }

View file

@ -18,7 +18,7 @@ package io.element.android.libraries.designsystem.utils
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
open class BooleanPreviewParameter : PreviewParameterProvider<Boolean> { open class BooleanPreviewParameterProvider : PreviewParameterProvider<Boolean> {
override val values: Sequence<Boolean> override val values: Sequence<Boolean>
get() = sequenceOf(false, true) get() = sequenceOf(false, true)
} }

View file

@ -18,7 +18,7 @@ package io.element.android.libraries.designsystem.utils
import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.tooling.preview.PreviewParameterProvider
open class PairCombinedPreviewParameter<T1, T2>( open class PairCombinedPreviewParameterProvider<T1, T2>(
private val provider: Pair<PreviewParameterProvider<T1>, PreviewParameterProvider<T2>> private val provider: Pair<PreviewParameterProvider<T1>, PreviewParameterProvider<T2>>
) : PreviewParameterProvider<Pair<T1, T2>> { ) : PreviewParameterProvider<Pair<T1, T2>> {
override val values: Sequence<Pair<T1, T2>> override val values: Sequence<Pair<T1, T2>>

View file

@ -30,6 +30,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.Avatar
@ -68,7 +70,7 @@ fun MatrixUserHeader(
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis, overflow = TextOverflow.Ellipsis,
color = MaterialTheme.colorScheme.primary, color = MaterialTheme.colorScheme.primary,
) )
// Id // Id
if (matrixUser.username.isNullOrEmpty().not()) { if (matrixUser.username.isNullOrEmpty().not()) {
Spacer(modifier = Modifier.height(4.dp)) Spacer(modifier = Modifier.height(4.dp))
@ -83,40 +85,33 @@ fun MatrixUserHeader(
} }
} }
@Preview open class MatrixUserPreviewParameterProvider : PreviewParameterProvider<MatrixUser> {
@Composable override val values: Sequence<MatrixUser>
fun MatrixUserHeaderLightPreview() = ElementPreviewLight { ContentToPreview1() } get() = sequenceOf(
MatrixUser(
@Preview id = UserId("@alice:server.org"),
@Composable username = "Alice",
fun MatrixUserHeaderDarkPreview() = ElementPreviewDark { ContentToPreview1() } avatarData = AvatarData("Alice")
),
@Composable MatrixUser(
private fun ContentToPreview1() { id = UserId("@alice:server.org"),
MatrixUserHeader( username = null,
MatrixUser( avatarData = AvatarData("Alice")
id = UserId("@alice:server.org"), ),
username = "Alice",
avatarData = AvatarData("Alice")
) )
)
} }
@Preview @Preview
@Composable @Composable
fun MatrixUserHeaderNoUserNameLightPreview() = ElementPreviewLight { ContentToPreview2() } fun MatrixUserHeaderLightPreview(@PreviewParameter(MatrixUserPreviewParameterProvider::class) matrixUser: MatrixUser) =
ElementPreviewLight { ContentToPreview(matrixUser) }
@Preview @Preview
@Composable @Composable
fun MatrixUserHeaderNoUserNameDarkPreview() = ElementPreviewDark { ContentToPreview2() } fun MatrixUserHeaderDarkPreview(@PreviewParameter(MatrixUserPreviewParameterProvider::class) matrixUser: MatrixUser) =
ElementPreviewDark { ContentToPreview(matrixUser) }
@Composable @Composable
private fun ContentToPreview2() { private fun ContentToPreview(matrixUser: MatrixUser) {
MatrixUserHeader( MatrixUserHeader(matrixUser)
MatrixUser(
id = UserId("@alice:server.org"),
username = null,
avatarData = AvatarData("Alice")
)
)
} }