diff --git a/app/src/main/java/org/linphone/ui/main/calls/fragment/CallFragment.kt b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallFragment.kt
index 0c65e7638..f2c601a70 100644
--- a/app/src/main/java/org/linphone/ui/main/calls/fragment/CallFragment.kt
+++ b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallFragment.kt
@@ -19,18 +19,28 @@
*/
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.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.PopupWindow
import androidx.core.view.doOnPreDraw
+import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
+import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.navArgs
+import org.linphone.R
import org.linphone.core.tools.Log
import org.linphone.databinding.CallFragmentBinding
+import org.linphone.databinding.CallPopupMenuBinding
import org.linphone.ui.main.calls.viewmodel.CallLogViewModel
import org.linphone.ui.main.fragment.GenericFragment
import org.linphone.utils.Event
+import org.linphone.utils.slideInToastFromTopForDuration
class CallFragment : GenericFragment() {
private lateinit var binding: CallFragmentBinding
@@ -70,6 +80,10 @@ class CallFragment : GenericFragment() {
goBack()
}
+ binding.setMenuClickListener {
+ showPopupMenu()
+ }
+
sharedViewModel.isSlidingPaneSlideable.observe(viewLifecycleOwner) { slideable ->
viewModel.showBackButton.value = slideable
}
@@ -81,4 +95,44 @@ class CallFragment : GenericFragment() {
sharedViewModel.openSlidingPaneEvent.value = Event(true)
}
}
+
+ 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)
+ }
+
+ private fun showPopupMenu() {
+ val popupView: CallPopupMenuBinding = DataBindingUtil.inflate(
+ LayoutInflater.from(requireContext()),
+ R.layout.call_popup_menu,
+ null,
+ false
+ )
+
+ popupView.setDeleteAllHistoryClickListener {
+ viewModel.deleteHistory()
+ }
+
+ popupView.setCopyNumberClickListener {
+ copyNumberOrAddressToClipboard(viewModel.callLogModel.value?.displayedAddress.orEmpty())
+ }
+
+ val popupWindow = PopupWindow(
+ popupView.root,
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ true
+ )
+
+ // Elevation is for showing a shadow around the popup
+ popupWindow.elevation = 20f
+ popupWindow.showAsDropDown(binding.menu, 0, 0, Gravity.BOTTOM)
+ }
}
diff --git a/app/src/main/java/org/linphone/ui/main/calls/viewmodel/CallLogViewModel.kt b/app/src/main/java/org/linphone/ui/main/calls/viewmodel/CallLogViewModel.kt
index c9a22512e..43218d27a 100644
--- a/app/src/main/java/org/linphone/ui/main/calls/viewmodel/CallLogViewModel.kt
+++ b/app/src/main/java/org/linphone/ui/main/calls/viewmodel/CallLogViewModel.kt
@@ -43,7 +43,13 @@ class CallLogViewModel : ViewModel() {
}
}
+ fun deleteHistory() {
+ // UI thread
+ // TODO
+ }
+
fun startAudioCall() {
+ // UI thread
coreContext.postOnCoreThread { core ->
val params = core.createCallParams(null)
params?.isVideoEnabled = false
@@ -52,6 +58,7 @@ class CallLogViewModel : ViewModel() {
}
fun startVideoCall() {
+ // UI thread
coreContext.postOnCoreThread { core ->
val params = core.createCallParams(null)
params?.isVideoEnabled = true
@@ -60,6 +67,7 @@ class CallLogViewModel : ViewModel() {
}
fun sendMessage() {
+ // UI thread
// TODO
}
}
diff --git a/app/src/main/res/drawable/contact.xml b/app/src/main/res/drawable/contact.xml
new file mode 100644
index 000000000..12982c3a3
--- /dev/null
+++ b/app/src/main/res/drawable/contact.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/account_popup_menu.xml b/app/src/main/res/layout/account_popup_menu.xml
index cc8b60634..21fd84a95 100644
--- a/app/src/main/res/layout/account_popup_menu.xml
+++ b/app/src/main/res/layout/account_popup_menu.xml
@@ -27,6 +27,7 @@
android:textColor="@color/gray_1"
android:drawableStart="@drawable/manage_profile"
android:drawablePadding="5dp"
+ app:drawableTint="@color/gray_8"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
diff --git a/app/src/main/res/layout/call_fragment.xml b/app/src/main/res/layout/call_fragment.xml
index c030994c2..329bc0435 100644
--- a/app/src/main/res/layout/call_fragment.xml
+++ b/app/src/main/res/layout/call_fragment.xml
@@ -9,6 +9,9 @@
+
@@ -35,6 +38,7 @@
app:layout_constraintBottom_toBottomOf="@id/menu"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file