mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-20 08:39:22 +01:00
Add pending and failed states for admin delete.
This commit is contained in:
committed by
Greyson Parrelli
parent
3af8b6050c
commit
74d9e3248b
@@ -183,7 +183,9 @@ public final class SafetyNumberChangeRepository {
|
||||
}
|
||||
}
|
||||
|
||||
if (messageRecord.isOutgoing()) {
|
||||
if (messageRecord.isFailedAdminDelete()) {
|
||||
processAdminDeletedMessageRecord(changedRecipients, messageRecord);
|
||||
} else if (messageRecord.isOutgoing()) {
|
||||
processOutgoingMessageRecord(changedRecipients, messageRecord);
|
||||
}
|
||||
|
||||
@@ -223,6 +225,24 @@ public final class SafetyNumberChangeRepository {
|
||||
}
|
||||
}
|
||||
|
||||
@WorkerThread
|
||||
private void processAdminDeletedMessageRecord(@NonNull List<ChangedRecipient> changedRecipients, @NonNull MessageRecord messageRecord) {
|
||||
Log.d(TAG, "processAdminDeletedMessageRecord");
|
||||
Set<RecipientId> resendIds = new HashSet<>();
|
||||
|
||||
for (ChangedRecipient changedRecipient : changedRecipients) {
|
||||
RecipientId id = changedRecipient.getRecipient().getId();
|
||||
IdentityKey identityKey = changedRecipient.getIdentityRecord().getIdentityKey();
|
||||
|
||||
SignalDatabase.messages().removeMismatchedIdentity(messageRecord.getId(), id, identityKey);
|
||||
resendIds.add(id);
|
||||
}
|
||||
|
||||
if (Util.hasItems(resendIds) ) {
|
||||
MessageSender.resendAdminDelete(messageRecord, resendIds.stream().collect(Collectors.toList()));
|
||||
}
|
||||
}
|
||||
|
||||
static final class SafetyNumberChangeState {
|
||||
|
||||
private final List<ChangedRecipient> changedRecipients;
|
||||
|
||||
@@ -94,6 +94,25 @@ object ConversationDialogs {
|
||||
.show()
|
||||
}
|
||||
|
||||
fun displayDeletionFailedDialog(context: Context, messageRecord: MessageRecord, canRetry: Boolean) {
|
||||
if (canRetry) {
|
||||
MaterialAlertDialogBuilder(context)
|
||||
.setMessage(R.string.conversation_activity__message_failed_to_delete_retry)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.setPositiveButton(R.string.conversation_activity__send) { _, _ ->
|
||||
SignalExecutors.BOUNDED.execute {
|
||||
MessageSender.resendAdminDelete(messageRecord, messageRecord.networkFailures.map { it.recipientId })
|
||||
}
|
||||
}
|
||||
.show()
|
||||
} else {
|
||||
MaterialAlertDialogBuilder(context)
|
||||
.setMessage(R.string.conversation_activity__message_failed_to_delete)
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.show()
|
||||
}
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun displayDeleteDialog(context: Context, recipient: Recipient, onDelete: () -> Unit) {
|
||||
MaterialAlertDialogBuilder(context)
|
||||
|
||||
@@ -3344,9 +3344,18 @@ class ConversationFragment :
|
||||
|
||||
override fun onMessageWithErrorClicked(messageRecord: MessageRecord) {
|
||||
val recipientId = viewModel.recipientSnapshot?.id ?: return
|
||||
if (messageRecord.isIdentityMismatchFailure) {
|
||||
if (messageRecord.isFailedAdminDelete) {
|
||||
val canRetry = MessageConstraintsUtil.isValidAdminDeleteSend(message = messageRecord, currentTime = System.currentTimeMillis(), isAdmin = conversationGroupViewModel.isAdmin(), isResend = true)
|
||||
if (messageRecord.isIdentityMismatchFailure && canRetry) {
|
||||
SafetyNumberBottomSheet
|
||||
.forIncomingMessageRecord(messageRecord, viewModel.recipientSnapshot!!)
|
||||
.show(childFragmentManager)
|
||||
} else {
|
||||
ConversationDialogs.displayDeletionFailedDialog(requireContext(), messageRecord, canRetry)
|
||||
}
|
||||
} else if (messageRecord.isIdentityMismatchFailure) {
|
||||
SafetyNumberBottomSheet
|
||||
.forMessageRecord(requireContext(), messageRecord)
|
||||
.forOutgoingMessageRecord(requireContext(), messageRecord)
|
||||
.show(childFragmentManager)
|
||||
} else if (messageRecord.hasFailedWithNetworkFailures()) {
|
||||
ConversationDialogs.displayMessageCouldNotBeSentDialog(requireContext(), messageRecord)
|
||||
|
||||
Reference in New Issue
Block a user