diff --git a/changelog.d/+add-empty-state-to-banned-members-list.bugfix b/changelog.d/+add-empty-state-to-banned-members-list.bugfix new file mode 100644 index 0000000000..3279630c29 --- /dev/null +++ b/changelog.d/+add-empty-state-to-banned-members-list.bugfix @@ -0,0 +1 @@ +Added empty state to banned member list. diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryView.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryView.kt index 456eebea72..69eed21b43 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryView.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryView.kt @@ -18,6 +18,7 @@ package io.element.android.features.poll.impl.history import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.consumeWindowInsets @@ -187,33 +188,46 @@ private fun PollHistoryList( } if (pollHistoryItems.isEmpty()) { item { - val emptyStringResource = if (filter == PollHistoryFilter.PAST) { - stringResource(R.string.screen_polls_history_empty_past) - } else { - stringResource(R.string.screen_polls_history_empty_ongoing) + Column( + modifier = Modifier.fillParentMaxSize().padding(bottom = 24.dp), + verticalArrangement = Arrangement.Center, + ) { + val emptyStringResource = if (filter == PollHistoryFilter.PAST) { + stringResource(R.string.screen_polls_history_empty_past) + } else { + stringResource(R.string.screen_polls_history_empty_ongoing) + } + Text( + text = emptyStringResource, + style = ElementTheme.typography.fontBodyLgRegular, + color = ElementTheme.colors.textSecondary, + modifier = Modifier.fillMaxWidth().padding(vertical = 24.dp, horizontal = 16.dp), + textAlign = TextAlign.Center, + ) + + if (hasMoreToLoad) { + LoadMoreButton(isLoading = isLoading, onClick = onLoadMore) + } } - Text( - text = emptyStringResource, - style = ElementTheme.typography.fontBodyLgRegular, - color = ElementTheme.colors.textSecondary, - modifier = Modifier.padding(vertical = 24.dp, horizontal = 16.dp), - textAlign = TextAlign.Center, - ) } - } - if (hasMoreToLoad) { + } else if (hasMoreToLoad) { item { - Button( - text = stringResource(CommonStrings.action_load_more), - showProgress = isLoading, - onClick = onLoadMore, - modifier = Modifier.padding(vertical = 24.dp), - ) + LoadMoreButton(isLoading = isLoading, onClick = onLoadMore) } } } } +@Composable +private fun LoadMoreButton(isLoading: Boolean, onClick: () -> Unit) { + Button( + text = stringResource(CommonStrings.action_load_more), + showProgress = isLoading, + onClick = onClick, + modifier = Modifier.padding(vertical = 24.dp), + ) +} + @Composable private fun PollHistoryItemRow( pollHistoryItem: PollHistoryItem, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListStateProvider.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListStateProvider.kt index 66f6933cef..062a2f7d83 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListStateProvider.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListStateProvider.kt @@ -62,6 +62,36 @@ internal class RoomMemberListStateProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + aRoomMemberListState( + roomMembers = AsyncData.Success( + RoomMembers( + invited = persistentListOf(), + joined = persistentListOf(), + banned = persistentListOf( + aRoomMember(userId = UserId("@alice:example.com"), displayName = "Alice"), + aRoomMember(userId = UserId("@bob:example.com"), displayName = "Bob"), + aRoomMember(userId = UserId("@charlie:example.com"), displayName = "Charlie"), + ), + ) + ), + moderationState = aRoomMembersModerationState(canDisplayBannedUsers = true), + ), + aRoomMemberListState( + roomMembers = AsyncData.Success( + RoomMembers( + invited = persistentListOf(), + joined = persistentListOf(), + banned = persistentListOf(), + ) + ), + moderationState = aRoomMembersModerationState(canDisplayBannedUsers = true), + ) + ) +} + internal fun aRoomMemberListState( roomMembers: AsyncData = AsyncData.Uninitialized, searchResults: SearchBarResultState = SearchBarResultState.Initial(), diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt index d7de4da573..70b3a11bab 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt @@ -43,12 +43,12 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.pluralStringResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import io.element.android.compound.theme.ElementTheme import io.element.android.features.roomdetails.impl.R import io.element.android.features.roomdetails.impl.members.moderation.RoomMembersModerationView -import io.element.android.features.roomdetails.impl.members.moderation.aRoomMembersModerationState import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.components.button.BackButton @@ -63,7 +63,6 @@ import io.element.android.libraries.designsystem.theme.components.SegmentedButto import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.TextButton import io.element.android.libraries.designsystem.theme.components.TopAppBar -import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.ui.components.MatrixUserRow @@ -209,11 +208,24 @@ private fun RoomMemberList( } } SelectedSection.BANNED -> { // Banned users - roomMemberListSection( - headerText = null, - members = roomMembers.banned, - onMemberSelected = { onUserSelected(it) } - ) + if (roomMembers.banned.isNotEmpty()) { + roomMemberListSection( + headerText = null, + members = roomMembers.banned, + onMemberSelected = { onUserSelected(it) } + ) + } else { + item { + Box(Modifier.fillParentMaxSize().padding(horizontal = 16.dp)) { + Text( + modifier = Modifier.padding(bottom = 56.dp).align(Alignment.Center), + text = stringResource(id = R.string.screen_room_member_list_banned_empty), + color = ElementTheme.colors.textSecondary, + textAlign = TextAlign.Center, + ) + } + } + } } } } @@ -345,23 +357,10 @@ internal fun RoomMemberListPreview(@PreviewParameter(RoomMemberListStateProvider @PreviewsDayNight @Composable -internal fun RoomMemberBannedListPreview() = ElementPreview { +internal fun RoomMemberBannedListPreview(@PreviewParameter(RoomMemberListStateBannedProvider::class) state: RoomMemberListState) = ElementPreview { RoomMemberListView( initialSelectedSectionIndex = 1, - state = aRoomMemberListState( - roomMembers = AsyncData.Success( - RoomMembers( - invited = persistentListOf(), - joined = persistentListOf(), - banned = persistentListOf( - aRoomMember(userId = UserId("@alice:example.com"), displayName = "Alice"), - aRoomMember(userId = UserId("@bob:example.com"), displayName = "Bob"), - aRoomMember(userId = UserId("@charlie:example.com"), displayName = "Charlie"), - ), - ) - ), - moderationState = aRoomMembersModerationState(canDisplayBannedUsers = true), - ), + state = state, navigator = object : RoomMemberListNavigator {}, ) } diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_2,NEXUS_5,1.0,en].png index 57defae9ba..40904d79f7 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e73c55b17bf0f0c7f9e398e08471e778ce91145a63410b728a33b0ad1d521a52 -size 16586 +oid sha256:ba5a26265dd75e2bf7f1332d59ec66fff0f81c80956bc40324cc6bc82570a08f +size 16550 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_3,NEXUS_5,1.0,en].png index cba5a1fac6..19e83e270f 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Day-1_2_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2540819ea467d626deab3d29b4e1fcfb385c389b3a22b43308d9974478884c66 -size 16065 +oid sha256:fd2d5d6bd8d1d28e5a26f9230a664d9a23d1633cce70af1ba2ca13726bf15b43 +size 15971 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_2,NEXUS_5,1.0,en].png index 41327dee0f..b4a6a5d3a7 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:836f4eac4edb453b851c16050db187ce29fe90fb651c60900d41437acd794895 -size 15796 +oid sha256:fef3685bc4772af51cb2fd68ac29fab48745a2122603894869bb69b8d6a457bf +size 15750 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_3,NEXUS_5,1.0,en].png index aa921af6dc..b33ed7e79a 100644 --- a/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.poll.impl.history_PollHistoryView_null_PollHistoryView-Night-1_3_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ebd21ad1a1de06c7de5d13134913785557fc743770202292630c20a85875208e -size 15300 +oid sha256:4d07770730b6a27e9d40047df0da86615fa753c6806685e1505528eb368cc373 +size 15171 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..e4ecb03416 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Day-3_4_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e02a3def9e4c0a791f0dbfbed39f2823545a6108e438fe955c43287bcb20c0d +size 24028 diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Night-3_5_null,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Night-3_5_null_0,NEXUS_5,1.0,en].png similarity index 100% rename from tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Night-3_5_null,NEXUS_5,1.0,en].png rename to tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Night-3_5_null_0,NEXUS_5,1.0,en].png diff --git a/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Night-3_5_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Night-3_5_null_1,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..7496ef1eae --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/ui_S_t[f.roomdetails.impl.members_RoomMemberBannedList_null_RoomMemberBannedList-Night-3_5_null_1,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41cf3bf61af52c2c7d71c17fe95f5217cf74a9c930a981131c6736a887edf50b +size 22699