From 9b036b7b71827b4bd968b5982fe92c0bfc7305f5 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 16 Feb 2023 11:09:30 +0100 Subject: [PATCH] Create `RoomListStateProvider` --- .../android/features/roomlist/RoomListView.kt | 22 ++++------ .../roomlist/model/RoomListStateProvider.kt | 42 ++++++++++++++++-- .../features/roomlist/model/stubbed.kt | 43 ------------------- ...iewDarkPreview_0_null_0,NEXUS_5,1,en].png} | 0 ...ewLightPreview_0_null_0,NEXUS_5,1,en].png} | 0 5 files changed, 46 insertions(+), 61 deletions(-) delete mode 100644 features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/stubbed.kt rename tests/uitests/src/test/snapshots/images/{io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomlist_null_DefaultGroup_RoomListViewDarkPreview_0_null,NEXUS_5,1,en].png => io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomlist_null_DefaultGroup_RoomListViewDarkPreview_0_null_0,NEXUS_5,1,en].png} (100%) rename tests/uitests/src/test/snapshots/images/{io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomlist_null_DefaultGroup_RoomListViewLightPreview_0_null,NEXUS_5,1,en].png => io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomlist_null_DefaultGroup_RoomListViewLightPreview_0_null_0,NEXUS_5,1,en].png} (100%) diff --git a/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/RoomListView.kt b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/RoomListView.kt index b7930fc551..1ebc2328db 100644 --- a/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/RoomListView.kt +++ b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/RoomListView.kt @@ -32,21 +32,19 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.NestedScrollConnection import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.Velocity import io.element.android.features.roomlist.components.RoomListTopBar import io.element.android.features.roomlist.components.RoomSummaryRow import io.element.android.features.roomlist.model.RoomListEvents import io.element.android.features.roomlist.model.RoomListRoomSummary import io.element.android.features.roomlist.model.RoomListState -import io.element.android.features.roomlist.model.aRoomListState -import io.element.android.features.roomlist.model.stubbedRoomSummaries -import io.element.android.libraries.designsystem.components.avatar.AvatarData +import io.element.android.features.roomlist.model.RoomListStateProvider import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight import io.element.android.libraries.designsystem.theme.components.Scaffold import io.element.android.libraries.designsystem.utils.LogCompositions import io.element.android.libraries.matrix.core.RoomId -import io.element.android.libraries.matrix.core.UserId import io.element.android.libraries.matrix.ui.model.MatrixUser import kotlinx.collections.immutable.ImmutableList @@ -158,19 +156,15 @@ private fun RoomListRoomSummary.contentType() = isPlaceholder @Preview @Composable -internal fun RoomListViewLightPreview() = ElementPreviewLight { ContentToPreview() } +internal fun RoomListViewLightPreview(@PreviewParameter(RoomListStateProvider::class) state: RoomListState) = + ElementPreviewLight { ContentToPreview(state) } @Preview @Composable -internal fun RoomListViewDarkPreview() = ElementPreviewDark { ContentToPreview() } +internal fun RoomListViewDarkPreview(@PreviewParameter(RoomListStateProvider::class) state: RoomListState) = + ElementPreviewDark { ContentToPreview(state) } @Composable -private fun ContentToPreview() { - RoomListView( - aRoomListState().copy( - matrixUser = MatrixUser(id = UserId("@id"), username = "User#1", avatarData = AvatarData("@id", "U")), - roomList = stubbedRoomSummaries(), - filter = "filter", - ) - ) +private fun ContentToPreview(state: RoomListState) { + RoomListView(state) } diff --git a/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListStateProvider.kt b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListStateProvider.kt index 08e2afa2ab..fd361e6b02 100644 --- a/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListStateProvider.kt +++ b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/RoomListStateProvider.kt @@ -16,11 +16,45 @@ package io.element.android.features.roomlist.model +import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import io.element.android.libraries.designsystem.components.avatar.AvatarData +import io.element.android.libraries.matrix.core.UserId +import io.element.android.libraries.matrix.ui.model.MatrixUser +import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf -fun aRoomListState() = RoomListState( - matrixUser = null, - roomList = persistentListOf(), - filter = "", +open class RoomListStateProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + aRoomListState(), + ) +} + +internal fun aRoomListState() = RoomListState( + matrixUser = MatrixUser(id = UserId("@id"), username = "User#1", avatarData = AvatarData("@id", "U")), + roomList = aRoomListRoomSummaryList(), + filter = "filter", eventSink = {} ) + +internal fun aRoomListRoomSummaryList(): ImmutableList { + return persistentListOf( + RoomListRoomSummary( + name = "Room", + hasUnread = true, + timestamp = "14:18", + lastMessage = "A very very very very long message which suites on two lines", + avatarData = AvatarData("!id", "R"), + id = "roomId" + ), + RoomListRoomSummary( + name = "Room#2", + hasUnread = false, + timestamp = "14:16", + lastMessage = "A short message", + avatarData = AvatarData("!id", "Z"), + id = "roomId2" + ), + RoomListRoomSummaryPlaceholders.create("roomId2") + ) +} diff --git a/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/stubbed.kt b/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/stubbed.kt deleted file mode 100644 index dbf05c014a..0000000000 --- a/features/roomlist/src/main/kotlin/io/element/android/features/roomlist/model/stubbed.kt +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2022 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.roomlist.model - -import io.element.android.libraries.designsystem.components.avatar.AvatarData -import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.persistentListOf - -internal fun stubbedRoomSummaries(): ImmutableList { - return persistentListOf( - RoomListRoomSummary( - name = "Room", - hasUnread = true, - timestamp = "14:18", - lastMessage = "A very very very very long message which suites on two lines", - avatarData = AvatarData("!id", "R"), - id = "roomId" - ), - RoomListRoomSummary( - name = "Room#2", - hasUnread = false, - timestamp = "14:16", - lastMessage = "A short message", - avatarData = AvatarData("!id", "Z"), - id = "roomId2" - ), - RoomListRoomSummaryPlaceholders.create("roomId2") - ) -} diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomlist_null_DefaultGroup_RoomListViewDarkPreview_0_null,NEXUS_5,1,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomlist_null_DefaultGroup_RoomListViewDarkPreview_0_null_0,NEXUS_5,1,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomlist_null_DefaultGroup_RoomListViewDarkPreview_0_null,NEXUS_5,1,en].png rename to tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomlist_null_DefaultGroup_RoomListViewDarkPreview_0_null_0,NEXUS_5,1,en].png diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomlist_null_DefaultGroup_RoomListViewLightPreview_0_null,NEXUS_5,1,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomlist_null_DefaultGroup_RoomListViewLightPreview_0_null_0,NEXUS_5,1,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomlist_null_DefaultGroup_RoomListViewLightPreview_0_null,NEXUS_5,1,en].png rename to tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomlist_null_DefaultGroup_RoomListViewLightPreview_0_null_0,NEXUS_5,1,en].png