Fix notification reply avatar showing note to self instead of profile photo.

This commit is contained in:
jeffrey-signal
2026-03-27 11:21:14 -04:00
committed by GitHub
parent 59c27797d6
commit c76c3f65f2
3 changed files with 24 additions and 17 deletions
@@ -46,9 +46,9 @@ sealed interface FallbackAvatar {
fun getIconBySize(size: Size): Int fun getIconBySize(size: Size): Int
/** /**
* Local user * Note to Self / local user
*/ */
data class Local(override val color: AvatarColor) : Resource { data class NoteToSelf(override val color: AvatarColor) : Resource {
override fun getIconBySize(size: Size): Int { override fun getIconBySize(size: Size): Int {
return when (size) { return when (size) {
Size.SMALL -> R.drawable.symbol_note_compact_16 Size.SMALL -> R.drawable.symbol_note_compact_16
@@ -709,7 +709,7 @@ class Recipient(
fun getFallbackAvatar(): FallbackAvatar { fun getFallbackAvatar(): FallbackAvatar {
return if (isSelf) { return if (isSelf) {
FallbackAvatar.Resource.Local(avatarColor) FallbackAvatar.Resource.NoteToSelf(avatarColor)
} else if (isResolving) { } else if (isResolving) {
FallbackAvatar.Transparent FallbackAvatar.Transparent
} else if (isDistributionList) { } else if (isDistributionList) {
@@ -30,6 +30,7 @@ import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.avatar.fallback.FallbackAvatar; import org.thoughtcrime.securesms.avatar.fallback.FallbackAvatar;
import org.thoughtcrime.securesms.avatar.fallback.FallbackAvatarDrawable; import org.thoughtcrime.securesms.avatar.fallback.FallbackAvatarDrawable;
import org.thoughtcrime.securesms.conversation.colors.AvatarColor;
import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto;
import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto;
import org.thoughtcrime.securesms.conversation.colors.AvatarGradientColors; import org.thoughtcrime.securesms.conversation.colors.AvatarGradientColors;
@@ -126,7 +127,12 @@ public final class AvatarUtil {
*/ */
@WorkerThread @WorkerThread
public static @NonNull IconCompat getIconCompatForShortcut(@NonNull Context context, @NonNull Recipient recipient) { public static @NonNull IconCompat getIconCompatForShortcut(@NonNull Context context, @NonNull Recipient recipient) {
return IconCompat.createWithBitmap(getBitmapForNotification(context, recipient, AdaptiveBitmapMetrics.getInnerWidth())); int size = AdaptiveBitmapMetrics.getInnerWidth();
if (recipient.isSelf()) {
Drawable noteToSelfDrawable = getNoteToSelfDrawable(context, recipient.getAvatarColor(), size);
return IconCompat.createWithBitmap(DrawableUtil.toBitmap(noteToSelfDrawable, size, size));
}
return IconCompat.createWithBitmap(getBitmapForNotification(context, recipient, size));
} }
@WorkerThread @WorkerThread
@@ -138,10 +144,6 @@ public final class AvatarUtil {
public static @NonNull Bitmap getBitmapForNotification(@NonNull Context context, @NonNull Recipient recipient, int size) { public static @NonNull Bitmap getBitmapForNotification(@NonNull Context context, @NonNull Recipient recipient, int size) {
ThreadUtil.assertNotMainThread(); ThreadUtil.assertNotMainThread();
if (recipient.isSelf()) {
return DrawableUtil.toBitmap(getFallback(context, recipient, size), size, size);
}
try { try {
AvatarTarget avatarTarget = new AvatarTarget(size); AvatarTarget avatarTarget = new AvatarTarget(size);
RequestManager requestManager = Glide.with(context); RequestManager requestManager = Glide.with(context);
@@ -193,18 +195,23 @@ public final class AvatarUtil {
} }
} }
@NonNull
private static Drawable getFallback(@NonNull Context context, @NonNull Recipient recipient, int targetSize) { private static Drawable getFallback(@NonNull Context context, @NonNull Recipient recipient, int targetSize) {
FallbackAvatar fallbackAvatar; FallbackAvatar fallbackAvatar = recipient.isSelf() ? recipient.getFallbackAvatar()
if (recipient.isSelf()) { : FallbackAvatar.forTextOrDefault(recipient.getDisplayName(context), recipient.getAvatarColor());
fallbackAvatar = recipient.getFallbackAvatar(); return createFallbackDrawable(context, fallbackAvatar, targetSize);
} else {
fallbackAvatar = FallbackAvatar.forTextOrDefault(recipient.getDisplayName(context), recipient.getAvatarColor());
} }
Drawable avatar = new FallbackAvatarDrawable(context, fallbackAvatar).circleCrop(); @NonNull
avatar.setBounds(0, 0, targetSize, targetSize); private static Drawable getNoteToSelfDrawable(@NonNull Context context, @NonNull AvatarColor avatarColor, int size) {
return createFallbackDrawable(context, new FallbackAvatar.Resource.NoteToSelf(avatarColor), size);
}
return avatar; @NonNull
private static Drawable createFallbackDrawable(@NonNull Context context, @NonNull FallbackAvatar avatar, int size) {
Drawable drawable = new FallbackAvatarDrawable(context, avatar).circleCrop();
drawable.setBounds(0, 0, size, size);
return drawable;
} }
/** /**