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
)