Improved code handling how presence icon & content description is computed + added do not disturb presence support

This commit is contained in:
Sylvain Berfini 2023-03-24 10:15:11 +01:00
parent 4264ecc933
commit b467569308
16 changed files with 50 additions and 21 deletions

View file

@ -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

View file

@ -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)
}

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
<solid android:color="@color/led_error"/>
<size android:width="15dp" android:height="15dp"/>
</shape>

View file

@ -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}" />
<LinearLayout

View file

@ -48,8 +48,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}" />
<ImageView

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View"/>
@ -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}" />
<ImageView

View file

@ -35,8 +35,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}" />
<TextView

View file

@ -58,8 +58,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}"
app:layout_constraintStart_toStartOf="@id/avatar"
app:layout_constraintBottom_toBottomOf="@id/avatar"/>

View file

@ -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}" />
</RelativeLayout>

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View"/>
@ -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}" />
<LinearLayout

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View"/>
@ -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}" />
<ImageView

View file

@ -106,7 +106,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}" />
</RelativeLayout>

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
@ -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}" />
<ImageView

View file

@ -80,7 +80,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.defaultAccountFound || viewModel.presenceStatus == ConsolidatedPresence.Offline ? View.GONE : View.VISIBLE, default=gone}" />
<LinearLayout

View file

@ -760,11 +760,13 @@
<string name="chat_message_voice_recording">Message vocal</string>
<string name="content_description_presence_online">La personne est en ligne</string>
<string name="content_description_presence_offline">La personne est hors ligne</string>
<string name="content_description_presence_do_not_disturb">La personne souhaite ne pas être dérangée</string>
<string name="account_setting_publish_presence_title">Publier la présence</string>
<string name="chat_room_presence_online">En ligne</string>
<string name="chat_room_presence_last_seen_online_today">En ligne aujourd\'hui à</string>
<string name="chat_room_presence_last_seen_online_yesterday">En ligne hier à</string>
<string name="chat_room_presence_last_seen_online">En ligne le</string>
<string name="chat_room_presence_do_not_disturb">Ne pas déranger</string>
<string name="account_setting_delete_dialog_title">Voulez-vous supprimer votre compte ?</string>
<string name="account_setting_delete_generic_confirmation_dialog">Votre compte sera supprimé localement.\nPour le supprimer de manière définitive, rendez-vous sur le site internet de votre fournisseur SIP.</string>
<string name="account_setting_delete_sip_linphone_org_confirmation_dialog">Votre compte sera supprimé localement.\nPour le supprimer de manière définitive, rendez-vous sur notre plateforme de gestion des comptes :</string>

View file

@ -237,6 +237,7 @@
<string name="chat_room_presence_last_seen_online_today">Online today at</string>
<string name="chat_room_presence_last_seen_online_yesterday">Online yesterday at</string>
<string name="chat_room_presence_last_seen_online">Online on</string>
<string name="chat_room_presence_do_not_disturb">Do not disturb</string>
<!-- Recordings -->
<string name="recordings_empty_list">No recordings</string>
@ -901,4 +902,5 @@
<string name="content_description_recording_export">Export recording</string>
<string name="content_description_presence_online">User is online</string>
<string name="content_description_presence_offline">User is offline</string>
<string name="content_description_presence_do_not_disturb">User is asking not to be disturbed</string>
</resources>