From 8d74b8f1333603fa0bcf808134e6646533305618 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 16 Aug 2023 14:11:30 +0200 Subject: [PATCH] Added copy to clipboard in call history list --- .../main/calls/fragment/CallsListFragment.kt | 25 +++++++++++++++++-- .../fragment/CallsListMenuDialogFragment.kt | 21 +++++++++++++--- .../ContactsListMenuDialogFragment.kt | 21 ++++++++++++++++ .../res/layout-land/calls_list_fragment.xml | 13 ++++++++++ .../main/res/layout/calls_list_fragment.xml | 13 ++++++++++ 5 files changed, 88 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListFragment.kt b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListFragment.kt index 6e360c924..77e9707df 100644 --- a/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListFragment.kt @@ -19,12 +19,16 @@ */ package org.linphone.ui.main.calls.fragment +import android.content.ClipData +import android.content.ClipboardManager +import android.content.Context import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.animation.Animation import android.view.animation.AnimationUtils +import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import androidx.navigation.navGraphViewModels import androidx.recyclerview.widget.LinearLayoutManager @@ -35,6 +39,7 @@ import org.linphone.ui.main.calls.adapter.CallsListAdapter import org.linphone.ui.main.calls.viewmodel.CallsListViewModel import org.linphone.ui.main.fragment.GenericFragment import org.linphone.utils.Event +import org.linphone.utils.slideInToastFromTopForDuration class CallsListFragment : GenericFragment() { @@ -76,9 +81,13 @@ class CallsListFragment : GenericFragment() { adapter.callLogLongClickedEvent.observe(viewLifecycleOwner) { it.consume { model -> - val modalBottomSheet = CallsListMenuDialogFragment(model.callLog) { + val modalBottomSheet = CallsListMenuDialogFragment({ + // onDismiss adapter.resetSelection() - } + }, { + // onCopyNumberOrAddressToClipboard + copyNumberOrAddressToClipboard(model.displayedAddress) + }) modalBottomSheet.show(parentFragmentManager, CallsListMenuDialogFragment.TAG) } } @@ -111,4 +120,16 @@ class CallsListFragment : GenericFragment() { } } } + + private fun copyNumberOrAddressToClipboard(value: String) { + val clipboard = requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + val label = "SIP address" + clipboard.setPrimaryClip(ClipData.newPlainText(label, value)) + + binding.greenToast.message = "Numéro copié dans le presse-papier" + binding.greenToast.icon = R.drawable.check + + val target = binding.greenToast.root + target.slideInToastFromTopForDuration(binding.root as ViewGroup, lifecycleScope) + } } diff --git a/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListMenuDialogFragment.kt b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListMenuDialogFragment.kt index 6614e2173..cd0ebafc3 100644 --- a/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListMenuDialogFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallsListMenuDialogFragment.kt @@ -25,12 +25,11 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import com.google.android.material.bottomsheet.BottomSheetDialogFragment -import org.linphone.core.CallLog import org.linphone.databinding.CallsListLongPressMenuBinding class CallsListMenuDialogFragment( - private val calLog: CallLog, - private val onDismiss: (() -> Unit)? = null + private val onDismiss: (() -> Unit)? = null, + private val onCopyNumberOrAddressToClipboard: (() -> Unit)? = null ) : BottomSheetDialogFragment() { companion object { const val TAG = "CallsListMenuDialogFragment" @@ -52,6 +51,22 @@ class CallsListMenuDialogFragment( savedInstanceState: Bundle? ): View { val view = CallsListLongPressMenuBinding.inflate(layoutInflater) + + view.setCopyNumberClickListener { + onCopyNumberOrAddressToClipboard?.invoke() + dismiss() + } + + view.setDeleteClickListener { + // TODO + dismiss() + } + + view.setNewContactClickListener { + // TODO + dismiss() + } + return view.root } } diff --git a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListMenuDialogFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListMenuDialogFragment.kt index 525234e7d..368356314 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListMenuDialogFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListMenuDialogFragment.kt @@ -52,6 +52,27 @@ class ContactsListMenuDialogFragment( savedInstanceState: Bundle? ): View { val view = ContactsListLongPressMenuBinding.inflate(layoutInflater) + + view.setFavoriteClickListener { + // TODO + dismiss() + } + + view.setShareClickListener { + // TODO + dismiss() + } + + view.setInviteClickListener { + // TODO + dismiss() + } + + view.setDeleteClickListener { + // TODO + dismiss() + } + return view.root } } diff --git a/app/src/main/res/layout-land/calls_list_fragment.xml b/app/src/main/res/layout-land/calls_list_fragment.xml index c066cd384..637cadbd7 100644 --- a/app/src/main/res/layout-land/calls_list_fragment.xml +++ b/app/src/main/res/layout-land/calls_list_fragment.xml @@ -52,6 +52,19 @@ app:layout_constraintTop_toBottomOf="@id/top_bar" app:layout_constraintBottom_toBottomOf="parent" /> + + + +