From 06e46b0beab6e989e5f56e1ca6aa3ec111760845 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Sat, 1 Oct 2022 14:46:48 +0100 Subject: [PATCH] mobile: disable notifications on group events, make member role default (#1158) * ios: disable notifications on group events, make member role default * same for android * change mute criteria * update --- .../java/chat/simplex/app/model/ChatModel.kt | 16 ++++++++++++++++ .../java/chat/simplex/app/model/SimpleXAPI.kt | 2 +- .../app/views/chat/group/AddGroupMembersView.kt | 2 +- apps/ios/Shared/Model/SimpleXAPI.swift | 2 +- .../Views/Chat/Group/AddGroupMembersView.swift | 2 +- apps/ios/SimpleXChat/ChatTypes.swift | 17 +++++++++++++++++ 6 files changed, 37 insertions(+), 4 deletions(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt b/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt index 5372ac6b66..f4e3b62861 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt @@ -999,6 +999,22 @@ data class ChatItem ( else -> false } + val isMutedMemberEvent: Boolean get() = + when (content) { + is CIContent.RcvGroupEventContent -> + when (content.rcvGroupEvent) { + is RcvGroupEvent.GroupUpdated -> true + is RcvGroupEvent.MemberConnected -> true + is RcvGroupEvent.UserDeleted -> false + is RcvGroupEvent.GroupDeleted -> false + is RcvGroupEvent.MemberAdded -> false + is RcvGroupEvent.MemberLeft -> false + is RcvGroupEvent.MemberDeleted -> false + } + is CIContent.SndGroupEventContent -> true + else -> false + } + fun withStatus(status: CIStatus): ChatItem = this.copy(meta = meta.copy(itemStatus = status)) companion object { diff --git a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt index 7b44743f8e..9c556cfa1a 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt @@ -888,7 +888,7 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a if (cItem.content.msgContent is MsgContent.MCImage && file != null && file.fileSize <= MAX_IMAGE_SIZE_AUTO_RCV && appPrefs.privacyAcceptImages.get()) { withApi { receiveFile(file.fileId) } } - if (!cItem.chatDir.sent && !cItem.isCall && (!isAppOnForeground(appContext) || chatModel.chatId.value != cInfo.id)) { + if (!cItem.chatDir.sent && !cItem.isCall && !cItem.isMutedMemberEvent && (!isAppOnForeground(appContext) || chatModel.chatId.value != cInfo.id)) { ntfManager.notifyMessageReceived(cInfo, cItem) } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/AddGroupMembersView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/AddGroupMembersView.kt index cfe22f96b8..6a5b761cf7 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/AddGroupMembersView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/AddGroupMembersView.kt @@ -33,7 +33,7 @@ import chat.simplex.app.views.helpers.* @Composable fun AddGroupMembersView(groupInfo: GroupInfo, chatModel: ChatModel, close: () -> Unit) { val selectedContacts = remember { mutableStateListOf() } - val selectedRole = remember { mutableStateOf(GroupMemberRole.Admin) } + val selectedRole = remember { mutableStateOf(GroupMemberRole.Member) } BackHandler(onBack = close) AddGroupMembersLayout( diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index c7bbf684d4..5edd965e88 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -876,7 +876,7 @@ func processReceivedMsg(_ res: ChatResponse) async { await receiveFile(fileId: file.fileId) } } - if !cItem.chatDir.sent && !cItem.isCall() { + if !cItem.chatDir.sent && !cItem.isCall() && !cItem.isMutedMemberEvent { NtfManager.shared.notifyMessageReceived(cInfo, cItem) } case let .chatItemStatusUpdated(aChatItem): diff --git a/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift b/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift index 1ada8c2401..6ccd970cb5 100644 --- a/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift +++ b/apps/ios/Shared/Views/Chat/Group/AddGroupMembersView.swift @@ -18,7 +18,7 @@ struct AddGroupMembersView: View { var showFooterCounter: Bool = true var addedMembersCb: ((Set) -> Void)? = nil @State private var selectedContacts = Set() - @State private var selectedRole: GroupMemberRole = .admin + @State private var selectedRole: GroupMemberRole = .member @State private var alert: AddGroupMembersAlert? private enum AddGroupMembersAlert: Identifiable { diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift index 01632b302e..5795225f68 100644 --- a/apps/ios/SimpleXChat/ChatTypes.swift +++ b/apps/ios/SimpleXChat/ChatTypes.swift @@ -892,6 +892,23 @@ public struct ChatItem: Identifiable, Decodable { } } + public var isMutedMemberEvent: Bool { + switch content { + case let .rcvGroupEvent(event): + switch event { + case .groupUpdated: return true + case .memberConnected: return true + case .userDeleted: return false + case .groupDeleted: return false + case .memberAdded: return false + case .memberLeft: return false + case .memberDeleted: return false + } + case .sndGroupEvent: return true + default: return true + } + } + public var memberDisplayName: String? { get { if case let .groupRcv(groupMember) = chatDir {