From 7bbfc2d34cc9b71f31a3bb29ae47c9746e60e692 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Wed, 3 Nov 2021 10:44:36 -0300 Subject: [PATCH] Add badge treatments as per spec. --- .../securesms/badges/BadgeImageView.kt | 48 ++++++++++++------- .../preferences/RecipientPreference.kt | 3 ++ .../conversation/ConversationItem.java | 10 ++++ .../groups/ui/GroupMemberListAdapter.java | 4 ++ .../messagedetails/RecipientViewHolder.java | 4 ++ .../layout/contact_selection_list_item.xml | 10 ++-- .../conversation_item_received_multimedia.xml | 12 +++++ .../conversation_item_received_text_only.xml | 16 ++++++- .../res/layout/group_recipient_list_item.xml | 13 +++++ .../res/layout/message_details_recipient.xml | 13 +++++ 10 files changed, 110 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeImageView.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeImageView.kt index 3b8d578f1f..35804cd76c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeImageView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeImageView.kt @@ -9,6 +9,7 @@ import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.badges.glide.BadgeSpriteTransformation import org.thoughtcrime.securesms.badges.models.Badge import org.thoughtcrime.securesms.mms.GlideApp +import org.thoughtcrime.securesms.mms.GlideRequests import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.util.ThemeUtil import org.thoughtcrime.securesms.util.visible @@ -28,31 +29,46 @@ class BadgeImageView @JvmOverloads constructor( } fun setBadgeFromRecipient(recipient: Recipient?) { + getGlideRequests()?.let { + setBadgeFromRecipient(recipient, it) + } + } + + fun setBadgeFromRecipient(recipient: Recipient?, glideRequests: GlideRequests) { if (recipient == null || recipient.badges.isEmpty()) { - setBadge(null) + setBadge(null, glideRequests) } else { - setBadge(recipient.badges[0]) + setBadge(recipient.badges[0], glideRequests) } } fun setBadge(badge: Badge?) { + getGlideRequests()?.let { + setBadge(badge, it) + } + } + + fun setBadge(badge: Badge?, glideRequests: GlideRequests) { visible = badge != null - try { - if (badge != null) { - GlideApp - .with(this) - .load(badge) - .downsample(DownsampleStrategy.NONE) - .transform(BadgeSpriteTransformation(BadgeSpriteTransformation.Size.fromInteger(badgeSize), badge.imageDensity, ThemeUtil.isDarkTheme(context))) - .into(this) - } else { - GlideApp - .with(this) - .clear(this) - } + if (badge != null) { + glideRequests + .load(badge) + .downsample(DownsampleStrategy.NONE) + .transform(BadgeSpriteTransformation(BadgeSpriteTransformation.Size.fromInteger(badgeSize), badge.imageDensity, ThemeUtil.isDarkTheme(context))) + .into(this) + } else { + glideRequests + .clear(this) + } + } + + private fun getGlideRequests(): GlideRequests? { + return try { + GlideApp.with(this) } catch (e: IllegalArgumentException) { - // Do nothing. Activity was destroyed. + // View not attached to an activity or activity destroyed + null } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/RecipientPreference.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/RecipientPreference.kt index c1ca84c201..6b16034dfd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/RecipientPreference.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/RecipientPreference.kt @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.components.settings.conversation.preferences import android.view.View import android.widget.TextView import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.badges.BadgeImageView import org.thoughtcrime.securesms.components.AvatarImageView import org.thoughtcrime.securesms.components.settings.PreferenceModel import org.thoughtcrime.securesms.recipients.Recipient @@ -40,11 +41,13 @@ object RecipientPreference { private val name: TextView = itemView.findViewById(R.id.recipient_name) private val about: TextView = itemView.findViewById(R.id.recipient_about) private val admin: View = itemView.findViewById(R.id.admin) + private val badge: BadgeImageView = itemView.findViewById(R.id.recipient_badge) override fun bind(model: Model) { itemView.setOnClickListener { model.onClick() } avatar.setRecipient(model.recipient) + badge.setBadgeFromRecipient(model.recipient) name.text = if (model.recipient.isSelf) { context.getString(R.string.Recipient_you) } else { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java index c2e25bc79a..3a0500b2ef 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java @@ -67,6 +67,7 @@ import org.thoughtcrime.securesms.BindableConversationItem; import org.thoughtcrime.securesms.MediaPreviewActivity; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; +import org.thoughtcrime.securesms.badges.BadgeImageView; import org.thoughtcrime.securesms.components.AlertView; import org.thoughtcrime.securesms.components.AudioView; import org.thoughtcrime.securesms.components.AvatarImageView; @@ -183,6 +184,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo private AvatarImageView contactPhoto; private AlertView alertView; protected ReactionsConversationView reactionsView; + private BadgeImageView badgeImageView; private @NonNull Set batchSelected = new HashSet<>(); private @NonNull Outliner outliner = new Outliner(); @@ -264,6 +266,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo this.reply = findViewById(R.id.reply_icon_wrapper); this.replyIcon = findViewById(R.id.reply_icon); this.reactionsView = findViewById(R.id.reactions_view); + this.badgeImageView = findViewById(R.id.badge); setOnClickListener(new ClickListener(null)); @@ -1250,6 +1253,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo }); contactPhoto.setAvatar(glideRequests, recipient, false); + badgeImageView.setBadgeFromRecipient(recipient, glideRequests); } private void linkifyMessageBody(@NonNull Spannable messageBody, @@ -1486,8 +1490,10 @@ public final class ConversationItem extends RelativeLayout implements BindableCo if (!next.isPresent() || next.get().isUpdate() || !current.getRecipient().equals(next.get().getRecipient())) { contactPhoto.setVisibility(VISIBLE); + badgeImageView.setVisibility(VISIBLE); } else { contactPhoto.setVisibility(GONE); + badgeImageView.setVisibility(GONE); } } else { if (groupSenderHolder != null) { @@ -1497,6 +1503,10 @@ public final class ConversationItem extends RelativeLayout implements BindableCo if (contactPhotoHolder != null) { contactPhotoHolder.setVisibility(GONE); } + + if (badgeImageView != null) { + badgeImageView.setVisibility(GONE); + } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/GroupMemberListAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/GroupMemberListAdapter.java index ad01981e1d..4a37f238d5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/GroupMemberListAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/GroupMemberListAdapter.java @@ -14,6 +14,7 @@ import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.RecyclerView; import org.thoughtcrime.securesms.R; +import org.thoughtcrime.securesms.badges.BadgeImageView; import org.thoughtcrime.securesms.components.AvatarImageView; import org.thoughtcrime.securesms.components.emoji.EmojiTextView; import org.thoughtcrime.securesms.recipients.Recipient; @@ -168,6 +169,7 @@ final class GroupMemberListAdapter extends LifecycleRecyclerAdapter diff --git a/app/src/main/res/layout/conversation_item_received_multimedia.xml b/app/src/main/res/layout/conversation_item_received_multimedia.xml index 039a3e2247..50e322bae2 100644 --- a/app/src/main/res/layout/conversation_item_received_multimedia.xml +++ b/app/src/main/res/layout/conversation_item_received_multimedia.xml @@ -53,6 +53,18 @@ + + + + + + + +