From 1b411ec2c11616f0a7c01c6aa6dd4901a18f9dd1 Mon Sep 17 00:00:00 2001 From: SessionHero01 <180888785+SessionHero01@users.noreply.github.com> Date: Thu, 23 Jan 2025 11:22:43 +1100 Subject: [PATCH] Update sorting order (#893) --- .../groups/BaseGroupMembersViewModel.kt | 41 +++++++++++++------ .../securesms/groups/EditGroupViewModel.kt | 1 - .../groups/compose/EditGroupScreen.kt | 5 +-- .../groups/compose/GroupMembersScreen.kt | 2 +- .../libsession_util/util/GroupMember.kt | 2 +- 5 files changed, 33 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/BaseGroupMembersViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/groups/BaseGroupMembersViewModel.kt index 574f01e2f4..9a04364494 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/BaseGroupMembersViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/BaseGroupMembersViewModel.kt @@ -8,9 +8,7 @@ import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.filter -import kotlinx.coroutines.flow.filterIsInstance import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.flow.stateIn @@ -107,16 +105,27 @@ abstract class BaseGroupMembersViewModel ( ) } + // Refer to notion doc for the sorting logic private fun sortMembers(members: List, currentUserId: AccountId) = members.sortedWith( compareBy{ when (it.status) { - GroupMember.Status.INVITE_FAILED -> 0 // Failed invite comes first - GroupMember.Status.INVITE_NOT_SENT -> 1 // then "Sending invite" - GroupMember.Status.INVITE_SENT -> 2 // then "Invite sent" - GroupMember.Status.PROMOTION_NOT_SENT -> 3 // then "Sending promotion" - GroupMember.Status.PROMOTION_SENT -> 4 // then "Promotion sent" - else -> 5 + GroupMember.Status.INVITE_FAILED -> 0 + GroupMember.Status.INVITE_NOT_SENT -> 1 + GroupMember.Status.INVITE_SENDING -> 2 + GroupMember.Status.INVITE_SENT -> 3 + GroupMember.Status.INVITE_UNKNOWN -> 4 + GroupMember.Status.REMOVED, + GroupMember.Status.REMOVED_UNKNOWN, + GroupMember.Status.REMOVED_INCLUDING_MESSAGES -> 5 + GroupMember.Status.PROMOTION_FAILED -> 6 + GroupMember.Status.PROMOTION_NOT_SENT -> 7 + GroupMember.Status.PROMOTION_SENDING -> 8 + GroupMember.Status.PROMOTION_SENT -> 9 + GroupMember.Status.PROMOTION_UNKNOWN -> 10 + null, + GroupMember.Status.INVITE_ACCEPTED, + GroupMember.Status.PROMOTION_ACCEPTED -> 11 } } .thenBy { !it.showAsAdmin } // Admins come first @@ -147,17 +156,23 @@ data class GroupMemberState( } // Function to get the label dynamically using the context -fun GroupMember.Status.getLabel(context: Context): String { - return when (this) { +fun GroupMemberState.getLabel(context: Context): String { + return when (this.status) { GroupMember.Status.INVITE_FAILED -> context.getString(R.string.groupInviteFailed) - GroupMember.Status.INVENT_SENDING -> context.resources.getQuantityString(R.plurals.groupInviteSending, 1) + GroupMember.Status.INVITE_SENDING -> context.resources.getQuantityString(R.plurals.groupInviteSending, 1) GroupMember.Status.INVITE_SENT -> context.getString(R.string.groupInviteSent) GroupMember.Status.PROMOTION_FAILED -> context.getString(R.string.adminPromotionFailed) GroupMember.Status.PROMOTION_SENDING -> context.resources.getQuantityString(R.plurals.adminSendingPromotion, 1) GroupMember.Status.PROMOTION_SENT -> context.getString(R.string.adminPromotionSent) GroupMember.Status.REMOVED, GroupMember.Status.REMOVED_UNKNOWN, - GroupMember.Status.REMOVED_INCLUDING_MESSAGES -> context.getString(R.string.groupPendingRemoval) + GroupMember.Status.REMOVED_INCLUDING_MESSAGES -> { + if (this.showAsAdmin) { + context.getString(R.string.groupPendingRemoval) + } else { + "" + } + } GroupMember.Status.INVITE_UNKNOWN, GroupMember.Status.INVITE_ACCEPTED, @@ -165,5 +180,7 @@ fun GroupMember.Status.getLabel(context: Context): String { GroupMember.Status.PROMOTION_NOT_SENT, GroupMember.Status.PROMOTION_UNKNOWN, GroupMember.Status.PROMOTION_ACCEPTED -> "" + + null -> "" } } \ No newline at end of file diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/EditGroupViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/groups/EditGroupViewModel.kt index 505a45859f..3361f49613 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/EditGroupViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/EditGroupViewModel.kt @@ -15,7 +15,6 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn -import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import network.loki.messenger.R import org.session.libsession.database.StorageProtocol diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/compose/EditGroupScreen.kt b/app/src/main/java/org/thoughtcrime/securesms/groups/compose/EditGroupScreen.kt index e2141bfbf0..ed9aca7094 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/compose/EditGroupScreen.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/compose/EditGroupScreen.kt @@ -28,7 +28,6 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Alignment.Companion.CenterHorizontally import androidx.compose.ui.Alignment.Companion.CenterVertically -import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource @@ -122,7 +121,7 @@ fun EditGroupScreen( @Serializable private object RouteEditGroup -@OptIn(ExperimentalMaterial3Api::class, ExperimentalComposeUiApi::class) +@OptIn(ExperimentalMaterial3Api::class) @Composable fun EditGroup( onBack: () -> Unit, @@ -440,7 +439,7 @@ fun EditMemberItem( MemberItem( accountId = member.accountId, title = member.name, - subtitle = member.status?.getLabel(LocalContext.current), + subtitle = member.getLabel(LocalContext.current), subtitleColor = if (member.highlightStatus) { LocalColors.current.danger } else { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/compose/GroupMembersScreen.kt b/app/src/main/java/org/thoughtcrime/securesms/groups/compose/GroupMembersScreen.kt index 08a52ae34b..c2c8b41ea5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/compose/GroupMembersScreen.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/compose/GroupMembersScreen.kt @@ -62,7 +62,7 @@ fun GroupMembers( MemberItem( accountId = member.accountId, title = member.name, - subtitle = member.status?.getLabel(LocalContext.current), + subtitle = member.getLabel(LocalContext.current), subtitleColor = if (member.highlightStatus) { LocalColors.current.danger } else { diff --git a/libsession-util/src/main/java/network/loki/messenger/libsession_util/util/GroupMember.kt b/libsession-util/src/main/java/network/loki/messenger/libsession_util/util/GroupMember.kt index caba9ef0a6..51afe47809 100644 --- a/libsession-util/src/main/java/network/loki/messenger/libsession_util/util/GroupMember.kt +++ b/libsession-util/src/main/java/network/loki/messenger/libsession_util/util/GroupMember.kt @@ -76,7 +76,7 @@ class GroupMember private constructor( enum class Status(val nativeValue: Int) { INVITE_UNKNOWN(0), INVITE_NOT_SENT(1), - INVENT_SENDING(2), + INVITE_SENDING(2), INVITE_FAILED(3), INVITE_SENT(4), INVITE_ACCEPTED(5),