Improve AvatarImage to update on recipient changes.

This commit is contained in:
Sagar
2025-04-04 01:48:05 +05:30
committed by Michelle Tang
parent 8a0e260061
commit d65954c26f
2 changed files with 24 additions and 9 deletions

View File

@@ -9,12 +9,18 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.platform.LocalInspectionMode
import androidx.compose.ui.viewinterop.AndroidView import androidx.compose.ui.viewinterop.AndroidView
import androidx.lifecycle.map
import org.thoughtcrime.securesms.components.AvatarImageView 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.recipients.Recipient
import org.thoughtcrime.securesms.util.NameUtil
@Composable @Composable
fun AvatarImage( fun AvatarImage(
@@ -22,6 +28,9 @@ fun AvatarImage(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
useProfile: Boolean = true 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) { if (LocalInspectionMode.current) {
Spacer( Spacer(
modifier = modifier modifier = modifier
@@ -33,10 +42,16 @@ fun AvatarImage(
modifier = modifier.background(color = Color.Transparent, shape = CircleShape) modifier = modifier.background(color = Color.Transparent, shape = CircleShape)
) { ) {
if (useProfile) { if (useProfile) {
it.setAvatarUsingProfile(recipient) it.setAvatarUsingProfile(state.self)
} else { } else {
it.setAvatar(recipient) it.setAvatar(state.self)
} }
} }
} }
} }
private data class AvatarImageState(
val displayName: String?,
val self: Recipient,
val avatarFileDetails: ProfileAvatarFileDetails
)

View File

@@ -62,13 +62,13 @@ public final class AvatarImageView extends AppCompatImageView {
private final RequestListener<Drawable> redownloadRequestListener = new RedownloadRequestListener(); private final RequestListener<Drawable> redownloadRequestListener = new RedownloadRequestListener();
private int size; private int size;
private boolean inverted; private boolean inverted;
private OnClickListener listener; private OnClickListener listener;
private boolean blurred; private boolean blurred;
private ChatColors chatColors; private ChatColors chatColors;
private String initials; private String initials;
private FixedSizeTarget fixedSizeTarget; private FixedSizeTarget fixedSizeTarget;
private @Nullable RecipientContactPhoto recipientContactPhoto; private @Nullable RecipientContactPhoto recipientContactPhoto;
private @NonNull Drawable unknownRecipientDrawable; private @NonNull Drawable unknownRecipientDrawable;