From afe549915834c13ace9c81de5dc1f3728351d082 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 10 Feb 2023 17:10:35 +0100 Subject: [PATCH] PreviewParameterProvider FTW --- .../io/element/android/x/root/RootView.kt | 6 +- .../messages/actionlist/ActionListView.kt | 81 ++++++++----------- .../preferences/RageshakePreferencesView.kt | 29 ++++--- ....kt => BooleanPreviewParameterProvider.kt} | 2 +- ...> PairCombinedPreviewParameterProvider.kt} | 2 +- .../matrix/ui/components/MatrixUserHeader.kt | 49 +++++------ 6 files changed, 73 insertions(+), 96 deletions(-) rename libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/{BooleanPreviewParameter.kt => BooleanPreviewParameterProvider.kt} (90%) rename libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/{PairCombinedPreviewParameter.kt => PairCombinedPreviewParameterProvider.kt} (94%) diff --git a/app/src/main/kotlin/io/element/android/x/root/RootView.kt b/app/src/main/kotlin/io/element/android/x/root/RootView.kt index 34bbae8bea..06e7c5b023 100644 --- a/app/src/main/kotlin/io/element/android/x/root/RootView.kt +++ b/app/src/main/kotlin/io/element/android/x/root/RootView.kt @@ -77,7 +77,7 @@ fun RootView( } } -open class RootStatePreviewParameter : PreviewParameterProvider { +open class RootStatePreviewParameterProvider : PreviewParameterProvider { override val values: Sequence get() = sequenceOf( aRootState().copy( @@ -95,11 +95,11 @@ open class RootStatePreviewParameter : PreviewParameterProvider { @Preview @Composable -fun RootLightPreview(@PreviewParameter(RootStatePreviewParameter::class) rootState: RootState) = ElementPreviewLight { ContentToPreview(rootState) } +fun RootLightPreview(@PreviewParameter(RootStatePreviewParameterProvider::class) rootState: RootState) = ElementPreviewLight { ContentToPreview(rootState) } @Preview @Composable -fun RootDarkPreview(@PreviewParameter(RootStatePreviewParameter::class) rootState: RootState) = ElementPreviewDark { ContentToPreview(rootState) } +fun RootDarkPreview(@PreviewParameter(RootStatePreviewParameterProvider::class) rootState: RootState) = ElementPreviewDark { ContentToPreview(rootState) } @Composable private fun ContentToPreview(rootState: RootState) { diff --git a/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListView.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListView.kt index d6cd1578d2..d16d2a27f4 100644 --- a/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListView.kt +++ b/features/messages/src/main/kotlin/io/element/android/features/messages/actionlist/ActionListView.kt @@ -38,6 +38,8 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Modifier 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 io.element.android.features.messages.actionlist.model.TimelineItemAction import io.element.android.features.messages.timeline.createMessageEvent @@ -134,56 +136,37 @@ private fun SheetContent( } } -@Preview -@Composable -fun SheetContentNoneLightPreview() = ElementPreviewLight { ContentNoneToPreview() } - -@Preview -@Composable -fun SheetContentNoneDarkPreview() = ElementPreviewDark { ContentNoneToPreview() } - -@Composable -private fun ContentNoneToPreview() { - SheetContent(anActionListState()) -} - -@Preview -@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, +open class ActionListStatePreviewParameterProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + anActionListState(), + anActionListState().copy(target = ActionListState.Target.Loading(createMessageEvent())), + 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) } diff --git a/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesView.kt b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesView.kt index c4d3d39be8..367f5cd694 100644 --- a/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesView.kt +++ b/features/rageshake/src/main/kotlin/io/element/android/features/rageshake/preferences/RageshakePreferencesView.kt @@ -23,6 +23,8 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource 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.PreferenceSlide import io.element.android.libraries.designsystem.components.preferences.PreferenceSwitch @@ -75,28 +77,25 @@ fun RageshakePreferencesView( } } -@Preview -@Composable -fun RageshakePreferencesViewLightPreview() = ElementPreviewLight { ContentToPreview() } - -@Preview -@Composable -fun RageshakePreferencesViewDarkPreview() = ElementPreviewDark { ContentToPreview() } - -@Composable -private fun ContentToPreview() { - RageshakePreferencesView(aRageshakePreferencesState().copy(isEnabled = true, isSupported = true, sensitivity = 0.5f)) +open class RageshakePreferencesStatePreviewParameterProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + aRageshakePreferencesState().copy(isEnabled = true, isSupported = true, sensitivity = 0.5f), + aRageshakePreferencesState().copy(isEnabled = true, isSupported = false, sensitivity = 0.5f), + ) } @Preview @Composable -fun RageshakePreferencesViewNotSupportedLightPreview() = ElementPreviewLight { ContentNotSupportedToPreview() } +fun RageshakePreferencesViewLightPreview(@PreviewParameter(RageshakePreferencesStatePreviewParameterProvider::class) state: RageshakePreferencesState) = + ElementPreviewLight { ContentToPreview(state) } @Preview @Composable -fun RageshakePreferencesViewNotSupportedDarkPreview() = ElementPreviewDark { ContentNotSupportedToPreview() } +fun RageshakePreferencesViewDarkPreview(@PreviewParameter(RageshakePreferencesStatePreviewParameterProvider::class) state: RageshakePreferencesState) = + ElementPreviewDark { ContentToPreview(state) } @Composable -private fun ContentNotSupportedToPreview() { - RageshakePreferencesView(aRageshakePreferencesState().copy(isEnabled = true, isSupported = false, sensitivity = 0.5f)) +private fun ContentToPreview(state: RageshakePreferencesState) { + RageshakePreferencesView(state) } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/BooleanPreviewParameter.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/BooleanPreviewParameterProvider.kt similarity index 90% rename from libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/BooleanPreviewParameter.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/BooleanPreviewParameterProvider.kt index d451862cac..d74f24e6c1 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/BooleanPreviewParameter.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/BooleanPreviewParameterProvider.kt @@ -18,7 +18,7 @@ package io.element.android.libraries.designsystem.utils import androidx.compose.ui.tooling.preview.PreviewParameterProvider -open class BooleanPreviewParameter : PreviewParameterProvider { +open class BooleanPreviewParameterProvider : PreviewParameterProvider { override val values: Sequence get() = sequenceOf(false, true) } diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/PairCombinedPreviewParameter.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/PairCombinedPreviewParameterProvider.kt similarity index 94% rename from libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/PairCombinedPreviewParameter.kt rename to libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/PairCombinedPreviewParameterProvider.kt index bf0a282f72..645d53b92e 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/PairCombinedPreviewParameter.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/utils/PairCombinedPreviewParameterProvider.kt @@ -18,7 +18,7 @@ package io.element.android.libraries.designsystem.utils import androidx.compose.ui.tooling.preview.PreviewParameterProvider -open class PairCombinedPreviewParameter( +open class PairCombinedPreviewParameterProvider( private val provider: Pair, PreviewParameterProvider> ) : PreviewParameterProvider> { override val values: Sequence> diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt index e83c486476..fffe32d5c5 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt @@ -30,6 +30,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow 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.sp import io.element.android.libraries.designsystem.components.avatar.Avatar @@ -68,7 +70,7 @@ fun MatrixUserHeader( maxLines = 1, overflow = TextOverflow.Ellipsis, color = MaterialTheme.colorScheme.primary, - ) + ) // Id if (matrixUser.username.isNullOrEmpty().not()) { Spacer(modifier = Modifier.height(4.dp)) @@ -83,40 +85,33 @@ fun MatrixUserHeader( } } -@Preview -@Composable -fun MatrixUserHeaderLightPreview() = ElementPreviewLight { ContentToPreview1() } - -@Preview -@Composable -fun MatrixUserHeaderDarkPreview() = ElementPreviewDark { ContentToPreview1() } - -@Composable -private fun ContentToPreview1() { - MatrixUserHeader( - MatrixUser( - id = UserId("@alice:server.org"), - username = "Alice", - avatarData = AvatarData("Alice") +open class MatrixUserPreviewParameterProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + MatrixUser( + id = UserId("@alice:server.org"), + username = "Alice", + avatarData = AvatarData("Alice") + ), + MatrixUser( + id = UserId("@alice:server.org"), + username = null, + avatarData = AvatarData("Alice") + ), ) - ) } @Preview @Composable -fun MatrixUserHeaderNoUserNameLightPreview() = ElementPreviewLight { ContentToPreview2() } +fun MatrixUserHeaderLightPreview(@PreviewParameter(MatrixUserPreviewParameterProvider::class) matrixUser: MatrixUser) = + ElementPreviewLight { ContentToPreview(matrixUser) } @Preview @Composable -fun MatrixUserHeaderNoUserNameDarkPreview() = ElementPreviewDark { ContentToPreview2() } +fun MatrixUserHeaderDarkPreview(@PreviewParameter(MatrixUserPreviewParameterProvider::class) matrixUser: MatrixUser) = + ElementPreviewDark { ContentToPreview(matrixUser) } @Composable -private fun ContentToPreview2() { - MatrixUserHeader( - MatrixUser( - id = UserId("@alice:server.org"), - username = null, - avatarData = AvatarData("Alice") - ) - ) +private fun ContentToPreview(matrixUser: MatrixUser) { + MatrixUserHeader(matrixUser) }