From ce54520d03ca24d646c35f12f2dd206270634fa9 Mon Sep 17 00:00:00 2001 From: Kevin Boulongne Date: Wed, 26 Jun 2024 11:10:03 +0200 Subject: [PATCH 1/5] Reduce Bimi priority (it should only be displayed if we couldn't find an avatar) v1 --- .../com/infomaniak/mail/data/models/Bimi.kt | 2 + .../mail/ui/main/folder/ThreadListAdapter.kt | 7 +- .../com/infomaniak/mail/views/AvatarView.kt | 79 ++++++++++--------- 3 files changed, 46 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/com/infomaniak/mail/data/models/Bimi.kt b/app/src/main/java/com/infomaniak/mail/data/models/Bimi.kt index 8b318e0571..314dd9c166 100644 --- a/app/src/main/java/com/infomaniak/mail/data/models/Bimi.kt +++ b/app/src/main/java/com/infomaniak/mail/data/models/Bimi.kt @@ -41,6 +41,8 @@ class Bimi() : EmbeddedRealmObject, Parcelable { this.isCertified = isCertified } + fun isDisplayable(): Boolean = isCertified && svgContentUrl?.isNotEmpty() == true + companion object : Parceler { override fun create(parcel: Parcel): Bimi = with(parcel) { diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListAdapter.kt b/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListAdapter.kt index 10670ab811..d4f14d2cee 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListAdapter.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListAdapter.kt @@ -49,7 +49,6 @@ import com.infomaniak.mail.R import com.infomaniak.mail.data.LocalSettings import com.infomaniak.mail.data.LocalSettings.SwipeAction import com.infomaniak.mail.data.LocalSettings.ThreadDensity -import com.infomaniak.mail.data.api.ApiRoutes import com.infomaniak.mail.data.models.Folder.FolderRole import com.infomaniak.mail.data.models.correspondent.Recipient import com.infomaniak.mail.data.models.thread.Thread @@ -402,11 +401,7 @@ class ThreadListAdapter @Inject constructor( private fun CardviewThreadItemBinding.displayAvatar(thread: Thread) { val (recipient, bimi) = thread.computeAvatarRecipient() - if (bimi?.isCertified == true) { - expeditorAvatar.loadBimiAvatar(ApiRoutes.bimi(bimi.svgContentUrl.toString()), recipient) - } else { - expeditorAvatar.loadAvatar(recipient) - } + expeditorAvatar.loadAvatar(recipient, bimi) } private fun CardviewThreadItemBinding.formatRecipientNames(recipients: List): String { diff --git a/app/src/main/java/com/infomaniak/mail/views/AvatarView.kt b/app/src/main/java/com/infomaniak/mail/views/AvatarView.kt index 814e5d12e4..bb3ea8bf89 100644 --- a/app/src/main/java/com/infomaniak/mail/views/AvatarView.kt +++ b/app/src/main/java/com/infomaniak/mail/views/AvatarView.kt @@ -58,11 +58,11 @@ class AvatarView @JvmOverloads constructor( private val binding by lazy { ViewAvatarBinding.inflate(LayoutInflater.from(context), this, true) } private var currentCorrespondent: Correspondent? = null - private var isBimiShown: Boolean = false + private var _bimi: Bimi? = null private val mergedContactObserver = Observer { contacts -> currentCorrespondent?.let { correspondent -> - if (!isBimiShown) loadAvatarUsingDictionary(correspondent, contacts) + loadAvatarUsingDictionary(correspondent, contacts, _bimi) } } @@ -129,14 +129,23 @@ class AvatarView @JvmOverloads constructor( ) } - fun loadAvatar(correspondent: Correspondent?) { - if (correspondent == null) { - loadUnknownUserAvatar() - } else { - // Avoid lateinit property has not been initialized in preview - val contactsFromViewModel = if (isInEditMode) emptyMap() else avatarMergedContactData.mergedContactLiveData.value - loadAvatarUsingDictionary(correspondent, contacts = contactsFromViewModel ?: emptyMap()) - currentCorrespondent = correspondent + fun loadAvatar(correspondent: Correspondent?, bimi: Bimi? = null) { + + _bimi = bimi + + when { + correspondent != null -> { + // Avoid lateinit property has not been initialized in preview + val contactsFromViewModel = if (isInEditMode) emptyMap() else avatarMergedContactData.mergedContactLiveData.value + loadAvatarUsingDictionary(correspondent, contacts = contactsFromViewModel ?: emptyMap(), bimi) + currentCorrespondent = correspondent + } + bimi?.isDisplayable() == true -> { + loadBimiAvatar(ApiRoutes.bimi(bimi.svgContentUrl!!)) + } + else -> { + loadUnknownUserAvatar() + } } } @@ -149,9 +158,8 @@ class AvatarView @JvmOverloads constructor( binding.avatarImage.load(R.drawable.ic_unknown_user_avatar) } - fun loadBimiAvatar(bimiUrl: String, correspondent: Correspondent?) = with(binding.avatarImage) { + private fun loadBimiAvatar(bimiUrl: String, correspondent: Correspondent? = null) = with(binding.avatarImage) { contentDescription = correspondent?.email.orEmpty() - isBimiShown = bimiUrl.isNotEmpty() loadAvatar( backgroundColor = context.getBackgroundColorBasedOnId( correspondent?.email.orEmpty().hashCode(), @@ -171,33 +179,32 @@ class AvatarView @JvmOverloads constructor( return recipientsForEmail?.getOrElse(correspondent.name) { recipientsForEmail.entries.elementAt(0).value } } - private fun loadAvatarUsingDictionary(correspondent: Correspondent, contacts: MergedContactDictionary) { + private fun loadAvatarUsingDictionary(correspondent: Correspondent, contacts: MergedContactDictionary, bimi: Bimi?) { val mergedContact = searchInMergedContact(correspondent, contacts) - binding.avatarImage.baseLoadAvatar(correspondent = mergedContact ?: correspondent) + binding.avatarImage.baseLoadAvatar(correspondent = mergedContact ?: correspondent, bimi) } - private fun ImageView.baseLoadAvatar(correspondent: Correspondent) { - if (correspondent.shouldDisplayUserAvatar()) { - this@AvatarView.loadAvatar(AccountUtils.currentUser!!) - } else { - val avatar = (correspondent as? MergedContact)?.avatar - val color = context.getColor(R.color.onColorfulBackground) - loadAvatar( - backgroundColor = context.getBackgroundColorBasedOnId(correspondent.email.hashCode(), R.array.AvatarColors), - avatarUrl = avatar, - initials = correspondent.initials, - imageLoader = context.imageLoader, - initialsColor = color, - ) - } - } - - fun loadAvatar(correspondent: Correspondent?, bimi: Bimi?) { - val svgContentUrl = bimi?.svgContentUrl - if (bimi == null || !bimi.isCertified || svgContentUrl.isNullOrEmpty()) { - loadAvatar(correspondent) - } else { - loadBimiAvatar(ApiRoutes.bimi(svgContentUrl), correspondent) + private fun ImageView.baseLoadAvatar(correspondent: Correspondent, bimi: Bimi? = null) { + + val avatar = (correspondent as? MergedContact)?.avatar + + when { + correspondent.shouldDisplayUserAvatar() -> { + this@AvatarView.loadAvatar(AccountUtils.currentUser!!) + } + avatar == null && bimi?.isDisplayable() == true -> { + loadBimiAvatar(ApiRoutes.bimi(bimi.svgContentUrl!!), correspondent) + } + else -> { + val color = context.getColor(R.color.onColorfulBackground) + loadAvatar( + backgroundColor = context.getBackgroundColorBasedOnId(correspondent.email.hashCode(), R.array.AvatarColors), + avatarUrl = avatar, + initials = correspondent.initials, + imageLoader = context.imageLoader, + initialsColor = color, + ) + } } } } From 8aaec3b8c3f7d53a795961953063ede345564782 Mon Sep 17 00:00:00 2001 From: Kevin Boulongne Date: Wed, 26 Jun 2024 13:33:36 +0200 Subject: [PATCH 2/5] Revert "Reduce Bimi priority (it should only be displayed if we couldn't find an avatar)" This reverts commit f211e160f0b205ab9e22633660a56bdff4bab7a0. --- .../com/infomaniak/mail/data/models/Bimi.kt | 2 - .../mail/ui/main/folder/ThreadListAdapter.kt | 7 +- .../com/infomaniak/mail/views/AvatarView.kt | 79 +++++++++---------- 3 files changed, 42 insertions(+), 46 deletions(-) diff --git a/app/src/main/java/com/infomaniak/mail/data/models/Bimi.kt b/app/src/main/java/com/infomaniak/mail/data/models/Bimi.kt index 314dd9c166..8b318e0571 100644 --- a/app/src/main/java/com/infomaniak/mail/data/models/Bimi.kt +++ b/app/src/main/java/com/infomaniak/mail/data/models/Bimi.kt @@ -41,8 +41,6 @@ class Bimi() : EmbeddedRealmObject, Parcelable { this.isCertified = isCertified } - fun isDisplayable(): Boolean = isCertified && svgContentUrl?.isNotEmpty() == true - companion object : Parceler { override fun create(parcel: Parcel): Bimi = with(parcel) { diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListAdapter.kt b/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListAdapter.kt index d4f14d2cee..10670ab811 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListAdapter.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListAdapter.kt @@ -49,6 +49,7 @@ import com.infomaniak.mail.R import com.infomaniak.mail.data.LocalSettings import com.infomaniak.mail.data.LocalSettings.SwipeAction import com.infomaniak.mail.data.LocalSettings.ThreadDensity +import com.infomaniak.mail.data.api.ApiRoutes import com.infomaniak.mail.data.models.Folder.FolderRole import com.infomaniak.mail.data.models.correspondent.Recipient import com.infomaniak.mail.data.models.thread.Thread @@ -401,7 +402,11 @@ class ThreadListAdapter @Inject constructor( private fun CardviewThreadItemBinding.displayAvatar(thread: Thread) { val (recipient, bimi) = thread.computeAvatarRecipient() - expeditorAvatar.loadAvatar(recipient, bimi) + if (bimi?.isCertified == true) { + expeditorAvatar.loadBimiAvatar(ApiRoutes.bimi(bimi.svgContentUrl.toString()), recipient) + } else { + expeditorAvatar.loadAvatar(recipient) + } } private fun CardviewThreadItemBinding.formatRecipientNames(recipients: List): String { diff --git a/app/src/main/java/com/infomaniak/mail/views/AvatarView.kt b/app/src/main/java/com/infomaniak/mail/views/AvatarView.kt index bb3ea8bf89..814e5d12e4 100644 --- a/app/src/main/java/com/infomaniak/mail/views/AvatarView.kt +++ b/app/src/main/java/com/infomaniak/mail/views/AvatarView.kt @@ -58,11 +58,11 @@ class AvatarView @JvmOverloads constructor( private val binding by lazy { ViewAvatarBinding.inflate(LayoutInflater.from(context), this, true) } private var currentCorrespondent: Correspondent? = null - private var _bimi: Bimi? = null + private var isBimiShown: Boolean = false private val mergedContactObserver = Observer { contacts -> currentCorrespondent?.let { correspondent -> - loadAvatarUsingDictionary(correspondent, contacts, _bimi) + if (!isBimiShown) loadAvatarUsingDictionary(correspondent, contacts) } } @@ -129,23 +129,14 @@ class AvatarView @JvmOverloads constructor( ) } - fun loadAvatar(correspondent: Correspondent?, bimi: Bimi? = null) { - - _bimi = bimi - - when { - correspondent != null -> { - // Avoid lateinit property has not been initialized in preview - val contactsFromViewModel = if (isInEditMode) emptyMap() else avatarMergedContactData.mergedContactLiveData.value - loadAvatarUsingDictionary(correspondent, contacts = contactsFromViewModel ?: emptyMap(), bimi) - currentCorrespondent = correspondent - } - bimi?.isDisplayable() == true -> { - loadBimiAvatar(ApiRoutes.bimi(bimi.svgContentUrl!!)) - } - else -> { - loadUnknownUserAvatar() - } + fun loadAvatar(correspondent: Correspondent?) { + if (correspondent == null) { + loadUnknownUserAvatar() + } else { + // Avoid lateinit property has not been initialized in preview + val contactsFromViewModel = if (isInEditMode) emptyMap() else avatarMergedContactData.mergedContactLiveData.value + loadAvatarUsingDictionary(correspondent, contacts = contactsFromViewModel ?: emptyMap()) + currentCorrespondent = correspondent } } @@ -158,8 +149,9 @@ class AvatarView @JvmOverloads constructor( binding.avatarImage.load(R.drawable.ic_unknown_user_avatar) } - private fun loadBimiAvatar(bimiUrl: String, correspondent: Correspondent? = null) = with(binding.avatarImage) { + fun loadBimiAvatar(bimiUrl: String, correspondent: Correspondent?) = with(binding.avatarImage) { contentDescription = correspondent?.email.orEmpty() + isBimiShown = bimiUrl.isNotEmpty() loadAvatar( backgroundColor = context.getBackgroundColorBasedOnId( correspondent?.email.orEmpty().hashCode(), @@ -179,32 +171,33 @@ class AvatarView @JvmOverloads constructor( return recipientsForEmail?.getOrElse(correspondent.name) { recipientsForEmail.entries.elementAt(0).value } } - private fun loadAvatarUsingDictionary(correspondent: Correspondent, contacts: MergedContactDictionary, bimi: Bimi?) { + private fun loadAvatarUsingDictionary(correspondent: Correspondent, contacts: MergedContactDictionary) { val mergedContact = searchInMergedContact(correspondent, contacts) - binding.avatarImage.baseLoadAvatar(correspondent = mergedContact ?: correspondent, bimi) + binding.avatarImage.baseLoadAvatar(correspondent = mergedContact ?: correspondent) } - private fun ImageView.baseLoadAvatar(correspondent: Correspondent, bimi: Bimi? = null) { - - val avatar = (correspondent as? MergedContact)?.avatar - - when { - correspondent.shouldDisplayUserAvatar() -> { - this@AvatarView.loadAvatar(AccountUtils.currentUser!!) - } - avatar == null && bimi?.isDisplayable() == true -> { - loadBimiAvatar(ApiRoutes.bimi(bimi.svgContentUrl!!), correspondent) - } - else -> { - val color = context.getColor(R.color.onColorfulBackground) - loadAvatar( - backgroundColor = context.getBackgroundColorBasedOnId(correspondent.email.hashCode(), R.array.AvatarColors), - avatarUrl = avatar, - initials = correspondent.initials, - imageLoader = context.imageLoader, - initialsColor = color, - ) - } + private fun ImageView.baseLoadAvatar(correspondent: Correspondent) { + if (correspondent.shouldDisplayUserAvatar()) { + this@AvatarView.loadAvatar(AccountUtils.currentUser!!) + } else { + val avatar = (correspondent as? MergedContact)?.avatar + val color = context.getColor(R.color.onColorfulBackground) + loadAvatar( + backgroundColor = context.getBackgroundColorBasedOnId(correspondent.email.hashCode(), R.array.AvatarColors), + avatarUrl = avatar, + initials = correspondent.initials, + imageLoader = context.imageLoader, + initialsColor = color, + ) + } + } + + fun loadAvatar(correspondent: Correspondent?, bimi: Bimi?) { + val svgContentUrl = bimi?.svgContentUrl + if (bimi == null || !bimi.isCertified || svgContentUrl.isNullOrEmpty()) { + loadAvatar(correspondent) + } else { + loadBimiAvatar(ApiRoutes.bimi(svgContentUrl), correspondent) } } } From 27983cc6a65a4a69208ea5ca5e94ac9b882dcd73 Mon Sep 17 00:00:00 2001 From: Gibran Chevalley Date: Wed, 26 Jun 2024 13:08:27 +0200 Subject: [PATCH 3/5] Reduce Bimi priority (it should only be displayed if we couldn't find an avatar) v2 --- .../com/infomaniak/mail/data/models/Bimi.kt | 2 + .../mail/ui/main/folder/ThreadListAdapter.kt | 7 +- .../com/infomaniak/mail/views/AvatarView.kt | 71 ++++++++++++------- 3 files changed, 48 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/com/infomaniak/mail/data/models/Bimi.kt b/app/src/main/java/com/infomaniak/mail/data/models/Bimi.kt index 8b318e0571..314dd9c166 100644 --- a/app/src/main/java/com/infomaniak/mail/data/models/Bimi.kt +++ b/app/src/main/java/com/infomaniak/mail/data/models/Bimi.kt @@ -41,6 +41,8 @@ class Bimi() : EmbeddedRealmObject, Parcelable { this.isCertified = isCertified } + fun isDisplayable(): Boolean = isCertified && svgContentUrl?.isNotEmpty() == true + companion object : Parceler { override fun create(parcel: Parcel): Bimi = with(parcel) { diff --git a/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListAdapter.kt b/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListAdapter.kt index 10670ab811..d4f14d2cee 100644 --- a/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListAdapter.kt +++ b/app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListAdapter.kt @@ -49,7 +49,6 @@ import com.infomaniak.mail.R import com.infomaniak.mail.data.LocalSettings import com.infomaniak.mail.data.LocalSettings.SwipeAction import com.infomaniak.mail.data.LocalSettings.ThreadDensity -import com.infomaniak.mail.data.api.ApiRoutes import com.infomaniak.mail.data.models.Folder.FolderRole import com.infomaniak.mail.data.models.correspondent.Recipient import com.infomaniak.mail.data.models.thread.Thread @@ -402,11 +401,7 @@ class ThreadListAdapter @Inject constructor( private fun CardviewThreadItemBinding.displayAvatar(thread: Thread) { val (recipient, bimi) = thread.computeAvatarRecipient() - if (bimi?.isCertified == true) { - expeditorAvatar.loadBimiAvatar(ApiRoutes.bimi(bimi.svgContentUrl.toString()), recipient) - } else { - expeditorAvatar.loadAvatar(recipient) - } + expeditorAvatar.loadAvatar(recipient, bimi) } private fun CardviewThreadItemBinding.formatRecipientNames(recipients: List): String { diff --git a/app/src/main/java/com/infomaniak/mail/views/AvatarView.kt b/app/src/main/java/com/infomaniak/mail/views/AvatarView.kt index 814e5d12e4..7e52467ad3 100644 --- a/app/src/main/java/com/infomaniak/mail/views/AvatarView.kt +++ b/app/src/main/java/com/infomaniak/mail/views/AvatarView.kt @@ -58,16 +58,25 @@ class AvatarView @JvmOverloads constructor( private val binding by lazy { ViewAvatarBinding.inflate(LayoutInflater.from(context), this, true) } private var currentCorrespondent: Correspondent? = null - private var isBimiShown: Boolean = false + private var currentBimi: Bimi? = null private val mergedContactObserver = Observer { contacts -> - currentCorrespondent?.let { correspondent -> - if (!isBimiShown) loadAvatarUsingDictionary(correspondent, contacts) + val displayType = getAvatarDisplayType(currentCorrespondent, currentBimi) + + if (displayType == AvatarDisplayType.MERGED_AVATAR || displayType == AvatarDisplayType.DEFAULT) { + loadAvatarUsingDictionary(currentCorrespondent!!, contacts) } } @Inject - lateinit var avatarMergedContactData: AvatarMergedContactData + lateinit var _avatarMergedContactData: AvatarMergedContactData + + private val contactsFromViewModel: MergedContactDictionary + get() { + // Avoid lateinit property has not been initialized in preview + return if (isInEditMode) emptyMap() else _avatarMergedContactData.mergedContactLiveData.value ?: emptyMap() + } + @Inject lateinit var svgImageLoader: ImageLoader @@ -103,13 +112,13 @@ class AvatarView @JvmOverloads constructor( override fun onAttachedToWindow() { super.onAttachedToWindow() if (isInEditMode) return // Avoid lateinit property has not been initialized in preview - avatarMergedContactData.mergedContactLiveData.observeForever(mergedContactObserver) + _avatarMergedContactData.mergedContactLiveData.observeForever(mergedContactObserver) } override fun onDetachedFromWindow() { super.onDetachedFromWindow() if (isInEditMode) return // Avoid lateinit property has not been initialized in preview - avatarMergedContactData.mergedContactLiveData.removeObserver(mergedContactObserver) + _avatarMergedContactData.mergedContactLiveData.removeObserver(mergedContactObserver) } override fun setOnClickListener(onClickListener: OnClickListener?) = binding.root.setOnClickListener(onClickListener) @@ -129,15 +138,29 @@ class AvatarView @JvmOverloads constructor( ) } - fun loadAvatar(correspondent: Correspondent?) { - if (correspondent == null) { - loadUnknownUserAvatar() - } else { - // Avoid lateinit property has not been initialized in preview - val contactsFromViewModel = if (isInEditMode) emptyMap() else avatarMergedContactData.mergedContactLiveData.value - loadAvatarUsingDictionary(correspondent, contacts = contactsFromViewModel ?: emptyMap()) + fun loadAvatar(correspondent: Correspondent?, bimi: Bimi? = null) { + currentBimi = bimi + + fun loadSimpleCorrespondent(correspondent: Correspondent) { + loadAvatarUsingDictionary(correspondent, contacts = contactsFromViewModel) currentCorrespondent = correspondent } + + when (getAvatarDisplayType(correspondent, bimi)) { + AvatarDisplayType.UNKNOWN -> loadUnknownUserAvatar() + AvatarDisplayType.MERGED_AVATAR -> loadSimpleCorrespondent(correspondent!!) + AvatarDisplayType.BIMI -> loadBimiAvatar(ApiRoutes.bimi(bimi!!.svgContentUrl!!), correspondent!!) + AvatarDisplayType.DEFAULT -> loadSimpleCorrespondent(correspondent!!) + } + } + + private fun getAvatarDisplayType(correspondent: Correspondent?, bimi: Bimi?): AvatarDisplayType { + return when { + correspondent == null -> AvatarDisplayType.UNKNOWN + correspondent.hasMergedContactAvatar(contactsFromViewModel) -> AvatarDisplayType.MERGED_AVATAR + bimi?.isDisplayable() == true -> AvatarDisplayType.BIMI + else -> AvatarDisplayType.DEFAULT + } } fun loadAvatar(mergedContact: MergedContact) { @@ -149,16 +172,15 @@ class AvatarView @JvmOverloads constructor( binding.avatarImage.load(R.drawable.ic_unknown_user_avatar) } - fun loadBimiAvatar(bimiUrl: String, correspondent: Correspondent?) = with(binding.avatarImage) { - contentDescription = correspondent?.email.orEmpty() - isBimiShown = bimiUrl.isNotEmpty() + private fun loadBimiAvatar(bimiUrl: String, correspondent: Correspondent) = with(binding.avatarImage) { + contentDescription = correspondent.email loadAvatar( backgroundColor = context.getBackgroundColorBasedOnId( - correspondent?.email.orEmpty().hashCode(), + correspondent.email.hashCode(), R.array.AvatarColors, ), avatarUrl = bimiUrl, - initials = correspondent?.initials.orEmpty(), + initials = correspondent.initials, imageLoader = svgImageLoader, initialsColor = context.getColor(R.color.onColorfulBackground), ) @@ -171,6 +193,10 @@ class AvatarView @JvmOverloads constructor( return recipientsForEmail?.getOrElse(correspondent.name) { recipientsForEmail.entries.elementAt(0).value } } + private fun Correspondent.hasMergedContactAvatar(contacts: MergedContactDictionary): Boolean { + return searchInMergedContact(this, contacts)?.avatar != null + } + private fun loadAvatarUsingDictionary(correspondent: Correspondent, contacts: MergedContactDictionary) { val mergedContact = searchInMergedContact(correspondent, contacts) binding.avatarImage.baseLoadAvatar(correspondent = mergedContact ?: correspondent) @@ -192,12 +218,5 @@ class AvatarView @JvmOverloads constructor( } } - fun loadAvatar(correspondent: Correspondent?, bimi: Bimi?) { - val svgContentUrl = bimi?.svgContentUrl - if (bimi == null || !bimi.isCertified || svgContentUrl.isNullOrEmpty()) { - loadAvatar(correspondent) - } else { - loadBimiAvatar(ApiRoutes.bimi(svgContentUrl), correspondent) - } - } + enum class AvatarDisplayType { UNKNOWN, MERGED_AVATAR, BIMI, DEFAULT } } From 9490c0f7424ff8c9d432c689f437cf58c5257e64 Mon Sep 17 00:00:00 2001 From: Kevin Boulongne Date: Wed, 26 Jun 2024 13:33:21 +0200 Subject: [PATCH 4/5] Rename some stuff so it's even beautier --- .../com/infomaniak/mail/views/AvatarView.kt | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/infomaniak/mail/views/AvatarView.kt b/app/src/main/java/com/infomaniak/mail/views/AvatarView.kt index 7e52467ad3..5daec5397a 100644 --- a/app/src/main/java/com/infomaniak/mail/views/AvatarView.kt +++ b/app/src/main/java/com/infomaniak/mail/views/AvatarView.kt @@ -63,7 +63,7 @@ class AvatarView @JvmOverloads constructor( private val mergedContactObserver = Observer { contacts -> val displayType = getAvatarDisplayType(currentCorrespondent, currentBimi) - if (displayType == AvatarDisplayType.MERGED_AVATAR || displayType == AvatarDisplayType.DEFAULT) { + if (displayType == AvatarDisplayType.CUSTOM_AVATAR || displayType == AvatarDisplayType.INITIALS) { loadAvatarUsingDictionary(currentCorrespondent!!, contacts) } } @@ -77,7 +77,6 @@ class AvatarView @JvmOverloads constructor( return if (isInEditMode) emptyMap() else _avatarMergedContactData.mergedContactLiveData.value ?: emptyMap() } - @Inject lateinit var svgImageLoader: ImageLoader @@ -139,27 +138,28 @@ class AvatarView @JvmOverloads constructor( } fun loadAvatar(correspondent: Correspondent?, bimi: Bimi? = null) { - currentBimi = bimi fun loadSimpleCorrespondent(correspondent: Correspondent) { loadAvatarUsingDictionary(correspondent, contacts = contactsFromViewModel) currentCorrespondent = correspondent } + currentBimi = bimi + when (getAvatarDisplayType(correspondent, bimi)) { - AvatarDisplayType.UNKNOWN -> loadUnknownUserAvatar() - AvatarDisplayType.MERGED_AVATAR -> loadSimpleCorrespondent(correspondent!!) + AvatarDisplayType.UNKNOWN_CORRESPONDENT -> loadUnknownUserAvatar() + AvatarDisplayType.CUSTOM_AVATAR -> loadSimpleCorrespondent(correspondent!!) AvatarDisplayType.BIMI -> loadBimiAvatar(ApiRoutes.bimi(bimi!!.svgContentUrl!!), correspondent!!) - AvatarDisplayType.DEFAULT -> loadSimpleCorrespondent(correspondent!!) + AvatarDisplayType.INITIALS -> loadSimpleCorrespondent(correspondent!!) } } private fun getAvatarDisplayType(correspondent: Correspondent?, bimi: Bimi?): AvatarDisplayType { return when { - correspondent == null -> AvatarDisplayType.UNKNOWN - correspondent.hasMergedContactAvatar(contactsFromViewModel) -> AvatarDisplayType.MERGED_AVATAR + correspondent == null -> AvatarDisplayType.UNKNOWN_CORRESPONDENT + correspondent.hasMergedContactAvatar(contactsFromViewModel) -> AvatarDisplayType.CUSTOM_AVATAR bimi?.isDisplayable() == true -> AvatarDisplayType.BIMI - else -> AvatarDisplayType.DEFAULT + else -> AvatarDisplayType.INITIALS } } @@ -194,7 +194,7 @@ class AvatarView @JvmOverloads constructor( } private fun Correspondent.hasMergedContactAvatar(contacts: MergedContactDictionary): Boolean { - return searchInMergedContact(this, contacts)?.avatar != null + return searchInMergedContact(correspondent = this, contacts)?.avatar != null } private fun loadAvatarUsingDictionary(correspondent: Correspondent, contacts: MergedContactDictionary) { @@ -218,5 +218,10 @@ class AvatarView @JvmOverloads constructor( } } - enum class AvatarDisplayType { UNKNOWN, MERGED_AVATAR, BIMI, DEFAULT } + enum class AvatarDisplayType { + UNKNOWN_CORRESPONDENT, + CUSTOM_AVATAR, + BIMI, + INITIALS, + } } From a65db32c708b1ec1037b492582e253a4ec5ac375 Mon Sep 17 00:00:00 2001 From: Gibran Chevalley Date: Wed, 26 Jun 2024 15:04:14 +0200 Subject: [PATCH 5/5] Remove useless underscore named variable --- app/src/main/java/com/infomaniak/mail/views/AvatarView.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/infomaniak/mail/views/AvatarView.kt b/app/src/main/java/com/infomaniak/mail/views/AvatarView.kt index 5daec5397a..4bb0ed12fc 100644 --- a/app/src/main/java/com/infomaniak/mail/views/AvatarView.kt +++ b/app/src/main/java/com/infomaniak/mail/views/AvatarView.kt @@ -69,12 +69,12 @@ class AvatarView @JvmOverloads constructor( } @Inject - lateinit var _avatarMergedContactData: AvatarMergedContactData + lateinit var avatarMergedContactData: AvatarMergedContactData private val contactsFromViewModel: MergedContactDictionary get() { // Avoid lateinit property has not been initialized in preview - return if (isInEditMode) emptyMap() else _avatarMergedContactData.mergedContactLiveData.value ?: emptyMap() + return if (isInEditMode) emptyMap() else avatarMergedContactData.mergedContactLiveData.value ?: emptyMap() } @Inject @@ -111,13 +111,13 @@ class AvatarView @JvmOverloads constructor( override fun onAttachedToWindow() { super.onAttachedToWindow() if (isInEditMode) return // Avoid lateinit property has not been initialized in preview - _avatarMergedContactData.mergedContactLiveData.observeForever(mergedContactObserver) + avatarMergedContactData.mergedContactLiveData.observeForever(mergedContactObserver) } override fun onDetachedFromWindow() { super.onDetachedFromWindow() if (isInEditMode) return // Avoid lateinit property has not been initialized in preview - _avatarMergedContactData.mergedContactLiveData.removeObserver(mergedContactObserver) + avatarMergedContactData.mergedContactLiveData.removeObserver(mergedContactObserver) } override fun setOnClickListener(onClickListener: OnClickListener?) = binding.root.setOnClickListener(onClickListener)