Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
164 changes: 0 additions & 164 deletions app/src/main/java/org/thoughtcrime/securesms/BlockUnblockDialog.java

This file was deleted.

172 changes: 172 additions & 0 deletions app/src/main/java/org/thoughtcrime/securesms/BlockUnblockDialog.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
/*
* Copyright 2026 Signal Messenger, LLC
* SPDX-License-Identifier: AGPL-3.0-only
*/

package org.thoughtcrime.securesms

import android.content.Context
import androidx.annotation.WorkerThread
import androidx.appcompat.app.AlertDialog
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import org.thoughtcrime.securesms.database.SignalDatabase
import org.thoughtcrime.securesms.recipients.Recipient

/**
* This should be used whenever we want to prompt the user to block/unblock a recipient.
*/
object BlockUnblockDialog {

@JvmStatic
fun showReportSpamFor(
context: Context,
recipient: Recipient,
onReportSpam: Runnable,
onBlockAndReportSpam: Runnable?
) {
buildReportSpamFor(context, recipient, onReportSpam, onBlockAndReportSpam).show()
}

@JvmStatic
fun showBlockFor(
context: Context,
recipient: Recipient,
onBlock: Runnable
) {
buildBlockFor(context, recipient, onBlock, null).show()
}

@JvmStatic
fun showUnblockFor(
context: Context,
recipient: Recipient,
onUnblock: Runnable
) {
buildUnblockFor(context, recipient, onUnblock).show()
}

@JvmStatic
@WorkerThread
private fun buildBlockFor(
context: Context,
recipient: Recipient,
onBlock: Runnable,
onBlockAndReportSpam: Runnable?
): AlertDialog.Builder {
val resolvedRecipient = recipient.resolve()
val builder = MaterialAlertDialogBuilder(context)
val resources = context.resources

when {
resolvedRecipient.isGroup -> {
if (SignalDatabase.groups.isMember(resolvedRecipient.requireGroupId())) {
builder.setTitle(resources.getString(R.string.BlockUnblockDialog_block_and_leave_s, resolvedRecipient.getDisplayName(context)))
builder.setMessage(R.string.BlockUnblockDialog_you_will_no_longer_receive_messages_or_updates)
builder.setPositiveButton(R.string.BlockUnblockDialog_block_and_leave) { _, _ -> onBlock.run() }
builder.setNegativeButton(android.R.string.cancel, null)
} else {
builder.setTitle(resources.getString(R.string.BlockUnblockDialog_block_s, resolvedRecipient.getDisplayName(context)))
builder.setMessage(R.string.BlockUnblockDialog_group_members_wont_be_able_to_add_you)
builder.setPositiveButton(R.string.RecipientPreferenceActivity_block) { _, _ -> onBlock.run() }
builder.setNegativeButton(android.R.string.cancel, null)
}
}
resolvedRecipient.isReleaseNotes -> {
builder.setTitle(resources.getString(R.string.BlockUnblockDialog_block_s, resolvedRecipient.getDisplayName(context)))
builder.setMessage(R.string.BlockUnblockDialog_block_getting_signal_updates_and_news)
builder.setPositiveButton(R.string.BlockUnblockDialog_block) { _, _ -> onBlock.run() }
builder.setNegativeButton(android.R.string.cancel, null)
}
else -> {
builder.setTitle(resources.getString(R.string.BlockUnblockDialog_block_s, resolvedRecipient.getDisplayName(context)))
builder.setMessage(
if (resolvedRecipient.isRegistered) R.string.BlockUnblockDialog_blocked_people_wont_be_able_to_call_you_or_send_you_messages
else R.string.BlockUnblockDialog_blocked_people_wont_be_able_to_send_you_messages
)

if (onBlockAndReportSpam != null) {
builder.setNeutralButton(android.R.string.cancel, null)
builder.setNegativeButton(R.string.BlockUnblockDialog_report_spam_and_block) { _, _ -> onBlockAndReportSpam.run() }
builder.setPositiveButton(R.string.BlockUnblockDialog_block) { _, _ -> onBlock.run() }
} else {
builder.setPositiveButton(R.string.BlockUnblockDialog_block) { _, _ -> onBlock.run() }
builder.setNegativeButton(android.R.string.cancel, null)
}
}
}

return builder
}

@JvmStatic
@WorkerThread
private fun buildUnblockFor(
context: Context,
recipient: Recipient,
onUnblock: Runnable
): AlertDialog.Builder {
val resolvedRecipient = recipient.resolve()
val builder = MaterialAlertDialogBuilder(context)
val resources = context.resources

when {
resolvedRecipient.isGroup -> {
builder.setTitle(resources.getString(R.string.BlockUnblockDialog_unblock_s, resolvedRecipient.getDisplayName(context)))
builder.setMessage(R.string.BlockUnblockDialog_group_members_will_be_able_to_add_you)
builder.setPositiveButton(R.string.RecipientPreferenceActivity_unblock) { _, _ -> onUnblock.run() }
builder.setNegativeButton(android.R.string.cancel, null)
}
resolvedRecipient.isReleaseNotes -> {
builder.setTitle(resources.getString(R.string.BlockUnblockDialog_unblock_s, resolvedRecipient.getDisplayName(context)))
builder.setMessage(R.string.BlockUnblockDialog_resume_getting_signal_updates_and_news)
builder.setPositiveButton(R.string.RecipientPreferenceActivity_unblock) { _, _ -> onUnblock.run() }
builder.setNegativeButton(android.R.string.cancel, null)
}
else -> {
builder.setTitle(resources.getString(R.string.BlockUnblockDialog_unblock_s, resolvedRecipient.getDisplayName(context)))
builder.setMessage(
if (resolvedRecipient.isRegistered) R.string.BlockUnblockDialog_you_will_be_able_to_call_and_message_each_other
else R.string.BlockUnblockDialog_you_will_be_able_to_message_each_other
)
builder.setPositiveButton(R.string.RecipientPreferenceActivity_unblock) { _, _ -> onUnblock.run() }
builder.setNegativeButton(android.R.string.cancel, null)
}
}

return builder
}

@JvmStatic
@WorkerThread
private fun buildReportSpamFor(
context: Context,
recipient: Recipient,
onReportSpam: Runnable,
onBlockAndReportSpam: Runnable?
): AlertDialog.Builder {
val resolvedRecipient = recipient.resolve()
val builder = MaterialAlertDialogBuilder(context)
.setTitle(R.string.BlockUnblockDialog_report_spam_title)
.setPositiveButton(R.string.BlockUnblockDialog_report_spam) { _, _ -> onReportSpam.run() }

if (onBlockAndReportSpam != null) {
builder.setNeutralButton(android.R.string.cancel, null)
.setNegativeButton(R.string.BlockUnblockDialog_report_spam_and_block) { _, _ -> onBlockAndReportSpam.run() }
} else {
builder.setNegativeButton(android.R.string.cancel, null)
}

if (resolvedRecipient.isGroup) {
val adder = SignalDatabase.groups.getGroupInviter(resolvedRecipient.requireGroupId())
if (adder != null) {
builder.setMessage(context.getString(R.string.BlockUnblockDialog_report_spam_group_named_adder, adder.getDisplayName(context)))
} else {
builder.setMessage(R.string.BlockUnblockDialog_report_spam_group_unknown_adder)
}
} else {
builder.setMessage(R.string.BlockUnblockDialog_report_spam_description)
}

return builder
}
}
49 changes: 0 additions & 49 deletions app/src/main/java/org/thoughtcrime/securesms/KbsEnclave.java

This file was deleted.

Loading