PreviewParameterProvider FTW

This commit is contained in:
Benoit Marty 2023-02-10 17:10:35 +01:00
parent f6c371e533
commit afe5499158
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>
get() = sequenceOf(
aRootState().copy(
@ -95,11 +95,11 @@ open class RootStatePreviewParameter : PreviewParameterProvider<RootState> {
@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) {

View file

@ -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<ActionListState> {
override val values: Sequence<ActionListState>
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)
}

View file

@ -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<RageshakePreferencesState> {
override val values: Sequence<RageshakePreferencesState>
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)
}

View file

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

View file

@ -18,7 +18,7 @@ package io.element.android.libraries.designsystem.utils
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>>
) : PreviewParameterProvider<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.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<MatrixUser> {
override val values: Sequence<MatrixUser>
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)
}