From 8829830aced73da6a8e27bfc2dd96343a87d287a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 22 Nov 2022 11:31:03 +0100 Subject: [PATCH] Ensure room placeholder are displayed as soon as the app is started. --- .../x/features/roomlist/RoomListViewModel.kt | 19 +++++++++++++++---- .../model/RoomListSummaryPlaceholders.kt | 13 +++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListSummaryPlaceholders.kt diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListViewModel.kt b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListViewModel.kt index df8233f02d..0b222413a0 100644 --- a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListViewModel.kt +++ b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListViewModel.kt @@ -1,14 +1,13 @@ package io.element.android.x.features.roomlist -import com.airbnb.mvrx.MavericksViewModel -import com.airbnb.mvrx.MavericksViewModelFactory -import com.airbnb.mvrx.ViewModelContext +import com.airbnb.mvrx.* import io.element.android.x.core.data.parallelMap import io.element.android.x.designsystem.components.avatar.AvatarData import io.element.android.x.designsystem.components.avatar.AvatarSize import io.element.android.x.features.roomlist.model.MatrixUser import io.element.android.x.features.roomlist.model.RoomListRoomSummary import io.element.android.x.features.roomlist.model.RoomListViewState +import io.element.android.x.features.roomlist.model.createFakePlaceHolders import io.element.android.x.matrix.MatrixClient import io.element.android.x.matrix.MatrixInstance import io.element.android.x.matrix.media.MediaResolver @@ -80,7 +79,19 @@ class RoomListViewModel( .map(::mapRoomSummaries) .flowOn(Dispatchers.Default) .execute { - copy(rooms = it) + copy( + rooms = when { + it is Loading || + // Note: this second case will prevent to handle correctly the empty case + (it is Success && it().isEmpty()) -> { + // Show fake placeholders to avoid having empty screen + Loading(createFakePlaceHolders()) + } + else -> { + it + } + } + ) } } diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListSummaryPlaceholders.kt b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListSummaryPlaceholders.kt new file mode 100644 index 0000000000..aafb6bcada --- /dev/null +++ b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListSummaryPlaceholders.kt @@ -0,0 +1,13 @@ +package io.element.android.x.features.roomlist.model + + +/** + * Create a list of 16 RoomListRoomSummary placeholders + */ +fun createFakePlaceHolders(): List { + return mutableListOf().apply { + for (i in 0..15) { + add(RoomListRoomSummary.placeholder("\$fakeRoom$i")) + } + } +}