diff --git a/app/src/main/java/org/linphone/activities/main/chat/viewmodels/ChatRoomViewModel.kt b/app/src/main/java/org/linphone/activities/main/chat/viewmodels/ChatRoomViewModel.kt
index 31d1e2d90..0c5794f6f 100644
--- a/app/src/main/java/org/linphone/activities/main/chat/viewmodels/ChatRoomViewModel.kt
+++ b/app/src/main/java/org/linphone/activities/main/chat/viewmodels/ChatRoomViewModel.kt
@@ -324,6 +324,9 @@ class ChatRoomViewModel(val chatRoom: ChatRoom) : ViewModel(), ContactDataInterf
if (friend.consolidatedPresence == ConsolidatedPresence.Online) {
lastPresenceInfo.value = AppUtils.getString(R.string.chat_room_presence_online)
return
+ } else if (friend.consolidatedPresence == ConsolidatedPresence.DoNotDisturb) {
+ lastPresenceInfo.value = AppUtils.getString(R.string.chat_room_presence_do_not_disturb)
+ return
}
val timestamp = friend.presenceModel?.timestamp ?: -1
diff --git a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt
index 288d2dfe3..de4dbc814 100644
--- a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt
+++ b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt
@@ -52,6 +52,7 @@ import org.linphone.activities.voip.views.ScrollDotsView
import org.linphone.contact.ContactAvatarGenerator
import org.linphone.contact.ContactDataInterface
import org.linphone.contact.getPictureUri
+import org.linphone.core.ConsolidatedPresence
import org.linphone.core.tools.Log
import org.linphone.views.VoiceRecordProgressBar
@@ -773,3 +774,21 @@ fun ScrollDotsView.setItems(count: Int) {
fun ScrollDotsView.setSelectedIndex(index: Int) {
setSelectedDot(index)
}
+
+@BindingAdapter("presenceIcon")
+fun ImageView.setPresenceIcon(presence: ConsolidatedPresence) {
+ val icon = when (presence) {
+ ConsolidatedPresence.Online -> R.drawable.led_online
+ ConsolidatedPresence.DoNotDisturb -> R.drawable.led_do_not_disturb
+ ConsolidatedPresence.Busy -> R.drawable.led_away
+ else -> R.drawable.led_not_registered
+ }
+ setImageResource(icon)
+
+ val contentDescription = when (presence) {
+ ConsolidatedPresence.Online -> AppUtils.getString(R.string.content_description_presence_online)
+ ConsolidatedPresence.DoNotDisturb -> AppUtils.getString(R.string.content_description_presence_do_not_disturb)
+ else -> AppUtils.getString(R.string.content_description_presence_offline)
+ }
+ setContentDescription(contentDescription)
+}
diff --git a/app/src/main/res/drawable/led_do_not_disturb.xml b/app/src/main/res/drawable/led_do_not_disturb.xml
new file mode 100644
index 000000000..e2ce8ac4b
--- /dev/null
+++ b/app/src/main/res/drawable/led_do_not_disturb.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/layout/chat_message_list_cell.xml b/app/src/main/res/layout/chat_message_list_cell.xml
index 34ca38da7..d451c3976 100644
--- a/app/src/main/res/layout/chat_message_list_cell.xml
+++ b/app/src/main/res/layout/chat_message_list_cell.xml
@@ -84,8 +84,7 @@
android:adjustViewBounds="true"
android:background="@drawable/led_background"
android:padding="2dp"
- android:contentDescription="@{data.presenceStatus == ConsolidatedPresence.Online ? @string/content_description_presence_online : @string/content_description_presence_offline}"
- android:src="@{data.presenceStatus == ConsolidatedPresence.Online ? @drawable/led_online : @drawable/led_away, default=@drawable/led_online}"
+ app:presenceIcon="@{data.presenceStatus}"
android:visibility="@{data.chatMessage.outgoing || selectionListViewModel.isEditionEnabled || data.hideAvatar || data.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" />
-
+
@@ -46,8 +47,7 @@
android:adjustViewBounds="true"
android:background="@drawable/led_background"
android:padding="2dp"
- android:contentDescription="@{data.presenceStatus == ConsolidatedPresence.Online ? @string/content_description_presence_online : @string/content_description_presence_offline}"
- android:src="@{data.presenceStatus == ConsolidatedPresence.Online ? @drawable/led_online : @drawable/led_away, default=@drawable/led_online}"
+ app:presenceIcon="@{data.presenceStatus}"
android:visibility="@{data.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" />
diff --git a/app/src/main/res/layout/contact_detail_fragment.xml b/app/src/main/res/layout/contact_detail_fragment.xml
index 44cc4ba5e..70c4ab106 100644
--- a/app/src/main/res/layout/contact_detail_fragment.xml
+++ b/app/src/main/res/layout/contact_detail_fragment.xml
@@ -104,7 +104,7 @@
android:adjustViewBounds="true"
android:background="@drawable/led_background"
android:padding="2dp"
- android:src="@{viewModel.presenceStatus == ConsolidatedPresence.Online ? @drawable/led_online : @drawable/led_away, default=@drawable/led_online}"
+ app:presenceIcon="@{viewModel.presenceStatus}"
android:visibility="@{viewModel.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" />
diff --git a/app/src/main/res/layout/contact_list_cell.xml b/app/src/main/res/layout/contact_list_cell.xml
index ec04c6593..e48fbfc47 100644
--- a/app/src/main/res/layout/contact_list_cell.xml
+++ b/app/src/main/res/layout/contact_list_cell.xml
@@ -1,5 +1,6 @@
-
+
@@ -52,7 +53,7 @@
android:adjustViewBounds="true"
android:background="@drawable/led_background"
android:padding="2dp"
- android:src="@{viewModel.presenceStatus == ConsolidatedPresence.Online ? @drawable/led_online : @drawable/led_away, default=@drawable/led_online}"
+ app:presenceIcon="@{viewModel.presenceStatus}"
android:visibility="@{viewModel.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" />
-
+
@@ -50,8 +51,7 @@
android:adjustViewBounds="true"
android:background="@drawable/led_background"
android:padding="2dp"
- android:contentDescription="@{data.presenceStatus == ConsolidatedPresence.Online ? @string/content_description_presence_online : @string/content_description_presence_offline}"
- android:src="@{data.presenceStatus == ConsolidatedPresence.Online ? @drawable/led_online : @drawable/led_away, default=@drawable/led_online}"
+ app:presenceIcon="@{data.presenceStatus}"
android:visibility="@{data.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" />
diff --git a/app/src/main/res/layout/history_list_cell.xml b/app/src/main/res/layout/history_list_cell.xml
index 97955cd3c..87fd199da 100644
--- a/app/src/main/res/layout/history_list_cell.xml
+++ b/app/src/main/res/layout/history_list_cell.xml
@@ -1,5 +1,6 @@
-
+
@@ -101,7 +102,7 @@
android:adjustViewBounds="true"
android:background="@drawable/led_background"
android:padding="2dp"
- android:src="@{viewModel.presenceStatus == ConsolidatedPresence.Online ? @drawable/led_online : @drawable/led_away, default=@drawable/led_online}"
+ app:presenceIcon="@{viewModel.presenceStatus}"
android:visibility="@{viewModel.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" />
Message vocal
La personne est en ligne
La personne est hors ligne
+ La personne souhaite ne pas être dérangée
Publier la présence
En ligne
En ligne aujourd\'hui à
En ligne hier à
En ligne le
+ Ne pas déranger
Voulez-vous supprimer votre compte ?
Votre compte sera supprimé localement.\nPour le supprimer de manière définitive, rendez-vous sur le site internet de votre fournisseur SIP.
Votre compte sera supprimé localement.\nPour le supprimer de manière définitive, rendez-vous sur notre plateforme de gestion des comptes :
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 64fd1b47d..6b07d09df 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -237,6 +237,7 @@
Online today at
Online yesterday at
Online on
+ Do not disturb
No recordings
@@ -901,4 +902,5 @@
Export recording
User is online
User is offline
+ User is asking not to be disturbed