From b46756930857a7abdd6aec1f309c52b54d7b05a8 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 24 Mar 2023 10:15:11 +0100 Subject: [PATCH] Improved code handling how presence icon & content description is computed + added do not disturb presence support --- .../main/chat/viewmodels/ChatRoomViewModel.kt | 3 +++ .../org/linphone/utils/DataBindingUtils.kt | 19 +++++++++++++++++++ .../main/res/drawable/led_do_not_disturb.xml | 5 +++++ .../res/layout/chat_message_list_cell.xml | 3 +-- .../layout/chat_room_devices_group_cell.xml | 3 +-- .../chat_room_group_info_participant_cell.xml | 6 +++--- .../chat_room_imdn_participant_cell.xml | 3 +-- .../main/res/layout/chat_room_list_cell.xml | 3 +-- .../res/layout/contact_detail_fragment.xml | 2 +- app/src/main/res/layout/contact_list_cell.xml | 5 +++-- .../res/layout/contact_selection_cell.xml | 6 +++--- .../res/layout/history_detail_fragment.xml | 2 +- app/src/main/res/layout/history_list_cell.xml | 5 +++-- .../main/res/layout/side_menu_fragment.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 ++ app/src/main/res/values/strings.xml | 2 ++ 16 files changed, 50 insertions(+), 21 deletions(-) create mode 100644 app/src/main/res/drawable/led_do_not_disturb.xml 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