From 2261c9527c808c06b126f88c518f28f099e4ebf8 Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Wed, 8 Aug 2018 02:42:46 +0200 Subject: [PATCH] Fix #264 Signed-off-by: Mario Danic --- .../MagicIncomingTextMessageViewHolder.java | 9 ++--- .../MagicOutcomingTextMessageViewHolder.java | 10 ++---- .../MagicSystemMessageViewHolder.java | 33 ++++++++++++++++++- .../talk/controllers/ChatController.java | 2 ++ .../talk/models/json/chat/ChatMessage.java | 4 +++ 5 files changed, 44 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java index 7f097f93c..2bf6f3588 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicIncomingTextMessageViewHolder.java @@ -36,7 +36,6 @@ import com.google.android.flexbox.FlexboxLayout; import com.kevalpatel2106.emoticongifkeyboard.widget.EmoticonTextView; import com.nextcloud.talk.R; import com.nextcloud.talk.application.NextcloudTalkApplication; -import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.models.json.chat.ChatMessage; import com.nextcloud.talk.utils.DisplayUtils; import com.nextcloud.talk.utils.EmojiDetection; @@ -72,7 +71,6 @@ public class MagicIncomingTextMessageViewHolder @Inject UserUtils userUtils; - private UserEntity currentUser; private View itemView; public MagicIncomingTextMessageViewHolder(View itemView) { @@ -81,7 +79,6 @@ public class MagicIncomingTextMessageViewHolder NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this); this.itemView = itemView; - currentUser = userUtils.getCurrentUser(); } @@ -132,13 +129,13 @@ public class MagicIncomingTextMessageViewHolder Spannable messageString = new SpannableString(message.getText()); - if (messageParameters != null && message.getMessageParameters().size() > 0) { - for (String key : message.getMessageParameters().keySet()) { + if (messageParameters != null && messageParameters.size() > 0) { + for (String key : messageParameters.keySet()) { Map individualHashMap = message.getMessageParameters().get(key); if (individualHashMap.get("type").equals("user")) { int color; - if (individualHashMap.get("id").equals(currentUser.getUserId())) { + if (individualHashMap.get("id").equals(message.getActiveUserId())) { color = NextcloudTalkApplication.getSharedApplication().getResources().getColor(R.color .nc_incoming_text_mention_you); } else { diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.java index 4b95e4160..517c2e23d 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/MagicOutcomingTextMessageViewHolder.java @@ -34,7 +34,6 @@ import com.google.android.flexbox.FlexboxLayout; import com.kevalpatel2106.emoticongifkeyboard.widget.EmoticonTextView; import com.nextcloud.talk.R; import com.nextcloud.talk.application.NextcloudTalkApplication; -import com.nextcloud.talk.models.database.UserEntity; import com.nextcloud.talk.models.json.chat.ChatMessage; import com.nextcloud.talk.utils.DisplayUtils; import com.nextcloud.talk.utils.EmojiDetection; @@ -61,8 +60,6 @@ public class MagicOutcomingTextMessageViewHolder extends MessageHolders.Outcomin @Inject UserUtils userUtils; - private UserEntity currentUser; - private View itemView; public MagicOutcomingTextMessageViewHolder(View itemView) { @@ -71,7 +68,6 @@ public class MagicOutcomingTextMessageViewHolder extends MessageHolders.Outcomin NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this); this.itemView = itemView; - currentUser = userUtils.getCurrentUser(); } @Override @@ -89,11 +85,11 @@ public class MagicOutcomingTextMessageViewHolder extends MessageHolders.Outcomin FlexboxLayout.LayoutParams layoutParams = (FlexboxLayout.LayoutParams) messageTimeView.getLayoutParams(); layoutParams.setWrapBefore(false); - if (messageParameters != null && message.getMessageParameters().size() > 0) { - for (String key : message.getMessageParameters().keySet()) { + if (messageParameters != null && messageParameters.size() > 0) { + for (String key : messageParameters.keySet()) { Map individualHashMap = message.getMessageParameters().get(key); if (individualHashMap.get("type").equals("user")) { - if (!individualHashMap.get("id").equals(currentUser.getUserId())) { + if (!individualHashMap.get("id").equals(message.getActiveUserId())) { messageString = DisplayUtils.searchAndColor(messageText.getText().toString(), messageString, "@" + individualHashMap.get("name"), NextcloudTalkApplication .getSharedApplication().getResources().getColor(R.color.nc_outcoming_text_default)); 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 f52be7e06..45cdb7275 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 @@ -20,11 +20,18 @@ package com.nextcloud.talk.adapters.messages; +import android.text.Spannable; +import android.text.SpannableString; import android.view.View; +import com.nextcloud.talk.R; +import com.nextcloud.talk.application.NextcloudTalkApplication; import com.nextcloud.talk.models.json.chat.ChatMessage; +import com.nextcloud.talk.utils.DisplayUtils; import com.stfalcon.chatkit.messages.MessageHolders; +import java.util.Map; + public class MagicSystemMessageViewHolder extends MessageHolders.IncomingTextMessageViewHolder { public MagicSystemMessageViewHolder(View itemView) { @@ -34,6 +41,30 @@ public class MagicSystemMessageViewHolder extends MessageHolders.IncomingTextMes @Override public void onBind(ChatMessage message) { super.onBind(message); - text.setText(message.getText()); + + Spannable messageString = new SpannableString(message.getText()); + + if (message.getMessageParameters() != null && message.getMessageParameters().size() > 0) { + for (String key : message.getMessageParameters().keySet()) { + Map individualHashMap = message.getMessageParameters().get(key); + if (individualHashMap.get("type").equals("user")) { + int color; + + if (individualHashMap.get("id").equals(message.getActiveUserId())) { + color = NextcloudTalkApplication.getSharedApplication().getResources().getColor(R.color + .nc_incoming_text_mention_you); + } else { + color = NextcloudTalkApplication.getSharedApplication().getResources().getColor(R.color + .nc_incoming_text_mention_others); + } + + messageString = DisplayUtils.searchAndColor(message.getText(), + messageString, "@" + individualHashMap.get("name"), color); + } + } + + } + + text.setText(messageString); } } diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java index 584919533..c78f2183e 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.java @@ -813,6 +813,7 @@ public class ChatController extends BaseController implements MessagesListAdapte } } chatMessageList.get(i).setBaseUrl(conversationUser.getBaseUrl()); + chatMessageList.get(i).setActiveUserId(conversationUser.getUserId()); if (globalLastKnownPastMessageId == -1 || chatMessageList.get(i).getJsonMessageId() < globalLastKnownPastMessageId) { globalLastKnownPastMessageId = chatMessageList.get(i).getJsonMessageId(); @@ -835,6 +836,7 @@ public class ChatController extends BaseController implements MessagesListAdapte chatMessage = chatMessageList.get(i); chatMessage.setBaseUrl(conversationUser.getBaseUrl()); + chatMessageList.get(i).setActiveUserId(conversationUser.getUserId()); if (conversationUser.getUserId().equals("?") && !TextUtils.isEmpty(myFirstMessage.toString())) { if (chatMessage.getActorType().equals("guests") && chatMessage.getActorDisplayName().equals(conversationUser.getDisplayName())) { 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 08371dbfc..3af905214 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 @@ -20,6 +20,7 @@ package com.nextcloud.talk.models.json.chat; import com.bluelinelabs.logansquare.annotation.JsonField; +import com.bluelinelabs.logansquare.annotation.JsonIgnore; import com.bluelinelabs.logansquare.annotation.JsonObject; import com.nextcloud.talk.R; import com.nextcloud.talk.models.json.converters.EnumSystemMessageTypeConverter; @@ -81,7 +82,10 @@ public class ChatMessage implements IMessage, MessageContentType { @JsonField(name = "systemMessage", typeConverter = EnumSystemMessageTypeConverter.class) SystemMessageType systemMessageType; + @JsonIgnore boolean isGrouped; + @JsonIgnore + String activeUserId; public String getBaseUrl() {