diff --git a/Signal/Images.xcassets/contact-avatar.imageset/Contents.json b/Signal/Images.xcassets/contact-avatar-1024.imageset/Contents.json similarity index 100% rename from Signal/Images.xcassets/contact-avatar.imageset/Contents.json rename to Signal/Images.xcassets/contact-avatar-1024.imageset/Contents.json diff --git a/Signal/Images.xcassets/contact-avatar.imageset/contact-avatar-1024.png b/Signal/Images.xcassets/contact-avatar-1024.imageset/contact-avatar-1024.png similarity index 100% rename from Signal/Images.xcassets/contact-avatar.imageset/contact-avatar-1024.png rename to Signal/Images.xcassets/contact-avatar-1024.imageset/contact-avatar-1024.png diff --git a/Signal/Images.xcassets/contact-avatar-84.imageset/Contents.json b/Signal/Images.xcassets/contact-avatar-84.imageset/Contents.json new file mode 100644 index 000000000..d347f46e9 --- /dev/null +++ b/Signal/Images.xcassets/contact-avatar-84.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "contact-avatar-84.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Signal/Images.xcassets/contact-avatar-84.imageset/contact-avatar-84.png b/Signal/Images.xcassets/contact-avatar-84.imageset/contact-avatar-84.png new file mode 100644 index 000000000..8a0e5924b Binary files /dev/null and b/Signal/Images.xcassets/contact-avatar-84.imageset/contact-avatar-84.png differ diff --git a/SignalMessaging/utils/OWSContactAvatarBuilder.m b/SignalMessaging/utils/OWSContactAvatarBuilder.m index c5552c482..2a3528148 100644 --- a/SignalMessaging/utils/OWSContactAvatarBuilder.m +++ b/SignalMessaging/utils/OWSContactAvatarBuilder.m @@ -100,9 +100,8 @@ NS_ASSUME_NONNULL_BEGIN - (nullable UIImage *)buildDefaultImage { - UIImage *_Nullable cachedAvatar = nil; - [OWSContactAvatarBuilder.contactsManager.avatarCache imageForKey:self.cacheKey - diameter:(CGFloat)self.diameter]; + UIImage *_Nullable cachedAvatar = + [OWSContactAvatarBuilder.contactsManager.avatarCache imageForKey:self.cacheKey diameter:(CGFloat)self.diameter]; if (cachedAvatar) { return cachedAvatar; } @@ -135,11 +134,18 @@ NS_ASSUME_NONNULL_BEGIN if (initials.length == 0) { // We don't have a name for this contact, so we can't make an "initials" image. - UIImage *icon = [UIImage imageNamed:@"contact-avatar"]; + UIImage *icon; + if (self.diameter > kStandardAvatarSize) { + icon = [UIImage imageNamed:@"contact-avatar-1024"]; + } else { + icon = [UIImage imageNamed:@"contact-avatar-84"]; + } + CGFloat assetWidthPixels = CGImageGetWidth(icon.CGImage); // The contact-avatar asset is designed to be 28pt if the avatar is kStandardAvatarSize. // Adjust its size to reflect the actual output diameter. // We use an oversize 1024px version of the asset to ensure quality results for larger avatars. - CGFloat scaling = (self.diameter / (CGFloat)kStandardAvatarSize) * (28 / 1024.f); + CGFloat scaling = (self.diameter / (CGFloat)kStandardAvatarSize) * (28 / assetWidthPixels); + CGSize iconSize = CGSizeScale(icon.size, scaling); image = [OWSAvatarBuilder avatarImageWithIcon:icon iconSize:iconSize backgroundColor:color diameter:self.diameter];