From a1e694104c37ef5c60495a03719ab92f269aa0ed Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Fri, 4 Mar 2022 11:15:04 +0100 Subject: [PATCH] add groups and circles to system messages ("add"+"remove") Signed-off-by: Marcel Hibbe --- .../MagicSystemMessageViewHolder.java | 25 +++++++++++-------- .../talk/models/json/chat/ChatMessage.java | 7 ++++++ .../talk/models/json/chat/ChatUtils.kt | 2 ++ .../EnumSystemMessageTypeConverter.kt | 18 +++++++++++++ 4 files changed, 42 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicSystemMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicSystemMessageViewHolder.java index cedf5e2b5..f61407da3 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicSystemMessageViewHolder.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicSystemMessageViewHolder.java @@ -56,7 +56,7 @@ public class MagicSystemMessageViewHolder extends MessageHolders.IncomingTextMes super(itemView); NextcloudTalkApplication.Companion.getSharedApplication().getComponentApplication().inject(this); } - + @Override public void onBind(ChatMessage message) { super.onBind(message); @@ -70,8 +70,8 @@ public class MagicSystemMessageViewHolder extends MessageHolders.IncomingTextMes mentionColor = resources.getColor(R.color.textColorMaxContrast); Drawable bubbleDrawable = DisplayUtils.getMessageSelector(normalColor, - resources.getColor(R.color.transparent), pressedColor, - R.drawable.shape_grouped_incoming_message); + resources.getColor(R.color.transparent), pressedColor, + R.drawable.shape_grouped_incoming_message); ViewCompat.setBackground(bubble, bubbleDrawable); Spannable messageString = new SpannableString(message.getText()); @@ -79,13 +79,18 @@ public class MagicSystemMessageViewHolder extends MessageHolders.IncomingTextMes if (message.messageParameters != null && message.messageParameters.size() > 0) { for (String key : message.messageParameters.keySet()) { Map individualMap = message.messageParameters.get(key); - if (individualMap != null && - ("user".equals(individualMap.get("type")) || - "guest".equals(individualMap.get("type")) || - "call".equals(individualMap.get("type")) - )) { - messageString = DisplayUtils.searchAndColor( - messageString, "@" + individualMap.get("name"), mentionColor); + + if (individualMap != null && individualMap.containsKey("name")) { + String searchText; + if ("user".equals(individualMap.get("type")) || + "guest".equals(individualMap.get("type")) || + "call".equals(individualMap.get("type")) + ) { + searchText = "@" + individualMap.get("name"); + } else { + searchText = individualMap.get("name"); + } + messageString = DisplayUtils.searchAndColor(messageString, searchText, mentionColor); } } } diff --git a/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java b/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java index b2254a788..e2b693220 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java +++ b/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java @@ -611,6 +611,9 @@ public class ChatMessage implements MessageContentType, MessageContentType.Image VOICE_MESSAGE } + /** + * see https://nextcloud-talk.readthedocs.io/en/latest/chat/#system-messages + */ public enum SystemMessageType { DUMMY, CONVERSATION_CREATED, @@ -638,6 +641,10 @@ public class ChatMessage implements MessageContentType, MessageContentType.Image PASSWORD_REMOVED, USER_ADDED, USER_REMOVED, + GROUP_ADDED, + GROUP_REMOVED, + CIRCLE_ADDED, + CIRCLE_REMOVED, MODERATOR_PROMOTED, MODERATOR_DEMOTED, GUEST_MODERATOR_PROMOTED, diff --git a/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatUtils.kt b/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatUtils.kt index 984a858ef..030de6b14 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatUtils.kt @@ -41,6 +41,8 @@ class ChatUtils { } else { individualHashMap["link"].toString() } + } else { + resultMessage = individualHashMap?.get("name")?.let { resultMessage?.replace("{$key}", it) } } } } diff --git a/app/src/main/java/com/nextcloud/talk/models/json/converters/EnumSystemMessageTypeConverter.kt b/app/src/main/java/com/nextcloud/talk/models/json/converters/EnumSystemMessageTypeConverter.kt index 75521cd7c..c35d14653 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/converters/EnumSystemMessageTypeConverter.kt +++ b/app/src/main/java/com/nextcloud/talk/models/json/converters/EnumSystemMessageTypeConverter.kt @@ -33,6 +33,8 @@ import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.CALL_LE import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.CALL_MISSED import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.CALL_STARTED import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.CALL_TRIED +import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.CIRCLE_ADDED +import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.CIRCLE_REMOVED import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.CLEARED_CHAT import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.CONVERSATION_CREATED import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.CONVERSATION_RENAMED @@ -40,6 +42,8 @@ import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.DESCRIP import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.DESCRIPTION_SET import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.DUMMY import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.FILE_SHARED +import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.GROUP_ADDED +import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.GROUP_REMOVED import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.GUESTS_ALLOWED import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.GUESTS_DISALLOWED import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.GUEST_MODERATOR_DEMOTED @@ -67,6 +71,8 @@ import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.USER_AD import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.USER_REMOVED /* +* see https://nextcloud-talk.readthedocs.io/en/latest/chat/#system-messages +* * `conversation_created` - {actor} created the conversation * `conversation_renamed` - {actor} renamed the conversation from "foo" to "bar" * `description_set` - {actor} set the description to "Hello world" @@ -92,6 +98,10 @@ import com.nextcloud.talk.models.json.chat.ChatMessage.SystemMessageType.USER_RE * `password_removed` - {actor} removed the password for the conversation * `user_added` - {actor} added {user} to the conversation * `user_removed` - {actor} removed {user} from the conversation +* `group_added` - {actor} added group {group} to the conversation +* `group_removed` - {actor} removed group {group} from the conversation +* `circle_added` - {actor} added circle {circle} to the conversation +* `circle_removed` - {actor} removed circle {circle} from the conversation * `moderator_promoted` - {actor} promoted {user} to moderator * `moderator_demoted` - {actor} demoted {user} from moderator * `guest_moderator_promoted` - {actor} promoted {user} to moderator @@ -134,6 +144,10 @@ class EnumSystemMessageTypeConverter : StringBasedTypeConverter return PASSWORD_REMOVED "user_added" -> return USER_ADDED "user_removed" -> return USER_REMOVED + "group_added" -> return GROUP_ADDED + "group_removed" -> return GROUP_REMOVED + "circle_added" -> return CIRCLE_ADDED + "circle_removed" -> return CIRCLE_REMOVED "moderator_promoted" -> return MODERATOR_PROMOTED "moderator_demoted" -> return MODERATOR_DEMOTED "guest_moderator_promoted" -> return GUEST_MODERATOR_PROMOTED @@ -183,6 +197,10 @@ class EnumSystemMessageTypeConverter : StringBasedTypeConverter return "password_removed" USER_ADDED -> return "user_added" USER_REMOVED -> return "user_removed" + GROUP_ADDED -> return "group_added" + GROUP_REMOVED -> return "group_removed" + CIRCLE_ADDED -> return "circle_added" + CIRCLE_REMOVED -> return "circle_removed" MODERATOR_PROMOTED -> return "moderator_promoted" MODERATOR_DEMOTED -> return "moderator_demoted" GUEST_MODERATOR_PROMOTED -> return "guest_moderator_promoted"