From e3d4870d81bd54f2f2373cc5d969ad2c406ddf89 Mon Sep 17 00:00:00 2001 From: alansley Date: Tue, 20 Aug 2024 14:41:14 +1000 Subject: [PATCH] Addressed changes to fix SS-64 / QA-146 - unblocking contacts modal & toast adjustments --- .../conversation/v2/ConversationActivityV2.kt | 11 +-- .../preferences/BlockedContactsActivity.kt | 69 ++++++++++++++++++- .../layout/blocked_contacts_preference.xml | 2 +- 3 files changed, 75 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt index f64738b47a..45e0424d24 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt @@ -772,7 +772,12 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe val recipient = viewModel.recipient?.takeUnless { it.isGroupRecipient } ?: return binding.blockedBannerTextView.text = applicationContext.getString(R.string.blockBlockedDescription) binding.blockedBanner.isVisible = recipient.isBlocked - binding.blockedBanner.setOnClickListener { viewModel.unblock() } + binding.blockedBanner.setOnClickListener { + viewModel.unblock() + // Unblock confirmation toast added as per SS-64 + val txt = Phrase.from(applicationContext, R.string.blockUnblockedUser).put(NAME_KEY, recipient.name).format().toString() + Toast.makeText(applicationContext, txt, Toast.LENGTH_LONG).show() + } } private fun setUpOutdatedClientBanner() { @@ -1244,9 +1249,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe viewModel.unblock() // Unblock confirmation toast added as per SS-64 - val txt = Phrase.from(context, R.string.blockUnblockedUser) - .put(NAME_KEY, recipient.name). - format().toString() + val txt = Phrase.from(context, R.string.blockUnblockedUser).put(NAME_KEY, recipient.name).format().toString() Toast.makeText(context, txt, Toast.LENGTH_LONG).show() } cancelButton() diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/BlockedContactsActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/preferences/BlockedContactsActivity.kt index def9138ae3..85e35f443d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/BlockedContactsActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/BlockedContactsActivity.kt @@ -1,11 +1,19 @@ package org.thoughtcrime.securesms.preferences +import android.content.Context import android.os.Bundle +import android.os.Handler +import android.os.Looper +import android.widget.Toast import androidx.activity.viewModels import androidx.core.view.isVisible +import com.squareup.phrase.Phrase import dagger.hilt.android.AndroidEntryPoint import network.loki.messenger.R import network.loki.messenger.databinding.ActivityBlockedContactsBinding +import org.session.libsession.utilities.StringSubstitutionConstants.COUNT_KEY +import org.session.libsession.utilities.StringSubstitutionConstants.NAME_KEY +import org.session.libsignal.utilities.Log import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity import org.thoughtcrime.securesms.showSessionDialog @@ -18,11 +26,68 @@ class BlockedContactsActivity: PassphraseRequiredActionBarActivity() { val adapter: BlockedContactsAdapter by lazy { BlockedContactsAdapter(viewModel) } + // Method to show a sequence of toasts one after the other + fun showToastSequence(toastStrings: List, toastLengthSetting: Int,context: Context) { + val handler = Handler(Looper.getMainLooper()) + + val delayStepMilliseconds = when (toastLengthSetting) { + Toast.LENGTH_SHORT -> 2000L + Toast.LENGTH_LONG -> 3500L + else -> { + Log.w("BlockContactsActivity", "Invalid toast length setting - using Toast.LENGTH_SHORT") + 2000L + } + } + + var delayMilliseconds = 0L + toastStrings.forEach { message -> + handler.postDelayed( { Toast.makeText(context, message, Toast.LENGTH_SHORT).show() }, delayMilliseconds) + delayMilliseconds += delayStepMilliseconds // Increment delay by the duration of a Toast message + } + } + fun unblock() { showSessionDialog { title(viewModel.getTitle(this@BlockedContactsActivity)) - text(viewModel.getMessage(this@BlockedContactsActivity)) - button(R.string.theContinue) { viewModel.unblock() } + + + val contactsToUnblock = viewModel.state.selectedItems + + // Get the names of each person to unblock for later user in the toast(s) + // Note: We must do this before `viewModel.unblock` + //val contactsToUnblockNames = contactsToUnblock.map { it.name } + + val numContactsToUnblock = contactsToUnblock.size + val txt = when (numContactsToUnblock) { + // Note: We do not have to handle 0 because if no contacts are chosen then the unblock button is deactivated + 1 -> Phrase.from(context, R.string.blockUnblockName) + .put(NAME_KEY, contactsToUnblock.elementAt(0).name) + .format().toString() + 2 -> Phrase.from(context, R.string.blockUnblockNameTwo) + .put(NAME_KEY, contactsToUnblock.elementAt(0).name) + .format().toString() + else -> { + val othersCount = contactsToUnblock.size - 1 + Phrase.from(context, R.string.blockUnblockNameMultiple) + .put(NAME_KEY, contactsToUnblock.elementAt(0).name) + .put(COUNT_KEY, othersCount) + .format().toString() + } + } + + text(txt) + + button(R.string.theContinue) { + // Show individual toasts for each unblocked user (we don't have suitable strings to do it as a single toast) + val contactsToUnblockNames = contactsToUnblock.map { it.name } + val toastStrings = mutableListOf() + for (name in contactsToUnblockNames) { + toastStrings.add(Phrase.from(context, R.string.blockUnblockedUser).put(NAME_KEY, name).format().toString()) + } + showToastSequence(toastStrings, Toast.LENGTH_SHORT, this@BlockedContactsActivity) + + viewModel.unblock() + } cancelButton() } } diff --git a/app/src/main/res/layout/blocked_contacts_preference.xml b/app/src/main/res/layout/blocked_contacts_preference.xml index 2e5070d9db..7bc56ce2e9 100644 --- a/app/src/main/res/layout/blocked_contacts_preference.xml +++ b/app/src/main/res/layout/blocked_contacts_preference.xml @@ -1,7 +1,6 @@