From 6b38e5d799cd8a4bb4e15fc638202debbc4bbaca Mon Sep 17 00:00:00 2001 From: Mikunj Date: Wed, 22 Jan 2020 09:18:12 +1100 Subject: [PATCH] Get group record programatically instead of making user pass in the recipient. This was the original function but i added in recipient to it. This is causing crashes and thus we just get the group record. --- .../conversation/ConversationUpdateItem.java | 2 +- .../database/model/MessageRecord.java | 2 +- .../securesms/util/GroupUtil.java | 41 +++++++++++-------- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java b/src/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java index 5e3e103d23..2d8c98bee0 100644 --- a/src/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java +++ b/src/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java @@ -175,7 +175,7 @@ public class ConversationUpdateItem extends LinearLayout icon.setImageResource(R.drawable.ic_group_grey600_24dp); icon.clearColorFilter(); - GroupUtil.getDescription(getContext(), messageRecord.getBody(), messageRecord.getRecipient()).addListener(this); + GroupUtil.getDescription(getContext(), messageRecord.getBody()).addListener(this); body.setText(messageRecord.getDisplayBody(getContext())); title.setVisibility(GONE); diff --git a/src/org/thoughtcrime/securesms/database/model/MessageRecord.java b/src/org/thoughtcrime/securesms/database/model/MessageRecord.java index a2b324c7cb..0531562b73 100644 --- a/src/org/thoughtcrime/securesms/database/model/MessageRecord.java +++ b/src/org/thoughtcrime/securesms/database/model/MessageRecord.java @@ -92,7 +92,7 @@ public abstract class MessageRecord extends DisplayRecord { if (isGroupUpdate() && isOutgoing()) { return new SpannableString(context.getString(R.string.MessageRecord_you_updated_group)); } else if (isGroupUpdate()) { - return new SpannableString(GroupUtil.getDescription(context, getBody(), getRecipient()).toString(getIndividualRecipient())); + return new SpannableString(GroupUtil.getDescription(context, getBody()).toString(getIndividualRecipient())); } else if (isGroupQuit() && isOutgoing()) { return new SpannableString(context.getString(R.string.MessageRecord_left_group)); } else if (isGroupQuit()) { diff --git a/src/org/thoughtcrime/securesms/util/GroupUtil.java b/src/org/thoughtcrime/securesms/util/GroupUtil.java index 3dc6c363a7..9268e78264 100644 --- a/src/org/thoughtcrime/securesms/util/GroupUtil.java +++ b/src/org/thoughtcrime/securesms/util/GroupUtil.java @@ -7,10 +7,8 @@ import android.support.annotation.WorkerThread; import com.google.protobuf.ByteString; -import network.loki.messenger.BuildConfig; import network.loki.messenger.R; import org.thoughtcrime.securesms.database.Address; -import org.thoughtcrime.securesms.database.Database; import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.GroupDatabase; import org.thoughtcrime.securesms.database.GroupDatabase.*; @@ -114,25 +112,17 @@ public class GroupUtil { } - public static @NonNull GroupDescription getDescription(@NonNull Context context, @Nullable String encodedGroup, @Nullable Recipient groupRecipient) { - // Make sure we always are passing a group recipient - if (BuildConfig.DEBUG && groupRecipient != null && !groupRecipient.isGroupRecipient()) { - throw new AssertionError(); - } - + public static @NonNull GroupDescription getDescription(@NonNull Context context, @Nullable String encodedGroup) { if (encodedGroup == null) { - return new GroupDescription(context, null, null); + return new GroupDescription(context, null); } try { GroupContext groupContext = GroupContext.parseFrom(Base64.decode(encodedGroup)); - GroupRecord groupRecord = groupRecipient != null - ? DatabaseFactory.getGroupDatabase(context).getGroup(groupRecipient.getAddress().toGroupString()).orNull() - : null; - return new GroupDescription(context, groupContext, groupRecord); + return new GroupDescription(context, groupContext); } catch (IOException e) { Log.w(TAG, e); - return new GroupDescription(context, null, null); + return new GroupDescription(context, null); } } @@ -144,8 +134,7 @@ public class GroupUtil { private final List removedMembers; private boolean ourDeviceWasRemoved; - public GroupDescription(@NonNull Context context, @Nullable GroupContext groupContext) { this(context, groupContext, null); } - public GroupDescription(@NonNull Context context, @Nullable GroupContext groupContext, @Nullable GroupRecord groupRecord) { + public GroupDescription(@NonNull Context context, @Nullable GroupContext groupContext) { this.context = context.getApplicationContext(); this.groupContext = groupContext; @@ -155,7 +144,7 @@ public class GroupUtil { if (groupContext != null && !groupContext.getMembersList().isEmpty()) { List memberList = groupContext.getMembersList(); - List
currentMembers = groupRecord != null ? groupRecord.getMembers() : null; + List
currentMembers = getCurrentGroupMembers(); // Add them to the member or removed members lists for (String member : memberList) { @@ -234,5 +223,23 @@ public class GroupUtil { return result; } + + private List
getCurrentGroupMembers() { + if (groupContext == null) { return null; } + GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context); + byte[] decodedGroupId = groupContext.getId().toByteArray(); + String signalGroupId = getEncodedId(decodedGroupId, false); + String publicChatId = getEncodedPublicChatId(decodedGroupId); + String rssFeedId = getEncodedRSSFeedId(decodedGroupId); + GroupRecord groupRecord = null; + if (!groupDatabase.isUnknownGroup(signalGroupId)) { + groupRecord = groupDatabase.getGroup(signalGroupId).orNull(); + } else if (!groupDatabase.isUnknownGroup(publicChatId)) { + groupRecord = groupDatabase.getGroup(publicChatId).orNull(); + } else if (!groupDatabase.isUnknownGroup(rssFeedId)) { + groupRecord = groupDatabase.getGroup(rssFeedId).orNull(); + } + return (groupRecord != null) ? groupRecord.getMembers() : null; + } } }