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 4489714ec..2748e395c 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 @@ -34,7 +34,7 @@ import org.linphone.activities.main.contact.data.ContactNumberOrAddressData import org.linphone.activities.main.viewmodels.MessageNotifierViewModel import org.linphone.contact.ContactDataInterface import org.linphone.contact.ContactsUpdatedListenerStub -import org.linphone.contact.hasPresence +import org.linphone.contact.hasLongTermPresence import org.linphone.core.* import org.linphone.core.tools.Log import org.linphone.utils.Event @@ -81,6 +81,8 @@ class ContactViewModel(friend: Friend, async: Boolean = false) : MessageNotifier val readOnlyNativeAddressBook = MutableLiveData() + val hasLongTermPresence = MutableLiveData() + private val chatRoomListener = object : ChatRoomListenerStub() { override fun onStateChanged(chatRoom: ChatRoom, state: ChatRoom.State) { if (state == ChatRoom.State.Created) { @@ -147,16 +149,19 @@ class ContactViewModel(friend: Friend, async: Boolean = false) : MessageNotifier isNativeContact.postValue(friend.refKey != null) presenceStatus.postValue(friend.consolidatedPresence) readOnlyNativeAddressBook.postValue(corePreferences.readOnlyNativeContacts) + hasLongTermPresence.postValue(friend.hasLongTermPresence()) } else { contact.value = friend displayName.value = friend.name isNativeContact.value = friend.refKey != null presenceStatus.value = friend.consolidatedPresence readOnlyNativeAddressBook.value = corePreferences.readOnlyNativeContacts + hasLongTermPresence.value = friend.hasLongTermPresence() } friend.addListener { presenceStatus.value = it.consolidatedPresence + hasLongTermPresence.value = it.hasLongTermPresence() } } @@ -269,8 +274,4 @@ class ContactViewModel(friend: Friend, async: Boolean = false) : MessageNotifier } numbersAndAddresses.postValue(list) } - - fun hasPresence(): Boolean { - return contact.value?.hasPresence() ?: false - } } diff --git a/app/src/main/java/org/linphone/contact/ContactsManager.kt b/app/src/main/java/org/linphone/contact/ContactsManager.kt index 623cc1be9..ec6be7aea 100644 --- a/app/src/main/java/org/linphone/contact/ContactsManager.kt +++ b/app/src/main/java/org/linphone/contact/ContactsManager.kt @@ -35,7 +35,6 @@ import androidx.core.app.Person import androidx.core.graphics.drawable.IconCompat import androidx.lifecycle.MutableLiveData import java.io.IOException -import kotlinx.coroutines.* import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.R @@ -378,7 +377,7 @@ fun Friend.getContactForPhoneNumberOrAddress(value: String): String? { return null } -fun Friend.hasPresence(): Boolean { +fun Friend.hasLongTermPresence(): Boolean { for (address in addresses) { val presenceModel = getPresenceModelForUriOrTel(address.asStringUriOnly()) if (presenceModel != null && presenceModel.basicStatus == PresenceBasicStatus.Open) return true diff --git a/app/src/main/res/layout/contact_list_cell.xml b/app/src/main/res/layout/contact_list_cell.xml index 302dc6586..731a4afa5 100644 --- a/app/src/main/res/layout/contact_list_cell.xml +++ b/app/src/main/res/layout/contact_list_cell.xml @@ -72,7 +72,7 @@ android:src="@drawable/linphone_logo_tinted" android:layout_marginRight="10dp" android:contentDescription="@string/content_description_linphone_user" - android:visibility="@{viewModel.hasPresence() ? View.VISIBLE : View.GONE}" /> + android:visibility="@{viewModel.hasLongTermPresence ? View.VISIBLE : View.GONE, default=gone}" />