diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/SingleRecipientNotificationBuilder.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/SingleRecipientNotificationBuilder.java index 5821a4e958..228934167e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/SingleRecipientNotificationBuilder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/SingleRecipientNotificationBuilder.java @@ -34,6 +34,7 @@ import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.mms.SlideDeck; import org.thoughtcrime.securesms.preferences.widgets.NotificationPrivacyPreference; import org.thoughtcrime.securesms.recipients.Recipient; +import org.thoughtcrime.securesms.util.AvatarUtil; import org.thoughtcrime.securesms.util.BitmapUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; @@ -273,6 +274,7 @@ public class SingleRecipientNotificationBuilder extends AbstractNotificationBuil .setBot(false) .setName(Recipient.self().getDisplayName(context)) .setKey(Recipient.self().getId().serialize()) + .setIcon(AvatarUtil.getIconForNotification(context, Recipient.self())) .build()); if (threadRecipient.isGroup()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtil.java index f25ec3ad16..cb9a55482e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtil.java @@ -6,6 +6,8 @@ import android.text.TextUtils; import android.widget.ImageView; import androidx.annotation.NonNull; +import androidx.annotation.WorkerThread; +import androidx.core.graphics.drawable.IconCompat; import com.bumptech.glide.load.engine.DiskCacheStrategy; @@ -15,16 +17,40 @@ import org.thoughtcrime.securesms.contacts.avatars.ContactColors; import org.thoughtcrime.securesms.contacts.avatars.GeneratedContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto; import org.thoughtcrime.securesms.mms.GlideApp; +import org.thoughtcrime.securesms.mms.GlideRequest; import org.thoughtcrime.securesms.recipients.Recipient; import org.whispersystems.libsignal.util.guava.Optional; +import java.util.concurrent.ExecutionException; + public final class AvatarUtil { private AvatarUtil() { } public static void loadIconIntoImageView(@NonNull Recipient recipient, @NonNull ImageView target) { - Context context = target.getContext(); + Context context = target.getContext(); + + request(GlideApp.with(context).asDrawable(), context, recipient).into(target); + } + + @WorkerThread + public static IconCompat getIconForNotification(@NonNull Context context, @NonNull Recipient recipient) { + try { + return IconCompat.createWithBitmap(request(GlideApp.with(context).asBitmap(), context, recipient).submit().get()); + } catch (ExecutionException | InterruptedException e) { + return null; + } + } + + private static GlideRequest request(@NonNull GlideRequest glideRequest, @NonNull Context context, @NonNull Recipient recipient) { + return glideRequest.load(new ProfileContactPhoto(recipient.getId(), String.valueOf(TextSecurePreferences.getProfileAvatarId(context)))) + .error(getFallback(context, recipient)) + .circleCrop() + .diskCacheStrategy(DiskCacheStrategy.ALL); + } + + private static Drawable getFallback(@NonNull Context context, @NonNull Recipient recipient) { String name = Optional.fromNullable(recipient.getDisplayName(context)).or(Optional.fromNullable(TextSecurePreferences.getProfileName(context))).or(""); MaterialColor fallbackColor = recipient.getColor(); @@ -32,13 +58,6 @@ public final class AvatarUtil { fallbackColor = ContactColors.generateFor(name); } - Drawable fallback = new GeneratedContactPhoto(name, R.drawable.ic_profile_outline_40).asDrawable(context, fallbackColor.toAvatarColor(context)); - - GlideApp.with(context) - .load(new ProfileContactPhoto(recipient.getId(), String.valueOf(TextSecurePreferences.getProfileAvatarId(context)))) - .error(fallback) - .circleCrop() - .diskCacheStrategy(DiskCacheStrategy.ALL) - .into(target); + return new GeneratedContactPhoto(name, R.drawable.ic_profile_outline_40).asDrawable(context, fallbackColor.toAvatarColor(context)); } }