diff --git a/Linphone/Assets.xcassets/calendar.imageset/calendar.svg b/Linphone/Assets.xcassets/calendar.imageset/calendar.svg
index 5caacdbef..c066f4a4b 100644
--- a/Linphone/Assets.xcassets/calendar.imageset/calendar.svg
+++ b/Linphone/Assets.xcassets/calendar.imageset/calendar.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/Linphone/Assets.xcassets/trash.imageset/Contents.json b/Linphone/Assets.xcassets/trash.imageset/Contents.json
new file mode 100644
index 000000000..4c3681644
--- /dev/null
+++ b/Linphone/Assets.xcassets/trash.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "filename" : "trash.svg",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Linphone/Assets.xcassets/trash.imageset/trash.svg b/Linphone/Assets.xcassets/trash.imageset/trash.svg
new file mode 100644
index 000000000..b2d5dfe18
--- /dev/null
+++ b/Linphone/Assets.xcassets/trash.imageset/trash.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Linphone/UI/Main/Conversations/Fragments/ConversationsListFragment.swift b/Linphone/UI/Main/Conversations/Fragments/ConversationsListFragment.swift
index 40bde0799..d39a0835d 100644
--- a/Linphone/UI/Main/Conversations/Fragments/ConversationsListFragment.swift
+++ b/Linphone/UI/Main/Conversations/Fragments/ConversationsListFragment.swift
@@ -105,26 +105,46 @@ struct ConversationRow: View {
.frame(maxWidth: .infinity, alignment: .leading)
.lineLimit(1)
- if conversation.lastMessageInItalic {
- Text(conversation.lastMessageText)
- .italic()
- .if(conversation.unreadMessagesCount > 0) { view in
- view.bold()
- }
- .foregroundStyle(Color.grayMain2c400)
- .font(.system(size: 14))
- .frame(maxWidth: .infinity, alignment: .leading)
- .lineLimit(1)
- } else {
- Text(conversation.lastMessageText)
+ HStack(spacing: 0) {
+ Text(conversation.lastMessagePrefixText)
.foregroundStyle(Color.grayMain2c400)
.if(conversation.unreadMessagesCount > 0) { view in
view.default_text_style_700(styleSize: 14)
}
.default_text_style(styleSize: 14)
- .frame(maxWidth: .infinity, alignment: .leading)
.lineLimit(1)
+ .layoutPriority(1)
+
+ if !conversation.lastMessageIcon.isEmpty {
+ Image(conversation.lastMessageIcon)
+ .resizable()
+ .frame(width: 16, height: 16)
+ .layoutPriority(0)
+ .padding(.trailing, 2)
+ }
+
+ if conversation.lastMessageInItalic {
+ Text(conversation.lastMessageText)
+ .italic()
+ .if(conversation.unreadMessagesCount > 0) { view in
+ view.bold()
+ }
+ .foregroundStyle(Color.grayMain2c400)
+ .font(.system(size: 14))
+ .lineLimit(1)
+ .layoutPriority(-1)
+ } else {
+ Text(conversation.lastMessageText)
+ .foregroundStyle(Color.grayMain2c400)
+ .if(conversation.unreadMessagesCount > 0) { view in
+ view.default_text_style_700(styleSize: 14)
+ }
+ .default_text_style(styleSize: 14)
+ .lineLimit(1)
+ .layoutPriority(-1)
+ }
}
+ .frame(maxWidth: .infinity, alignment: .leading)
Spacer()
}
diff --git a/Linphone/UI/Main/Conversations/Model/ConversationModel.swift b/Linphone/UI/Main/Conversations/Model/ConversationModel.swift
index a878debe0..8b5bca791 100644
--- a/Linphone/UI/Main/Conversations/Model/ConversationModel.swift
+++ b/Linphone/UI/Main/Conversations/Model/ConversationModel.swift
@@ -46,7 +46,9 @@ class ConversationModel: ObservableObject, Identifiable {
@Published var isMuted: Bool
@Published var isEphemeral: Bool
@Published var encryptionEnabled: Bool
+ @Published var lastMessagePrefixText: String
@Published var lastMessageText: String
+ @Published var lastMessageIcon: String
@Published var lastMessageIsOutgoing: Bool
@Published var lastMessageState: Int
@Published var lastMessageInItalic: Bool
@@ -139,8 +141,12 @@ class ConversationModel: ObservableObject, Identifiable {
self.lastMessage = nil
+ self.lastMessagePrefixText = ""
+
self.lastMessageText = ""
+ self.lastMessageIcon = ""
+
self.lastMessageIsOutgoing = false
self.lastMessageState = 0
@@ -297,9 +303,9 @@ class ConversationModel: ObservableObject, Identifiable {
fromAddressFriend = nil
}
- var lastMessageTextTmp = (fromAddressFriend ?? "")
- + (lastMessage!.contents.first(where: {$0.isText == true})?.utf8Text ?? (lastMessage!.contents.first(where: {$0.isFile == true || $0.isFileTransfer == true})?.name ?? ""))
-
+ let lastMessagePrefixTextTmp = (fromAddressFriend ?? "")
+ var lastMessageTextTmp = (lastMessage!.contents.first(where: {$0.isText == true})?.utf8Text ?? (lastMessage!.contents.first(where: {$0.isFile == true || $0.isFileTransfer == true})?.name ?? ""))
+ var lastMessageIconTmp = ""
var lastMessageInItalicTmp = false
if lastMessage!.contents.first != nil && lastMessage!.contents.first!.isIcalendar == true {
@@ -314,6 +320,8 @@ class ConversationModel: ObservableObject, Identifiable {
lastMessageTextTmp = String(localized: "message_meeting_invitation_cancelled_notification")
}
+ lastMessageIconTmp = "calendar"
+
lastMessageInItalicTmp = true
}
}
@@ -322,9 +330,19 @@ class ConversationModel: ObservableObject, Identifiable {
if lastMessage!.isRetracted {
lastMessageTextTmp += lastMessage!.isOutgoing ? String(localized: "conversation_message_content_deleted_by_us_label") : String(localized: "conversation_message_content_deleted_label")
+ lastMessageIconTmp = "trash"
+
lastMessageInItalicTmp = true
}
+ if (lastMessage!.contents.first(where: {$0.isFile == true || $0.isFileTransfer == true})?.name != nil) {
+ lastMessageIconTmp = "file"
+ } else if lastMessage!.isReply {
+ lastMessageIconTmp = "reply"
+ } else if lastMessage!.isForward {
+ lastMessageIconTmp = "forward"
+ }
+
let lastMessageIsOutgoingTmp = lastMessage?.isOutgoing ?? false
let lastUpdateTimeTmp = lastMessage?.time ?? chatRoom.lastUpdateTime
@@ -332,7 +350,11 @@ class ConversationModel: ObservableObject, Identifiable {
let lastMessageStateTmp = lastMessage?.state.rawValue ?? 0
DispatchQueue.main.async {
+ self.lastMessagePrefixText = lastMessagePrefixTextTmp
+
self.lastMessageText = lastMessageTextTmp
+
+ self.lastMessageIcon = lastMessageIconTmp
self.lastMessageIsOutgoing = lastMessageIsOutgoingTmp
diff --git a/Linphone/UI/Main/Conversations/ViewModel/ConversationsListViewModel.swift b/Linphone/UI/Main/Conversations/ViewModel/ConversationsListViewModel.swift
index 6b42a64d8..49de08869 100644
--- a/Linphone/UI/Main/Conversations/ViewModel/ConversationsListViewModel.swift
+++ b/Linphone/UI/Main/Conversations/ViewModel/ConversationsListViewModel.swift
@@ -89,20 +89,16 @@ class ConversationsListViewModel: ObservableObject {
fromAddressFriend = nil
}
- var lastMessageTextTmp = (fromAddressFriend ?? "") + (lastMessage.contents.first(where: { $0.isText })?.utf8Text ?? (lastMessage.contents.first(where: { $0.isFile || $0.isFileTransfer })?.name ?? ""))
-
- if lastMessage.isRetracted {
- lastMessageTextTmp += lastMessage.isOutgoing ? String(localized: "conversation_message_content_deleted_by_us_label") : String(localized: "conversation_message_content_deleted_label")
- }
+ let lastMessagePrefixTextTmp = (fromAddressFriend ?? "")
if let index = self.conversationsList.firstIndex(where: { $0.chatRoom === conversationModel.chatRoom }) {
DispatchQueue.main.async {
- conversationModel.lastMessageText = lastMessageTextTmp
- self.conversationsList[index].lastMessageText = lastMessageTextTmp
+ conversationModel.lastMessagePrefixText = lastMessagePrefixTextTmp
+ self.conversationsList[index].lastMessagePrefixText = lastMessagePrefixTextTmp
}
} else {
DispatchQueue.main.async {
- conversationModel.lastMessageText = lastMessageTextTmp
+ conversationModel.lastMessagePrefixText = lastMessagePrefixTextTmp
}
}
}
@@ -152,20 +148,16 @@ class ConversationsListViewModel: ObservableObject {
fromAddressFriend = nil
}
- var lastMessageTextTmp = (fromAddressFriend ?? "") + (lastMessage.contents.first(where: { $0.isText })?.utf8Text ?? (lastMessage.contents.first(where: { $0.isFile || $0.isFileTransfer })?.name ?? ""))
-
- if lastMessage.isRetracted {
- lastMessageTextTmp += lastMessage.isOutgoing ? String(localized: "conversation_message_content_deleted_by_us_label") : String(localized: "conversation_message_content_deleted_label")
- }
+ let lastMessagePrefixTextTmp = (fromAddressFriend ?? "")
if let index = self.conversationsList.firstIndex(where: { $0.chatRoom === conversationModel.chatRoom }) {
DispatchQueue.main.async {
- conversationModel.lastMessageText = lastMessageTextTmp
- self.conversationsList[index].lastMessageText = lastMessageTextTmp
+ conversationModel.lastMessagePrefixText = lastMessagePrefixTextTmp
+ self.conversationsList[index].lastMessagePrefixText = lastMessagePrefixTextTmp
}
} else {
DispatchQueue.main.async {
- conversationModel.lastMessageText = lastMessageTextTmp
+ conversationModel.lastMessagePrefixText = lastMessagePrefixTextTmp
}
}
}