diff --git a/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactNumberOrAddressViewModel.kt b/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactNumberOrAddressViewModel.kt index e81255a06..5bbc92baa 100644 --- a/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactNumberOrAddressViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactNumberOrAddressViewModel.kt @@ -23,7 +23,7 @@ import androidx.lifecycle.ViewModel import org.linphone.core.Address class ContactNumberOrAddressViewModel( - val address: Address, + val address: Address?, val hasPresence: Boolean, val displayedValue: String, val isSip: Boolean = true, @@ -33,10 +33,12 @@ class ContactNumberOrAddressViewModel( val showInvite = !hasPresence && !isSip fun startCall() { + address ?: return listener.onCall(address) } fun startChat(secured: Boolean) { + address ?: return listener.onChat(address, secured) } diff --git a/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactViewModel.kt b/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactViewModel.kt index 395ae1a06..bb9d7ba76 100644 --- a/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/contact/viewmodels/ContactViewModel.kt @@ -176,7 +176,7 @@ class ContactViewModel(private val c: Contact) : ErrorReportingViewModel(), Cont val presenceModel = c.friend?.getPresenceModelForUriOrTel(number) val hasPresence = presenceModel != null && presenceModel.basicStatus == PresenceBasicStatus.Open val contactAddress = presenceModel?.contact ?: number - val address = coreContext.core.interpretUrl(contactAddress) ?: continue + val address = coreContext.core.interpretUrl(contactAddress) val isMe = coreContext.core.defaultProxyConfig?.identityAddress?.weakEqual(address) ?: false val secureChatAllowed = !isMe && c.friend?.getPresenceModelForUriOrTel(number)?.hasCapability(FriendCapability.LimeX3Dh) ?: false val noa = ContactNumberOrAddressViewModel(address, hasPresence, number, isSip = false, showSecureChat = secureChatAllowed, listener = listener) diff --git a/app/src/main/java/org/linphone/contact/Contact.kt b/app/src/main/java/org/linphone/contact/Contact.kt index 84a5d896b..93feb9356 100644 --- a/app/src/main/java/org/linphone/contact/Contact.kt +++ b/app/src/main/java/org/linphone/contact/Contact.kt @@ -24,6 +24,7 @@ import android.graphics.Bitmap import android.net.Uri import androidx.core.app.Person import androidx.core.graphics.drawable.IconCompat +import java.text.Collator import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R import org.linphone.core.Address @@ -76,7 +77,9 @@ open class Contact : Comparable { val otherOrg = other.organization ?: "" return org.compareTo(otherOrg) } - return fn.compareTo(otherFn) + val collator = Collator.getInstance() + collator.strength = Collator.NO_DECOMPOSITION + return collator.compare(fn, otherFn) } @Synchronized diff --git a/app/src/main/java/org/linphone/contact/NativeContact.kt b/app/src/main/java/org/linphone/contact/NativeContact.kt index 37e15e72c..2610fa140 100644 --- a/app/src/main/java/org/linphone/contact/NativeContact.kt +++ b/app/src/main/java/org/linphone/contact/NativeContact.kt @@ -110,7 +110,7 @@ class NativeContact(val nativeId: String, private val lookupKey: String? = null) Log.d("[Native Contact] Found phone number $data1 ($data4)") val number = data4 ?: data1 - if (number != null && !phoneNumbers.contains(number)) phoneNumbers.add(number) + if (number != null && number.isNotEmpty() && !phoneNumbers.contains(number)) phoneNumbers.add(number) } linphoneMime, ContactsContract.CommonDataKinds.SipAddress.CONTENT_ITEM_TYPE -> { if (data1 == null) { diff --git a/app/src/main/java/org/linphone/contact/NativeContactEditor.kt b/app/src/main/java/org/linphone/contact/NativeContactEditor.kt index 059b62476..8d5d3d922 100644 --- a/app/src/main/java/org/linphone/contact/NativeContactEditor.kt +++ b/app/src/main/java/org/linphone/contact/NativeContactEditor.kt @@ -130,7 +130,7 @@ class NativeContactEditor( fun setOrganization(value: String): NativeContactEditor { val previousValue = contact.organization if (value == previousValue) { - Log.w("[Native Contact Editor] Organization hasn't changed") + Log.d("[Native Contact Editor] Organization hasn't changed") return this } @@ -170,8 +170,11 @@ class NativeContactEditor( when { phoneNumber.currentValue.isEmpty() -> { // New phone number to add - addCount++ - addPhoneNumber(phoneNumber.newValue.value.orEmpty()) + val number = phoneNumber.newValue.value.orEmpty() + if (number.isNotEmpty()) { + addCount++ + addPhoneNumber(number) + } } phoneNumber.toRemove.value == true -> { // Existing number to remove @@ -180,8 +183,11 @@ class NativeContactEditor( } phoneNumber.currentValue != phoneNumber.newValue.value -> { // Existing number to update - editCount++ - updatePhoneNumber(phoneNumber.currentValue, phoneNumber.newValue.value.orEmpty()) + val number = phoneNumber.newValue.value.orEmpty() + if (number.isNotEmpty()) { + editCount++ + updatePhoneNumber(phoneNumber.currentValue, number) + } } } } @@ -199,9 +205,11 @@ class NativeContactEditor( when { sipAddress.currentValue.isEmpty() -> { // New address to add - addCount++ val address = sipAddress.newValue.value.orEmpty() - addSipAddress(address) + if (address.isNotEmpty()) { + addCount++ + addSipAddress(address) + } } sipAddress.toRemove.value == true -> { // Existing address to remove @@ -210,8 +218,11 @@ class NativeContactEditor( } sipAddress.currentValue != sipAddress.newValue.value -> { // Existing address to update - editCount++ - updateLinphoneOrSipAddress(sipAddress.currentValue, sipAddress.newValue.value.orEmpty()) + val address = sipAddress.newValue.value.orEmpty() + if (address.isNotEmpty()) { + editCount++ + updateLinphoneOrSipAddress(sipAddress.currentValue, address) + } } } } diff --git a/app/src/main/res/drawable/round_orange_button_background.xml b/app/src/main/res/drawable/round_orange_button_background.xml index 941c2bcb9..5c7e546c9 100644 --- a/app/src/main/res/drawable/round_orange_button_background.xml +++ b/app/src/main/res/drawable/round_orange_button_background.xml @@ -2,6 +2,8 @@ + diff --git a/app/src/main/res/drawable/round_orange_button_background_disabled.xml b/app/src/main/res/drawable/round_orange_button_background_disabled.xml new file mode 100644 index 000000000..0ec6324be --- /dev/null +++ b/app/src/main/res/drawable/round_orange_button_background_disabled.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/layout/contact_detail_cell.xml b/app/src/main/res/layout/contact_detail_cell.xml index 788c8cd73..df7de486d 100644 --- a/app/src/main/res/layout/contact_detail_cell.xml +++ b/app/src/main/res/layout/contact_detail_cell.xml @@ -80,6 +80,7 @@