Fix recipient resolution during add to Groups V2.
This commit is contained in:
parent
5bf7a55bfa
commit
5dc51c34ea
6 changed files with 25 additions and 29 deletions
|
@ -3,7 +3,6 @@ package org.thoughtcrime.securesms.groups;
|
|||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
|
@ -67,15 +66,14 @@ public final class GroupsV2CapabilityChecker {
|
|||
throws IOException
|
||||
{
|
||||
Set<RecipientId> recipientIdsSet = new HashSet<>(recipientIds);
|
||||
Set<Recipient> resolved = Stream.of(recipientIdsSet).map(Recipient::resolved).collect(Collectors.toSet());
|
||||
|
||||
refreshCapabilitiesIfNecessary(resolved);
|
||||
refreshCapabilitiesIfNecessary(Recipient.resolvedList(recipientIdsSet));
|
||||
|
||||
boolean noSelfGV2Support = false;
|
||||
int noGv2Count = 0;
|
||||
int noUuidCount = 0;
|
||||
|
||||
for (Recipient member : resolved) {
|
||||
for (RecipientId id : recipientIds) {
|
||||
Recipient member = Recipient.resolved(id);
|
||||
Recipient.Capability gv2Capability = member.getGroupsV2Capability();
|
||||
|
||||
if (gv2Capability != Recipient.Capability.SUPPORTED) {
|
||||
|
|
|
@ -126,13 +126,11 @@ public class CreateGroupActivity extends ContactSelectionActivity {
|
|||
SimpleProgressDialog.DismissibleDialog dismissibleDialog = SimpleProgressDialog.showDelayed(this);
|
||||
|
||||
SimpleTask.run(getLifecycle(), () -> {
|
||||
RecipientId[] ids = Stream.of(contactsFragment.getSelectedContacts())
|
||||
.map(selectedContact -> selectedContact.getOrCreateRecipientId(this))
|
||||
.toArray(RecipientId[]::new);
|
||||
List<RecipientId> ids = Stream.of(contactsFragment.getSelectedContacts())
|
||||
.map(selectedContact -> selectedContact.getOrCreateRecipientId(this))
|
||||
.toList();
|
||||
|
||||
List<Recipient> resolved = Stream.of(ids)
|
||||
.map(Recipient::resolved)
|
||||
.toList();
|
||||
List<Recipient> resolved = Recipient.resolvedList(ids);
|
||||
|
||||
stopwatch.split("resolve");
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ import android.app.Dialog;
|
|||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcelable;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
@ -21,6 +20,8 @@ import org.thoughtcrime.securesms.recipients.RecipientId;
|
|||
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public class AddGroupDetailsActivity extends PassphraseRequiredActivity implements AddGroupDetailsFragment.Callback {
|
||||
|
@ -29,10 +30,10 @@ public class AddGroupDetailsActivity extends PassphraseRequiredActivity implemen
|
|||
|
||||
private final DynamicTheme theme = new DynamicNoActionBarTheme();
|
||||
|
||||
public static Intent newIntent(@NonNull Context context, @NonNull RecipientId[] recipients) {
|
||||
public static Intent newIntent(@NonNull Context context, @NonNull Collection<RecipientId> recipients) {
|
||||
Intent intent = new Intent(context, AddGroupDetailsActivity.class);
|
||||
|
||||
intent.putExtra(EXTRA_RECIPIENTS, recipients);
|
||||
intent.putParcelableArrayListExtra(EXTRA_RECIPIENTS, new ArrayList<>(recipients));
|
||||
|
||||
return intent;
|
||||
}
|
||||
|
@ -44,13 +45,9 @@ public class AddGroupDetailsActivity extends PassphraseRequiredActivity implemen
|
|||
setContentView(R.layout.add_group_details_activity);
|
||||
|
||||
if (bundle == null) {
|
||||
Parcelable[] parcelables = getIntent().getParcelableArrayExtra(EXTRA_RECIPIENTS);
|
||||
RecipientId[] ids = new RecipientId[parcelables.length];
|
||||
|
||||
System.arraycopy(parcelables, 0, ids, 0, parcelables.length);
|
||||
|
||||
AddGroupDetailsFragmentArgs arguments = new AddGroupDetailsFragmentArgs.Builder(ids).build();
|
||||
NavGraph graph = Navigation.findNavController(this, R.id.nav_host_fragment).getGraph();
|
||||
ArrayList<RecipientId> recipientIds = getIntent().getParcelableArrayListExtra(EXTRA_RECIPIENTS);
|
||||
AddGroupDetailsFragmentArgs arguments = new AddGroupDetailsFragmentArgs.Builder(recipientIds.toArray(new RecipientId[0])).build();
|
||||
NavGraph graph = Navigation.findNavController(this, R.id.nav_host_fragment).getGraph();
|
||||
|
||||
Navigation.findNavController(this, R.id.nav_host_fragment).setGraph(graph, arguments.toBundle());
|
||||
}
|
||||
|
|
|
@ -44,6 +44,7 @@ import org.thoughtcrime.securesms.util.BitmapUtil;
|
|||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
import org.thoughtcrime.securesms.util.text.AfterTextChanged;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
|
@ -170,7 +171,7 @@ public class AddGroupDetailsFragment extends LoggingFragment {
|
|||
private void initializeViewModel() {
|
||||
AddGroupDetailsFragmentArgs args = AddGroupDetailsFragmentArgs.fromBundle(requireArguments());
|
||||
AddGroupDetailsRepository repository = new AddGroupDetailsRepository(requireContext());
|
||||
AddGroupDetailsViewModel.Factory factory = new AddGroupDetailsViewModel.Factory(args.getRecipientIds(), repository);
|
||||
AddGroupDetailsViewModel.Factory factory = new AddGroupDetailsViewModel.Factory(Arrays.asList(args.getRecipientIds()), repository);
|
||||
|
||||
viewModel = ViewModelProviders.of(this, factory).get(AddGroupDetailsViewModel.class);
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@ import org.thoughtcrime.securesms.util.concurrent.SignalExecutors;
|
|||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
@ -30,9 +31,9 @@ final class AddGroupDetailsRepository {
|
|||
this.context = context;
|
||||
}
|
||||
|
||||
void resolveMembers(@NonNull RecipientId[] recipientIds, Consumer<List<GroupMemberEntry.NewGroupCandidate>> consumer) {
|
||||
void resolveMembers(@NonNull Collection<RecipientId> recipientIds, Consumer<List<GroupMemberEntry.NewGroupCandidate>> consumer) {
|
||||
SignalExecutors.BOUNDED.execute(() -> {
|
||||
List<GroupMemberEntry.NewGroupCandidate> members = new ArrayList<>(recipientIds.length);
|
||||
List<GroupMemberEntry.NewGroupCandidate> members = new ArrayList<>(recipientIds.size());
|
||||
|
||||
for (RecipientId id : recipientIds) {
|
||||
members.add(new GroupMemberEntry.NewGroupCandidate(Recipient.resolved(id)));
|
||||
|
|
|
@ -19,6 +19,7 @@ import org.thoughtcrime.securesms.util.DefaultValueLiveData;
|
|||
import org.thoughtcrime.securesms.util.SingleLiveEvent;
|
||||
import org.thoughtcrime.securesms.util.livedata.LiveDataUtil;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
@ -35,7 +36,7 @@ public final class AddGroupDetailsViewModel extends ViewModel {
|
|||
private final LiveData<Boolean> canSubmitForm;
|
||||
private final AddGroupDetailsRepository repository;
|
||||
|
||||
private AddGroupDetailsViewModel(@NonNull RecipientId[] recipientIds,
|
||||
private AddGroupDetailsViewModel(@NonNull Collection<RecipientId> recipientIds,
|
||||
@NonNull AddGroupDetailsRepository repository)
|
||||
{
|
||||
this.repository = repository;
|
||||
|
@ -44,7 +45,7 @@ public final class AddGroupDetailsViewModel extends ViewModel {
|
|||
|
||||
LiveData<Boolean> isValidName = Transformations.map(name, name -> !TextUtils.isEmpty(name));
|
||||
members = LiveDataUtil.combineLatest(initialMembers, deleted, AddGroupDetailsViewModel::filterDeletedMembers);
|
||||
isMms = Transformations.map(members, this::isAnyForcedSms);
|
||||
isMms = Transformations.map(members, AddGroupDetailsViewModel::isAnyForcedSms);
|
||||
canSubmitForm = LiveDataUtil.combineLatest(isMms, isValidName, (mms, validName) -> mms || validName);
|
||||
|
||||
repository.resolveMembers(recipientIds, initialMembers::postValue);
|
||||
|
@ -119,17 +120,17 @@ public final class AddGroupDetailsViewModel extends ViewModel {
|
|||
.toList();
|
||||
}
|
||||
|
||||
private boolean isAnyForcedSms(@NonNull List<GroupMemberEntry.NewGroupCandidate> members) {
|
||||
private static boolean isAnyForcedSms(@NonNull List<GroupMemberEntry.NewGroupCandidate> members) {
|
||||
return Stream.of(members)
|
||||
.anyMatch(member -> !member.getMember().isRegistered());
|
||||
}
|
||||
|
||||
static final class Factory implements ViewModelProvider.Factory {
|
||||
|
||||
private final RecipientId[] recipientIds;
|
||||
private final Collection<RecipientId> recipientIds;
|
||||
private final AddGroupDetailsRepository repository;
|
||||
|
||||
Factory(@NonNull RecipientId[] recipientIds, @NonNull AddGroupDetailsRepository repository) {
|
||||
Factory(@NonNull Collection<RecipientId> recipientIds, @NonNull AddGroupDetailsRepository repository) {
|
||||
this.recipientIds = recipientIds;
|
||||
this.repository = repository;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue