mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-02 08:23:00 +01:00
Fix crash after inviting group members.
This commit is contained in:
@@ -1044,7 +1044,9 @@ class ConversationSettingsFragment :
|
||||
}
|
||||
|
||||
private fun showGroupInvitesSentDialog(showGroupInvitesSentDialog: ConversationSettingsEvent.ShowGroupInvitesSentDialog) {
|
||||
GroupInviteSentDialog.showInvitesSent(requireContext(), viewLifecycleOwner, showGroupInvitesSentDialog.invitesSentTo)
|
||||
if (showGroupInvitesSentDialog.invitesSentTo.isNotEmpty()) {
|
||||
GroupInviteSentDialog.show(childFragmentManager, showGroupInvitesSentDialog.invitesSentTo)
|
||||
}
|
||||
}
|
||||
|
||||
private fun showMembersAdded(showMembersAdded: ConversationSettingsEvent.ShowMembersAdded) {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package org.thoughtcrime.securesms.groups.ui.creategroup.details;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
@@ -64,11 +63,15 @@ public class AddGroupDetailsActivity extends PassphraseRequiredActivity implemen
|
||||
long threadId,
|
||||
@NonNull List<Recipient> invitedMembers)
|
||||
{
|
||||
Dialog dialog = GroupInviteSentDialog.showInvitesSent(this, this, invitedMembers);
|
||||
if (dialog != null) {
|
||||
dialog.setOnDismissListener((d) -> goToConversation(recipientId, threadId));
|
||||
} else {
|
||||
if (invitedMembers.isEmpty()) {
|
||||
goToConversation(recipientId, threadId);
|
||||
} else {
|
||||
getSupportFragmentManager().setFragmentResultListener(
|
||||
GroupInviteSentDialog.RESULT_DISMISSED,
|
||||
this,
|
||||
(requestKey, result) -> goToConversation(recipientId, threadId)
|
||||
);
|
||||
GroupInviteSentDialog.show(getSupportFragmentManager(), invitedMembers);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package org.thoughtcrime.securesms.groups.ui.managegroup.dialogs;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.lifecycle.LifecycleOwner;
|
||||
import androidx.fragment.app.DialogFragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
|
||||
@@ -14,46 +15,74 @@ import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.groups.ui.GroupMemberEntry;
|
||||
import org.thoughtcrime.securesms.groups.ui.GroupMemberListView;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public final class GroupInviteSentDialog {
|
||||
public final class GroupInviteSentDialog extends DialogFragment {
|
||||
private static final String FRAGMENT_TAG = "GroupInviteSentDialog";
|
||||
public static final String RESULT_DISMISSED = "GroupInviteSentDialog.result_dismissed";
|
||||
|
||||
private GroupInviteSentDialog() {
|
||||
}
|
||||
private static final String ARG_RECIPIENT_IDS = "recipient_ids";
|
||||
|
||||
public static @Nullable Dialog showInvitesSent(@NonNull Context context, @NonNull LifecycleOwner lifecycleOwner, @NonNull List<Recipient> recipients) {
|
||||
int size = recipients.size();
|
||||
if (size == 0) {
|
||||
return null;
|
||||
|
||||
public static void show(@NonNull FragmentManager fragmentManager, @NonNull List<Recipient> recipients) {
|
||||
ArrayList<RecipientId> recipientIds = new ArrayList<>(recipients.size());
|
||||
for (Recipient recipient : recipients) {
|
||||
recipientIds.add(recipient.getId());
|
||||
}
|
||||
|
||||
AlertDialog.Builder builder = new MaterialAlertDialogBuilder(context)
|
||||
.setTitle(context.getResources().getQuantityString(R.plurals.GroupManagement_invitation_sent, size, size))
|
||||
.setPositiveButton(android.R.string.ok, null);
|
||||
if (size == 1) {
|
||||
builder.setMessage(context.getString(R.string.GroupManagement_invite_single_user, recipients.get(0).getDisplayName(context)));
|
||||
Bundle args = new Bundle();
|
||||
args.putParcelableArrayList(ARG_RECIPIENT_IDS, recipientIds);
|
||||
|
||||
GroupInviteSentDialog fragment = new GroupInviteSentDialog();
|
||||
fragment.setArguments(args);
|
||||
fragment.show(fragmentManager, FRAGMENT_TAG);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
|
||||
List<RecipientId> recipientIds = Objects.requireNonNull(requireArguments().getParcelableArrayList(ARG_RECIPIENT_IDS));
|
||||
|
||||
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireContext())
|
||||
.setTitle(getResources().getQuantityString(R.plurals.GroupManagement_invitation_sent, recipientIds.size(), recipientIds.size()))
|
||||
.setPositiveButton(android.R.string.ok, null);
|
||||
|
||||
if (recipientIds.size() == 1) {
|
||||
Recipient recipient = Recipient.live(recipientIds.get(0)).get();
|
||||
builder.setMessage(getString(R.string.GroupManagement_invite_single_user, recipient.getDisplayName(requireContext())));
|
||||
} else {
|
||||
builder.setMessage(R.string.GroupManagement_invite_multiple_users)
|
||||
.setView(R.layout.dialog_multiple_group_invites_sent);
|
||||
}
|
||||
|
||||
Dialog dialog = builder.show();
|
||||
if (size > 1) {
|
||||
GroupMemberListView invitees = dialog.findViewById(R.id.list_invitees);
|
||||
return builder.create();
|
||||
}
|
||||
|
||||
invitees.initializeAdapter(lifecycleOwner);
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
|
||||
List<GroupMemberEntry.PendingMember> pendingMembers = new ArrayList<>(recipients.size());
|
||||
for (Recipient r : recipients) {
|
||||
pendingMembers.add(new GroupMemberEntry.PendingMember(r));
|
||||
List<RecipientId> recipientIds = Objects.requireNonNull(requireArguments().getParcelableArrayList(ARG_RECIPIENT_IDS));
|
||||
|
||||
if (recipientIds.size() > 1) {
|
||||
GroupMemberListView invitees = requireDialog().findViewById(R.id.list_invitees);
|
||||
invitees.initializeAdapter(this);
|
||||
|
||||
List<GroupMemberEntry.PendingMember> pendingMembers = new ArrayList<>(recipientIds.size());
|
||||
for (RecipientId id : recipientIds) {
|
||||
pendingMembers.add(new GroupMemberEntry.PendingMember(Recipient.live(id).get()));
|
||||
}
|
||||
|
||||
//noinspection ConstantConditions
|
||||
invitees.setMembers(pendingMembers);
|
||||
}
|
||||
}
|
||||
|
||||
return dialog;
|
||||
@Override
|
||||
public void onDismiss(@NonNull DialogInterface dialog) {
|
||||
super.onDismiss(dialog);
|
||||
getParentFragmentManager().setFragmentResult(RESULT_DISMISSED, new Bundle());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,6 @@
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:maxHeight="100dp" />
|
||||
tools:listitem="@layout/group_recipient_list_item" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -4,7 +4,7 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?selectableItemBackground"
|
||||
android:foreground="?attr/selectableItemBackground"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:minHeight="64dp"
|
||||
|
||||
Reference in New Issue
Block a user