From 88ac65916ee497edd00180ed29bbd76824f7bb47 Mon Sep 17 00:00:00 2001 From: Pierre Nicolas <pierre.nicolas@savoirfairelinux.com> Date: Tue, 1 Oct 2024 15:34:17 -0400 Subject: [PATCH] details: connect delete contact (one:one) Show `delete contact` option for one to one conversation. Connect the button to logic. GitLab: #1723 Change-Id: Id38f77d086116ec405690d53e3ca418ebb2e63e2 --- .../fragments/ConversationActionsFragment.kt | 26 +++++++++++++++---- .../cx/ring/fragments/ConversationFragment.kt | 12 +++++++-- .../main/java/cx/ring/utils/ActionHelper.kt | 13 ++++++++++ 3 files changed, 44 insertions(+), 7 deletions(-) diff --git a/jami-android/app/src/main/java/cx/ring/fragments/ConversationActionsFragment.kt b/jami-android/app/src/main/java/cx/ring/fragments/ConversationActionsFragment.kt index a30295c0f..111360e4a 100644 --- a/jami-android/app/src/main/java/cx/ring/fragments/ConversationActionsFragment.kt +++ b/jami-android/app/src/main/java/cx/ring/fragments/ConversationActionsFragment.kt @@ -16,6 +16,7 @@ */ package cx.ring.fragments +import android.app.Activity import android.content.Intent import android.os.Bundle import android.view.* @@ -31,12 +32,14 @@ import cx.ring.databinding.DialogSwarmTitleBinding import cx.ring.databinding.FragConversationActionsBinding import cx.ring.services.SharedPreferencesServiceImpl.Companion.getConversationColor import cx.ring.services.SharedPreferencesServiceImpl.Companion.getConversationSymbol +import cx.ring.utils.ActionHelper import cx.ring.utils.ConversationPath import cx.ring.utils.DeviceUtils import cx.ring.utils.TextUtils.copyAndShow import dagger.hilt.android.AndroidEntryPoint import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.disposables.CompositeDisposable +import net.jami.model.Contact import net.jami.model.Conversation import net.jami.model.Uri import net.jami.qrcode.QRCodePresenter @@ -163,13 +166,14 @@ class ConversationActionsFragment : Fragment() { if (conversationMode == Conversation.Mode.OneToOne) { mDisposableBag.add( conversation.contactUpdates - .observeOn(DeviceUtils.uiScheduler) // Filter out the user. - .map { contacts -> contacts.filterNot { it.isUser }[0] } + .map { contacts -> contacts.filterNot { it.isUser } } + .filter(List<Contact>::isNotEmpty) + .map { it.first() } .flatMapSingle { contact -> contact.username?.map { username -> Pair(username, contact.uri) } ?: Single.just(Pair("", contact.uri)) - } + }.observeOn(DeviceUtils.uiScheduler) .subscribe { (registeredName, identifier) -> userNamePanel.isVisible = registeredName.isNotEmpty() userName.text = registeredName @@ -184,8 +188,20 @@ class ConversationActionsFragment : Fragment() { qrCode.setOnClickListener { showContactQRCode(identifier) } } ) - conversationDelete.text = resources.getString(R.string.leave_conversation) - conversationDelete.setOnClickListener { } + conversationDelete.text = resources.getString(R.string.delete_contact) + conversationDelete.setOnClickListener { + ActionHelper.launchDeleteSwarmOneToOneAction( + context = requireContext(), + accountId = mAccountService.currentAccount!!.accountId, + uri = conversation.uri, + callback = { accountId: String, conversationUri: Uri -> + mConversationFacade.removeConversation(accountId, conversationUri) + .subscribe().apply { mDisposableBag.add(this) } + // Result is OK, should be interpreted to go back to home. + requireActivity().setResult(Activity.RESULT_OK) + requireActivity().finish() + }) + } descriptionPanel.isVisible = false // Disable description edit for 1-to-1 conversation // Description being hidden, we put the rounded background on the secureP2pConnection. diff --git a/jami-android/app/src/main/java/cx/ring/fragments/ConversationFragment.kt b/jami-android/app/src/main/java/cx/ring/fragments/ConversationFragment.kt index 61940841f..33ba07476 100644 --- a/jami-android/app/src/main/java/cx/ring/fragments/ConversationFragment.kt +++ b/jami-android/app/src/main/java/cx/ring/fragments/ConversationFragment.kt @@ -42,6 +42,7 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.annotation.ColorInt import androidx.appcompat.widget.PopupMenu import androidx.appcompat.widget.SearchView +import androidx.core.app.ActivityOptionsCompat import androidx.core.view.* import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.LinearLayoutManager @@ -924,12 +925,19 @@ class ConversationFragment : BaseSupportFragment<ConversationPresenter, Conversa } } + private val conversationDetailsActivityLauncher = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + // Let's interpret result code to the fact that user was banned or blocked. + if (result.resultCode == Activity.RESULT_OK) goToHome() + } + override fun goToDetailsActivity(accountId: String, uri: net.jami.model.Uri) { val logo = binding!!.conversationAvatar + val options = ActivityOptionsCompat + .makeSceneTransitionAnimation(requireActivity(), logo, "conversationIcon") val intent = Intent(Intent.ACTION_VIEW, ConversationPath.toUri(accountId, uri)) .setClass(requireContext().applicationContext, ConversationDetailsActivity::class.java) - startActivity(intent, - ActivityOptions.makeSceneTransitionAnimation(activity, logo, "conversationIcon").toBundle()) + conversationDetailsActivityLauncher.launch(intent, options) } override fun goToCallActivity(conferenceId: String, withCamera: Boolean) { diff --git a/jami-android/app/src/main/java/cx/ring/utils/ActionHelper.kt b/jami-android/app/src/main/java/cx/ring/utils/ActionHelper.kt index 66adff8ac..3321ff330 100644 --- a/jami-android/app/src/main/java/cx/ring/utils/ActionHelper.kt +++ b/jami-android/app/src/main/java/cx/ring/utils/ActionHelper.kt @@ -103,6 +103,19 @@ object ActionHelper { .show() } + fun launchDeleteSwarmOneToOneAction( + context: Context, + accountId: String, + uri: Uri, + callback: (accountId: String, uri: Uri) -> Unit, + ) { + MaterialAlertDialogBuilder(context) + .setTitle(R.string.conversation_action_remove_this_title) + .setMessage(R.string.conversation_action_remove_this_message) + .setPositiveButton(android.R.string.ok) { _, _ -> callback(accountId, uri) } + .setNegativeButton(android.R.string.cancel) { _, _ -> }.show() + } + fun launchDeleteSwarmGroupAction( context: Context, accountId: String, uri: Uri, callback: ConversationActionCallback, ) { -- GitLab