From 276d5e7d50d4d64301678234300d58a5b7087f9e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 14 Feb 2023 12:30:17 +0100 Subject: [PATCH] Create MessagesStateProvider --- .../messages/MessagesStateProvider.kt | 52 +++++++++++++++++++ .../android/features/messages/MessagesView.kt | 36 +++---------- 2 files changed, 59 insertions(+), 29 deletions(-) create mode 100644 features/messages/src/main/kotlin/io/element/android/features/messages/MessagesStateProvider.kt diff --git a/features/messages/src/main/kotlin/io/element/android/features/messages/MessagesStateProvider.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/MessagesStateProvider.kt new file mode 100644 index 0000000000..ee846e9f6c --- /dev/null +++ b/features/messages/src/main/kotlin/io/element/android/features/messages/MessagesStateProvider.kt @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2023 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.element.android.features.messages + +import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import io.element.android.features.messages.actionlist.anActionListState +import io.element.android.features.messages.textcomposer.aMessageComposerState +import io.element.android.features.messages.timeline.aTimelineItemContent +import io.element.android.features.messages.timeline.aTimelineItemList +import io.element.android.features.messages.timeline.aTimelineState +import io.element.android.libraries.core.data.StableCharSequence +import io.element.android.libraries.designsystem.components.avatar.AvatarData +import io.element.android.libraries.matrix.core.RoomId +import io.element.android.libraries.textcomposer.MessageComposerMode + +open class MessagesStateProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + aMessagesState(), + ) +} + +fun aMessagesState() = MessagesState( + roomId = RoomId("!id"), + roomName = "Room name", + roomAvatar = AvatarData("!id", "Room name"), + composerState = aMessageComposerState().copy( + text = StableCharSequence("Hello"), + isFullScreen = false, + mode = MessageComposerMode.Normal("Hello"), + ), + timelineState = aTimelineState().copy( + timelineItems = aTimelineItemList(aTimelineItemContent()), + hasMoreToLoad = false, + ), + actionListState = anActionListState(), + eventSink = {} +) diff --git a/features/messages/src/main/kotlin/io/element/android/features/messages/MessagesView.kt b/features/messages/src/main/kotlin/io/element/android/features/messages/MessagesView.kt index c63bdb5c89..d0b858105d 100644 --- a/features/messages/src/main/kotlin/io/element/android/features/messages/MessagesView.kt +++ b/features/messages/src/main/kotlin/io/element/android/features/messages/MessagesView.kt @@ -39,28 +39,21 @@ import androidx.compose.ui.platform.LocalFocusManager 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.unit.dp import androidx.compose.ui.unit.sp import io.element.android.features.messages.actionlist.ActionListEvents import io.element.android.features.messages.actionlist.ActionListView -import io.element.android.features.messages.actionlist.anActionListState import io.element.android.features.messages.actionlist.model.TimelineItemAction import io.element.android.features.messages.textcomposer.MessageComposerView -import io.element.android.features.messages.textcomposer.aMessageComposerState import io.element.android.features.messages.timeline.TimelineView -import io.element.android.features.messages.timeline.aTimelineState -import io.element.android.features.messages.timeline.aTimelineItemContent -import io.element.android.features.messages.timeline.aTimelineItemList import io.element.android.features.messages.timeline.model.TimelineItem -import io.element.android.libraries.core.data.StableCharSequence import io.element.android.libraries.designsystem.components.avatar.Avatar import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight import io.element.android.libraries.designsystem.theme.components.* import io.element.android.libraries.designsystem.utils.LogCompositions -import io.element.android.libraries.matrix.core.RoomId -import io.element.android.libraries.textcomposer.MessageComposerMode import kotlinx.coroutines.launch import timber.log.Timber @@ -198,30 +191,15 @@ fun MessagesViewTopBar( @Preview @Composable -internal fun MessagesViewLightPreview() = ElementPreviewLight { ContentToPreview() } +internal fun MessagesViewLightPreview(@PreviewParameter(MessagesStateProvider::class) state: MessagesState) = + ElementPreviewLight { ContentToPreview(state) } @Preview @Composable -internal fun MessagesViewDarkPreview() = ElementPreviewDark { ContentToPreview() } +internal fun MessagesViewDarkPreview(@PreviewParameter(MessagesStateProvider::class) state: MessagesState) = + ElementPreviewDark { ContentToPreview(state) } @Composable -private fun ContentToPreview() { - MessagesView( - MessagesState( - roomId = RoomId("!id"), - roomName = "Room name", - roomAvatar = AvatarData("!id", "Room name"), - composerState = aMessageComposerState().copy( - text = StableCharSequence("Hello"), - isFullScreen = false, - mode = MessageComposerMode.Normal("Hello"), - ), - timelineState = aTimelineState().copy( - timelineItems = aTimelineItemList(aTimelineItemContent()), - hasMoreToLoad = false, - ), - actionListState = anActionListState(), - eventSink = {} - ) - ) +private fun ContentToPreview(state: MessagesState) { + MessagesView(state) }