Skip to content
Snippets Groups Projects
Commit 88ac6591 authored by Pierre Nicolas's avatar Pierre Nicolas :joy:
Browse files

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
parent 6fa5f6e0
No related branches found
No related tags found
No related merge requests found
......@@ -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.
......
......@@ -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) {
......
......@@ -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,
) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment