From 1b5a0ab9f3c45109ee1f04cc03cb68fd1cfa1b67 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 22 Apr 2020 10:34:43 -0400 Subject: [PATCH] Sync the profile photo to linked devices when appropriate. --- .../jobs/MultiDeviceContactUpdateJob.java | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java index acaadbd6fd..9a8063bb9d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java @@ -19,6 +19,7 @@ import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.logging.Log; +import org.thoughtcrime.securesms.profiles.AvatarHelper; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientUtil; @@ -133,7 +134,7 @@ public class MultiDeviceContactUpdateJob extends BaseJob { out.write(new DeviceContact(RecipientUtil.toSignalServiceAddress(context, recipient), Optional.of(recipient.getDisplayName(context)), - getSystemAvatar(recipient.getContactUri()), + getAvatar(recipient.getId(), recipient.getContactUri()), Optional.fromNullable(recipient.getColor().serialize()), verifiedMessage, ProfileKeyUtil.profileKeyOptional(recipient.getProfileKey()), @@ -190,7 +191,7 @@ public class MultiDeviceContactUpdateJob extends BaseJob { out.write(new DeviceContact(RecipientUtil.toSignalServiceAddress(context, recipient), name, - getSystemAvatar(recipient.getContactUri()), + getAvatar(recipient.getId(), recipient.getContactUri()), color, verified, profileKey, @@ -257,6 +258,34 @@ public class MultiDeviceContactUpdateJob extends BaseJob { } } + private Optional getAvatar(@NonNull RecipientId recipientId, @Nullable Uri uri) { + Optional stream = getProfileAvatar(recipientId); + + if (!stream.isPresent()) { + return getSystemAvatar(uri); + } + + return stream; + } + + private Optional getProfileAvatar(@NonNull RecipientId recipientId) { + if (AvatarHelper.hasAvatar(context, recipientId)) { + try { + long length = AvatarHelper.getAvatarLength(context, recipientId); + return Optional.of(SignalServiceAttachmentStream.newStreamBuilder() + .withStream(AvatarHelper.getAvatar(context, recipientId)) + .withContentType("image/*") + .withLength(length) + .build()); + } catch (IOException e) { + Log.w(TAG, "Failed to read profile avatar!", e); + return Optional.absent(); + } + } + + return Optional.absent(); + } + private Optional getSystemAvatar(@Nullable Uri uri) { if (uri == null) { return Optional.absent();