diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerRepository.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerRepository.java index 2f0aa3267..81fdfeb96 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerRepository.java @@ -1,13 +1,9 @@ package org.thoughtcrime.securesms.conversation.ui.mentions; -import android.content.Context; - import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; -import com.annimon.stream.Stream; - import org.thoughtcrime.securesms.database.GroupDatabase; import org.thoughtcrime.securesms.database.RecipientDatabase; import org.thoughtcrime.securesms.database.SignalDatabase; @@ -22,7 +18,7 @@ final class MentionsPickerRepository { private final RecipientDatabase recipientDatabase; private final GroupDatabase groupDatabase; - MentionsPickerRepository(@NonNull Context context) { + MentionsPickerRepository() { recipientDatabase = SignalDatabase.recipients(); groupDatabase = SignalDatabase.groups(); } @@ -33,9 +29,7 @@ final class MentionsPickerRepository { return Collections.emptyList(); } - return Stream.of(groupDatabase.getGroupMembers(recipient.requireGroupId(), GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF)) - .map(Recipient::getId) - .toList(); + return groupDatabase.getGroupMemberIds(recipient.requireGroupId(), GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); } @WorkerThread diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerViewModel.java index acfd2eaba..56fcd5d8c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerViewModel.java @@ -11,7 +11,6 @@ import androidx.lifecycle.ViewModelProvider; import com.annimon.stream.Stream; import org.thoughtcrime.securesms.conversation.ui.mentions.MentionsPickerRepository.MentionQuery; -import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.recipients.LiveRecipient; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; @@ -112,7 +111,7 @@ public class MentionsPickerViewModel extends ViewModel { @Override public @NonNull T create(@NonNull Class modelClass) { //noinspection ConstantConditions - return modelClass.cast(new MentionsPickerViewModel(new MentionsPickerRepository(ApplicationDependencies.getApplication()))); + return modelClass.cast(new MentionsPickerViewModel(new MentionsPickerRepository())); } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java index e771e2bf7..7ea4d7e85 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java @@ -432,6 +432,22 @@ public class GroupDatabase extends Database { return 0; } + @WorkerThread + public @NonNull List getGroupMemberIds(@NonNull GroupId groupId, @NonNull MemberSet memberSet) { + if (groupId.isV2()) { + return getGroup(groupId).map(g -> g.requireV2GroupProperties().getMemberRecipientIds(memberSet)) + .orElse(Collections.emptyList()); + } else { + List currentMembers = getCurrentMembers(groupId); + + if (!memberSet.includeSelf) { + currentMembers.remove(Recipient.self().getId()); + } + + return currentMembers; + } + } + @WorkerThread public @NonNull List getGroupMembers(@NonNull GroupId groupId, @NonNull MemberSet memberSet) { if (groupId.isV2()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java index 49663d224..b9bc7f485 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java @@ -84,7 +84,7 @@ public class RetrieveProfileJob extends BaseJob { * Identical to {@link #enqueue(Set)})}, but run on a background thread for convenience. */ public static void enqueueAsync(@NonNull RecipientId recipientId) { - SignalExecutors.BOUNDED.execute(() -> ApplicationDependencies.getJobManager().add(forRecipient(recipientId))); + SignalExecutors.BOUNDED_IO.execute(() -> ApplicationDependencies.getJobManager().add(forRecipient(recipientId))); } /** @@ -121,10 +121,9 @@ public class RetrieveProfileJob extends BaseJob { if (recipient.isSelf()) { return new RefreshOwnProfileJob(); } else if (recipient.isGroup()) { - Context context = ApplicationDependencies.getApplication(); - List recipients = SignalDatabase.groups().getGroupMembers(recipient.requireGroupId(), GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); + List recipients = SignalDatabase.groups().getGroupMemberIds(recipient.requireGroupId(), GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); - return new RetrieveProfileJob(Stream.of(recipients).map(Recipient::getId).collect(Collectors.toSet())); + return new RetrieveProfileJob(new HashSet<>(recipients)); } else { return new RetrieveProfileJob(Collections.singleton(recipientId)); }