diff --git a/app/src/main/assets/assistant_linphone_default_values b/app/src/main/assets/assistant_linphone_default_values
index 7a72cd0c8..613e3109c 100644
--- a/app/src/main/assets/assistant_linphone_default_values
+++ b/app/src/main/assets/assistant_linphone_default_values
@@ -26,6 +26,10 @@
stun.linphone.org
stun,ice
+
diff --git a/app/src/main/assets/linphonerc_default b/app/src/main/assets/linphonerc_default
index a130e00e2..0905eca1d 100644
--- a/app/src/main/assets/linphonerc_default
+++ b/app/src/main/assets/linphonerc_default
@@ -34,7 +34,6 @@ log_collection_upload_server_url=https://www.linphone.org:444/lft.php
file_transfer_server_url=https://www.linphone.org:444/lft.php
version_check_url_root=https://www.linphone.org/releases
max_calls=10
-history_max_size=100
conference_layout=1
## End of default rc
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 69703d064..156547ee3 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
@@ -139,6 +139,7 @@ class CallFragment : GenericFragment() {
popupView.setAddToContactsListener {
// TODO: go to new contact fragment
+ sharedViewModel.sipAddressToAddToNewContact = viewModel.callLogModel.value?.displayedAddress.orEmpty()
sharedViewModel.navigateToContactsEvent.value = Event(true)
sharedViewModel.showNewContactEvent.value = Event(true)
popupWindow.dismiss()
diff --git a/app/src/main/java/org/linphone/ui/main/contacts/fragment/NewContactFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/NewContactFragment.kt
index 59afbadd5..69245e7e9 100644
--- a/app/src/main/java/org/linphone/ui/main/contacts/fragment/NewContactFragment.kt
+++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/NewContactFragment.kt
@@ -34,6 +34,7 @@ import androidx.navigation.fragment.findNavController
import androidx.navigation.navGraphViewModels
import kotlinx.coroutines.launch
import org.linphone.BR
+import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R
import org.linphone.core.tools.Log
import org.linphone.databinding.ContactNewOrEditFragmentBinding
@@ -98,6 +99,14 @@ class NewContactFragment : GenericFragment() {
viewModel.findFriendByRefKey("")
+ val addressToAdd = sharedViewModel.sipAddressToAddToNewContact
+ if (addressToAdd.isNotEmpty()) {
+ sharedViewModel.sipAddressToAddToNewContact = ""
+ coreContext.postOnCoreThread {
+ viewModel.addSipAddress(addressToAdd)
+ }
+ }
+
binding.setBackClickListener {
val model = ConfirmationDialogModel()
val dialog = DialogUtils.getCancelContactChangesConfirmationDialog(
diff --git a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactNewOrEditViewModel.kt b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactNewOrEditViewModel.kt
index c22eaef66..c91bc36be 100644
--- a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactNewOrEditViewModel.kt
+++ b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactNewOrEditViewModel.kt
@@ -21,6 +21,7 @@ package org.linphone.ui.main.contacts.viewmodel
import androidx.annotation.UiThread
import androidx.annotation.WorkerThread
+import androidx.lifecycle.MediatorLiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import org.linphone.LinphoneApplication.Companion.coreContext
@@ -54,6 +55,8 @@ class ContactNewOrEditViewModel @UiThread constructor() : ViewModel() {
val jobTitle = MutableLiveData()
+ val saveButtonEnabled = MediatorLiveData()
+
val saveChangesEvent: MutableLiveData> by lazy {
MutableLiveData>()
}
@@ -64,6 +67,16 @@ class ContactNewOrEditViewModel @UiThread constructor() : ViewModel() {
val removeNewNumberOrAddressFieldEvent = MutableLiveData>()
+ init {
+ saveButtonEnabled.value = isSaveButtonEnabled()
+ saveButtonEnabled.addSource(firstName) {
+ saveButtonEnabled.value = isSaveButtonEnabled()
+ }
+ saveButtonEnabled.addSource(lastName) {
+ saveButtonEnabled.value = isSaveButtonEnabled()
+ }
+ }
+
@UiThread
fun findFriendByRefKey(refKey: String?) {
coreContext.postOnCoreThread { core ->
@@ -179,7 +192,7 @@ class ContactNewOrEditViewModel @UiThread constructor() : ViewModel() {
}
@WorkerThread
- private fun addSipAddress(address: String = "", requestFieldToBeAddedInUi: Boolean = false) {
+ fun addSipAddress(address: String = "", requestFieldToBeAddedInUi: Boolean = false) {
val newModel = NewOrEditNumberOrAddressModel(address, true, {
if (address.isEmpty()) {
addSipAddress(requestFieldToBeAddedInUi = true)
@@ -219,4 +232,9 @@ class ContactNewOrEditViewModel @UiThread constructor() : ViewModel() {
}
removeNewNumberOrAddressFieldEvent.value = Event(model)
}
+
+ @UiThread
+ private fun isSaveButtonEnabled(): Boolean {
+ return firstName.value.orEmpty().isNotEmpty() || lastName.value.orEmpty().isNotEmpty()
+ }
}
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 a0bbe659a..2c2232f4d 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
@@ -37,6 +37,7 @@ import org.linphone.ui.main.contacts.model.ContactNumberOrAddressModel
import org.linphone.ui.main.model.isInSecureMode
import org.linphone.utils.Event
import org.linphone.utils.FileUtils
+import org.linphone.utils.PhoneNumberUtils
class ContactViewModel @UiThread constructor() : ViewModel() {
companion object {
@@ -165,13 +166,17 @@ class ContactViewModel @UiThread constructor() : ViewModel() {
// phone numbers are disabled is secure mode
val enablePhoneNumbers = core.defaultAccount?.isInSecureMode() != true
val address = core.interpretUrl(number.phoneNumber, true)
+ val label = PhoneNumberUtils.vcardParamStringToAddressBookLabel(
+ coreContext.context.resources,
+ number.label ?: ""
+ )
val data = ContactNumberOrAddressModel(
address,
number.phoneNumber,
enablePhoneNumbers,
listener,
false,
- label = number.label.orEmpty()
+ label
)
addressesAndNumbers.add(data)
}
diff --git a/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt b/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt
index 9384dd5df..0f1297adc 100644
--- a/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt
+++ b/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt
@@ -67,6 +67,8 @@ class SharedMainViewModel @UiThread constructor() : ViewModel() {
MutableLiveData>()
}
+ var sipAddressToAddToNewContact: String = ""
+
/* Call logs related */
val showCallLogEvent: MutableLiveData> by lazy {
diff --git a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt
index 90f76f375..8c8f59972 100644
--- a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt
+++ b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt
@@ -28,6 +28,7 @@ import android.view.ViewGroup
import android.view.Window
import android.view.inputmethod.InputMethodManager
import android.widget.ImageView
+import androidx.annotation.ColorInt
import androidx.annotation.UiThread
import androidx.appcompat.widget.AppCompatEditText
import androidx.appcompat.widget.AppCompatTextView
@@ -148,7 +149,7 @@ fun AppCompatTextView.setTypeface(typeface: Int) {
@UiThread
@BindingAdapter("android:drawableTint")
-fun AppCompatTextView.setDrawableTint(color: Int) {
+fun AppCompatTextView.setDrawableTint(@ColorInt color: Int) {
for (drawable in compoundDrawablesRelative) {
drawable?.setTint(color)
}
diff --git a/app/src/main/res/color/primary_color_selector.xml b/app/src/main/res/color/primary_color_selector.xml
new file mode 100644
index 000000000..4dadd96c4
--- /dev/null
+++ b/app/src/main/res/color/primary_color_selector.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/contact_new_or_edit_fragment.xml b/app/src/main/res/layout/contact_new_or_edit_fragment.xml
index 35a60926c..d419e4b62 100644
--- a/app/src/main/res/layout/contact_new_or_edit_fragment.xml
+++ b/app/src/main/res/layout/contact_new_or_edit_fragment.xml
@@ -58,7 +58,8 @@
android:layout_marginEnd="10dp"
android:padding="5dp"
android:src="@drawable/check"
- app:tint="@color/primary_color"
+ android:enabled="@{viewModel.saveButtonEnabled}"
+ app:tint="@color/primary_color_selector"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="@id/title"
app:layout_constraintTop_toTopOf="@id/title" />