From 1fcb352db471b583cafe9e94e8adc65b53878765 Mon Sep 17 00:00:00 2001
From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com>
Date: Tue, 25 Feb 2025 19:15:56 +0400
Subject: [PATCH] ui: rejected group previews (#5665)
---
apps/ios/Shared/Views/ChatList/ChatPreviewView.swift | 4 +++-
apps/ios/SimpleXChat/ChatTypes.swift | 5 +++++
.../commonMain/kotlin/chat/simplex/common/model/ChatModel.kt | 5 +++++
.../chat/simplex/common/views/chatlist/ChatPreviewView.kt | 4 +++-
.../common/src/commonMain/resources/MR/base/strings.xml | 2 ++
5 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift
index 6266395905..6969ae325c 100644
--- a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift
+++ b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift
@@ -143,6 +143,7 @@ struct ChatPreviewView: View {
}
case let .group(groupInfo):
switch (groupInfo.membership.memberStatus) {
+ case .memRejected: inactiveIcon()
case .memLeft: inactiveIcon()
case .memRemoved: inactiveIcon()
case .memGroupDeleted: inactiveIcon()
@@ -168,7 +169,7 @@ struct ChatPreviewView: View {
let v = previewTitle(t)
switch (groupInfo.membership.memberStatus) {
case .memInvited: v.foregroundColor(deleting ? theme.colors.secondary : chat.chatInfo.incognito ? .indigo : theme.colors.primary)
- case .memAccepted: v.foregroundColor(theme.colors.secondary)
+ case .memAccepted, .memRejected: v.foregroundColor(theme.colors.secondary)
default: if deleting { v.foregroundColor(theme.colors.secondary) } else { v }
}
default: previewTitle(t)
@@ -336,6 +337,7 @@ struct ChatPreviewView: View {
}
case let .group(groupInfo):
switch (groupInfo.membership.memberStatus) {
+ case .memRejected: chatPreviewInfoText("rejected")
case .memInvited: groupInvitationPreviewText(groupInfo)
case .memAccepted: chatPreviewInfoText("connecting…")
default: EmptyView()
diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift
index 554207e90d..169a7c21de 100644
--- a/apps/ios/SimpleXChat/ChatTypes.swift
+++ b/apps/ios/SimpleXChat/ChatTypes.swift
@@ -2141,6 +2141,7 @@ public struct GroupMember: Identifiable, Decodable, Hashable {
public var memberActive: Bool {
switch memberStatus {
+ case .memRejected: return false
case .memRemoved: return false
case .memLeft: return false
case .memGroupDeleted: return false
@@ -2158,6 +2159,7 @@ public struct GroupMember: Identifiable, Decodable, Hashable {
public var memberCurrent: Bool {
switch memberStatus {
+ case .memRejected: return false
case .memRemoved: return false
case .memLeft: return false
case .memGroupDeleted: return false
@@ -2288,6 +2290,7 @@ public enum GroupMemberCategory: String, Decodable, Hashable {
}
public enum GroupMemberStatus: String, Decodable, Hashable {
+ case memRejected = "rejected"
case memRemoved = "removed"
case memLeft = "left"
case memGroupDeleted = "deleted"
@@ -2303,6 +2306,7 @@ public enum GroupMemberStatus: String, Decodable, Hashable {
public var text: LocalizedStringKey {
switch self {
+ case .memRejected: return "rejected"
case .memRemoved: return "removed"
case .memLeft: return "left"
case .memGroupDeleted: return "group deleted"
@@ -2320,6 +2324,7 @@ public enum GroupMemberStatus: String, Decodable, Hashable {
public var shortText: LocalizedStringKey {
switch self {
+ case .memRejected: return "rejected"
case .memRemoved: return "removed"
case .memLeft: return "left"
case .memGroupDeleted: return "group deleted"
diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt
index 6424397531..7ef8123d2f 100644
--- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt
+++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt
@@ -1910,6 +1910,7 @@ data class GroupMember (
}
val memberActive: Boolean get() = when (this.memberStatus) {
+ GroupMemberStatus.MemRejected -> false
GroupMemberStatus.MemRemoved -> false
GroupMemberStatus.MemLeft -> false
GroupMemberStatus.MemGroupDeleted -> false
@@ -1925,6 +1926,7 @@ data class GroupMember (
}
val memberCurrent: Boolean get() = when (this.memberStatus) {
+ GroupMemberStatus.MemRejected -> false
GroupMemberStatus.MemRemoved -> false
GroupMemberStatus.MemLeft -> false
GroupMemberStatus.MemGroupDeleted -> false
@@ -2028,6 +2030,7 @@ enum class GroupMemberCategory {
@Serializable
enum class GroupMemberStatus {
+ @SerialName("rejected") MemRejected,
@SerialName("removed") MemRemoved,
@SerialName("left") MemLeft,
@SerialName("deleted") MemGroupDeleted,
@@ -2042,6 +2045,7 @@ enum class GroupMemberStatus {
@SerialName("creator") MemCreator;
val text: String get() = when (this) {
+ MemRejected -> generalGetString(MR.strings.group_member_status_rejected)
MemRemoved -> generalGetString(MR.strings.group_member_status_removed)
MemLeft -> generalGetString(MR.strings.group_member_status_left)
MemGroupDeleted -> generalGetString(MR.strings.group_member_status_group_deleted)
@@ -2057,6 +2061,7 @@ enum class GroupMemberStatus {
}
val shortText: String get() = when (this) {
+ MemRejected -> generalGetString(MR.strings.group_member_status_rejected)
MemRemoved -> generalGetString(MR.strings.group_member_status_removed)
MemLeft -> generalGetString(MR.strings.group_member_status_left)
MemGroupDeleted -> generalGetString(MR.strings.group_member_status_group_deleted)
diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatPreviewView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatPreviewView.kt
index d379131171..93d512507a 100644
--- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatPreviewView.kt
+++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatPreviewView.kt
@@ -70,6 +70,7 @@ fun ChatPreviewView(
}
is ChatInfo.Group ->
when (cInfo.groupInfo.membership.memberStatus) {
+ GroupMemberStatus.MemRejected -> inactiveIcon()
GroupMemberStatus.MemLeft -> inactiveIcon()
GroupMemberStatus.MemRemoved -> inactiveIcon()
GroupMemberStatus.MemGroupDeleted -> inactiveIcon()
@@ -156,7 +157,7 @@ fun ChatPreviewView(
else
if (chat.chatInfo.incognito) Indigo else MaterialTheme.colors.primary
)
- GroupMemberStatus.MemAccepted -> chatPreviewTitleText(MaterialTheme.colors.secondary)
+ GroupMemberStatus.MemAccepted, GroupMemberStatus.MemRejected -> chatPreviewTitleText(MaterialTheme.colors.secondary)
else -> chatPreviewTitleText(
if (deleting)
MaterialTheme.colors.secondary
@@ -237,6 +238,7 @@ fun ChatPreviewView(
}
is ChatInfo.Group ->
when (cInfo.groupInfo.membership.memberStatus) {
+ GroupMemberStatus.MemRejected -> Text(stringResource(MR.strings.group_preview_rejected))
GroupMemberStatus.MemInvited -> Text(groupInvitationPreviewText(currentUserProfileDisplayName, cInfo.groupInfo))
GroupMemberStatus.MemAccepted -> Text(stringResource(MR.strings.group_connection_pending), color = MaterialTheme.colors.secondary)
else -> {}
diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml
index 1d445f710f..aa0f49ee1d 100644
--- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml
+++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml
@@ -418,6 +418,7 @@
send direct message
you are invited to group
join as %s
+ rejected
connecting…
Tap to start a new chat
Chat with the developers
@@ -1622,6 +1623,7 @@
owner
+ rejected
removed
left
group deleted