From d65954c26f9bb4983e1b7bceb45d957714ab35f5 Mon Sep 17 00:00:00 2001 From: Sagar <85388413+Sagar0-0@users.noreply.github.com> Date: Fri, 4 Apr 2025 01:48:05 +0530 Subject: [PATCH] Improve AvatarImage to update on recipient changes. --- .../securesms/avatar/AvatarImage.kt | 19 +++++++++++++++++-- .../securesms/components/AvatarImageView.java | 14 +++++++------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/avatar/AvatarImage.kt b/app/src/main/java/org/thoughtcrime/securesms/avatar/AvatarImage.kt index bf83a5a773..1a987a6ef9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/avatar/AvatarImage.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/avatar/AvatarImage.kt @@ -9,12 +9,18 @@ import androidx.compose.foundation.background import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.shape.CircleShape import androidx.compose.runtime.Composable +import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.viewinterop.AndroidView +import androidx.lifecycle.map import org.thoughtcrime.securesms.components.AvatarImageView +import org.thoughtcrime.securesms.database.model.ProfileAvatarFileDetails +import org.thoughtcrime.securesms.profiles.AvatarHelper import org.thoughtcrime.securesms.recipients.Recipient +import org.thoughtcrime.securesms.util.NameUtil @Composable fun AvatarImage( @@ -22,6 +28,9 @@ fun AvatarImage( modifier: Modifier = Modifier, useProfile: Boolean = true ) { + val context = LocalContext.current + val state = recipient.live().liveData.map { AvatarImageState(NameUtil.getAbbreviation(it.getDisplayName(context)), it, AvatarHelper.getAvatarFileDetails(context, it.id)) }.observeAsState().value ?: return + if (LocalInspectionMode.current) { Spacer( modifier = modifier @@ -33,10 +42,16 @@ fun AvatarImage( modifier = modifier.background(color = Color.Transparent, shape = CircleShape) ) { if (useProfile) { - it.setAvatarUsingProfile(recipient) + it.setAvatarUsingProfile(state.self) } else { - it.setAvatar(recipient) + it.setAvatar(state.self) } } } } + +private data class AvatarImageState( + val displayName: String?, + val self: Recipient, + val avatarFileDetails: ProfileAvatarFileDetails +) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/AvatarImageView.java b/app/src/main/java/org/thoughtcrime/securesms/components/AvatarImageView.java index e797f4de9e..c017e90204 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/AvatarImageView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/AvatarImageView.java @@ -62,13 +62,13 @@ public final class AvatarImageView extends AppCompatImageView { private final RequestListener redownloadRequestListener = new RedownloadRequestListener(); - private int size; - private boolean inverted; - private OnClickListener listener; - private boolean blurred; - private ChatColors chatColors; - private String initials; - private FixedSizeTarget fixedSizeTarget; + private int size; + private boolean inverted; + private OnClickListener listener; + private boolean blurred; + private ChatColors chatColors; + private String initials; + private FixedSizeTarget fixedSizeTarget; private @Nullable RecipientContactPhoto recipientContactPhoto; private @NonNull Drawable unknownRecipientDrawable;