From dd34cca9491e5dea55acd3cce78142ba8e4abcf1 Mon Sep 17 00:00:00 2001
From: Pierre Nicolas <pierre.nicolas@savoirfairelinux.com>
Date: Mon, 26 Aug 2024 10:36:34 -0400
Subject: [PATCH] presence: fix presence always showing green

Fix regression from this commit https://git.jami.net/savoirfairelinux/jami-client-android/-/commit/edb277437911509a8c917c088283b878099942f6
- `contacts` is misleading and actually refers to `members`.
- `ObserveContact` (which should be more accurately named `ObserveMember`) now returns a list of conversation members, including the user.

This commit introduces logic to filter out the user when processing presence information.

GitLab: #1756
Change-Id: Ib40ab946f8284d693fe7ab69942b09f9942c1173
---
 .../kotlin/net/jami/smartlist/ConversationItemViewModel.kt   | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/jami-android/libjamiclient/src/main/kotlin/net/jami/smartlist/ConversationItemViewModel.kt b/jami-android/libjamiclient/src/main/kotlin/net/jami/smartlist/ConversationItemViewModel.kt
index 04ab85ecf..699e45770 100644
--- a/jami-android/libjamiclient/src/main/kotlin/net/jami/smartlist/ConversationItemViewModel.kt
+++ b/jami-android/libjamiclient/src/main/kotlin/net/jami/smartlist/ConversationItemViewModel.kt
@@ -31,10 +31,15 @@ class ConversationItemViewModel(
     val mode: Conversation.Mode = conversation.mode.blockingFirst()
     val uuid: String = uri.rawUriString
     val title: String = getTitle(conversation, conversationProfile, contacts)
+    // Presence of conversation is:
+    // - CONNECTED if at least one contact is connected
+    // - AVAILABLE if no contact is connected but at least one contact is available
+    // - OFFLINE otherwise
     val presenceStatus: Contact.PresenceStatus = if (showPresence)
         contacts.let {
             var status = Contact.PresenceStatus.OFFLINE
             for (contact in it) {
+                if (contact.contact.isUser) continue // Do not show presence for self
                 if (contact.presence == Contact.PresenceStatus.CONNECTED)
                     return@let Contact.PresenceStatus.CONNECTED
                 else if (contact.presence == Contact.PresenceStatus.AVAILABLE)
-- 
GitLab