diff --git a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactFragment.kt index 109820f05..602788a26 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactFragment.kt @@ -22,7 +22,10 @@ package org.linphone.ui.main.contacts.fragment import android.content.ClipData import android.content.ClipboardManager import android.content.Context +import android.content.Intent +import android.net.Uri import android.os.Bundle +import android.provider.ContactsContract import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -120,6 +123,22 @@ class ContactFragment : GenericFragment() { dialog.show() } } + + viewModel.openNativeContactEditor.observe(viewLifecycleOwner) { + it.consume { uri -> + val editIntent = Intent(Intent.ACTION_EDIT).apply { + setDataAndType(Uri.parse(uri), ContactsContract.Contacts.CONTENT_ITEM_TYPE) + putExtra("finishActivityOnSaveCompleted", true) + } + startActivity(editIntent) + } + } + + viewModel.openLinphoneContactEditor.observe(viewLifecycleOwner) { + it.consume { + // TODO + } + } } private fun copyNumberOrAddressToClipboard(value: String, isSip: Boolean) { diff --git a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt index 0e25225d0..e02118950 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactViewModel.kt @@ -56,6 +56,14 @@ class ContactViewModel : ViewModel() { MutableLiveData>() } + val openNativeContactEditor: MutableLiveData> by lazy { + MutableLiveData>() + } + + val openLinphoneContactEditor: MutableLiveData> by lazy { + MutableLiveData>() + } + val listener = object : ContactNumberOrAddressClickListener { override fun onClicked(address: Address?) { // UI thread @@ -130,14 +138,27 @@ class ContactViewModel : ViewModel() { } fun toggleNumbersAndAddressesVisibility() { + // UI thread showNumbersAndAddresses.value = showNumbersAndAddresses.value == false } fun toggleDevicesTrustVisibility() { + // UI thread showDevicesTrust.value = showDevicesTrust.value == false } + fun editContact() { + // UI thread + val uri = contact.value?.friend?.nativeUri + if (uri != null) { + openNativeContactEditor.value = Event(uri) + } else { + openLinphoneContactEditor.value = Event(contact.value?.id.orEmpty()) + } + } + fun startAudioCall() { + // UI thread val numbersAndAddresses = sipAddressesAndPhoneNumbers.value.orEmpty() if (numbersAndAddresses.size == 1) { val address = numbersAndAddresses.first().address @@ -154,6 +175,7 @@ class ContactViewModel : ViewModel() { } fun startVideoCall() { + // UI thread val numbersAndAddresses = sipAddressesAndPhoneNumbers.value.orEmpty() if (numbersAndAddresses.size == 1) { val address = numbersAndAddresses.first().address @@ -170,6 +192,7 @@ class ContactViewModel : ViewModel() { } fun sendMessage() { + // UI thread if (sipAddressesAndPhoneNumbers.value.orEmpty().size == 1) { // TODO } else { diff --git a/app/src/main/res/layout/contact_fragment.xml b/app/src/main/res/layout/contact_fragment.xml index 353751d44..574b9663d 100644 --- a/app/src/main/res/layout/contact_fragment.xml +++ b/app/src/main/res/layout/contact_fragment.xml @@ -35,6 +35,7 @@ app:layout_constraintBottom_toBottomOf="@id/edit"/>