From 19d74d91e039bd346bc569b60d67e96ab860c974 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Sat, 13 May 2017 19:37:50 -0400 Subject: [PATCH] Build higher res avatar for call screen Initials avatar looks blurry on call screen // FREEBIE --- Signal/src/Models/OWSAvatarBuilder.h | 6 ++-- Signal/src/Models/OWSAvatarBuilder.m | 14 +++++--- Signal/src/Models/OWSContactAvatarBuilder.h | 14 ++++++-- Signal/src/Models/OWSContactAvatarBuilder.m | 33 +++++++++++++------ .../ViewControllers/CallViewController.swift | 2 +- 5 files changed, 50 insertions(+), 19 deletions(-) diff --git a/Signal/src/Models/OWSAvatarBuilder.h b/Signal/src/Models/OWSAvatarBuilder.h index 9138007d2..8c51ff898 100644 --- a/Signal/src/Models/OWSAvatarBuilder.h +++ b/Signal/src/Models/OWSAvatarBuilder.h @@ -1,5 +1,6 @@ -// Created by Michael Kirk on 9/26/16. -// Copyright © 2016 Open Whisper Systems. All rights reserved. +// +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// NS_ASSUME_NONNULL_BEGIN @@ -10,6 +11,7 @@ NS_ASSUME_NONNULL_BEGIN @interface OWSAvatarBuilder : NSObject + (UIImage *)buildImageForThread:(TSThread *)thread contactsManager:(OWSContactsManager *)contactsManager; ++ (UIImage *)buildImageForThread:(TSThread *)thread contactsManager:(OWSContactsManager *)contactsManager diameter:(CGFloat)diameter; - (nullable UIImage *)buildSavedImage; - (UIImage *)buildDefaultImage; diff --git a/Signal/src/Models/OWSAvatarBuilder.m b/Signal/src/Models/OWSAvatarBuilder.m index fe22c9429..e125622a9 100644 --- a/Signal/src/Models/OWSAvatarBuilder.m +++ b/Signal/src/Models/OWSAvatarBuilder.m @@ -1,5 +1,6 @@ -// Created by Michael Kirk on 9/26/16. -// Copyright © 2016 Open Whisper Systems. All rights reserved. +// +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// #import "OWSAvatarBuilder.h" #import "OWSContactAvatarBuilder.h" @@ -12,11 +13,16 @@ NS_ASSUME_NONNULL_BEGIN @implementation OWSAvatarBuilder + (UIImage *)buildImageForThread:(TSThread *)thread contactsManager:(OWSContactsManager *)contactsManager +{ + const CGFloat kDefaultAvatarDiameter = 100; + return [self buildImageForThread:thread contactsManager:contactsManager diameter:kDefaultAvatarDiameter]; +} + ++ (UIImage *)buildImageForThread:(TSThread *)thread contactsManager:(OWSContactsManager *)contactsManager diameter:(CGFloat)diameter { OWSAvatarBuilder *avatarBuilder; if ([thread isKindOfClass:[TSContactThread class]]) { - avatarBuilder = - [[OWSContactAvatarBuilder alloc] initWithThread:(TSContactThread *)thread contactsManager:contactsManager]; + avatarBuilder = [[OWSContactAvatarBuilder alloc] initWithThread:(TSContactThread *)thread contactsManager:contactsManager diameter:diameter]; } else if ([thread isKindOfClass:[TSGroupThread class]]) { avatarBuilder = [[OWSGroupAvatarBuilder alloc] initWithThread:(TSGroupThread *)thread]; } else { diff --git a/Signal/src/Models/OWSContactAvatarBuilder.h b/Signal/src/Models/OWSContactAvatarBuilder.h index 6fceb151a..3a655459c 100644 --- a/Signal/src/Models/OWSContactAvatarBuilder.h +++ b/Signal/src/Models/OWSContactAvatarBuilder.h @@ -1,5 +1,6 @@ -// Created by Michael Kirk on 9/22/16. -// Copyright © 2016 Open Whisper Systems. All rights reserved. +// +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// #import "OWSAvatarBuilder.h" @@ -14,6 +15,15 @@ NS_ASSUME_NONNULL_BEGIN name:(NSString *)name contactsManager:(OWSContactsManager *)contactsManager; +- (instancetype)initWithContactId:(NSString *)contactId + name:(NSString *)name + contactsManager:(OWSContactsManager *)contactsManager + diameter:(NSUInteger)diameter; + +- (instancetype)initWithThread:(TSContactThread *)thread + contactsManager:(OWSContactsManager *)contactsManager + diameter:(NSUInteger)diameter; + - (instancetype)initWithThread:(TSContactThread *)thread contactsManager:(OWSContactsManager *)contactsManager; @end diff --git a/Signal/src/Models/OWSContactAvatarBuilder.m b/Signal/src/Models/OWSContactAvatarBuilder.m index 35b232f6e..7faf973a5 100644 --- a/Signal/src/Models/OWSContactAvatarBuilder.m +++ b/Signal/src/Models/OWSContactAvatarBuilder.m @@ -1,5 +1,6 @@ -// Created by Michael Kirk on 9/22/16. -// Copyright © 2016 Open Whisper Systems. All rights reserved. +// +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// #import "OWSContactAvatarBuilder.h" #import "OWSContactsManager.h" @@ -17,6 +18,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly) OWSContactsManager *contactsManager; @property (nonatomic, readonly) NSString *signalId; @property (nonatomic, readonly) NSString *contactName; +@property (nonatomic, readonly) NSUInteger diameter; @end @@ -25,23 +27,32 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithContactId:(NSString *)contactId name:(NSString *)name contactsManager:(OWSContactsManager *)contactsManager +{ + const CGFloat kDefaultAvatarDiamater = 100; + return [self initWithContactId:contactId name:name contactsManager:contactsManager diameter:kDefaultAvatarDiamater]; +} + +- (instancetype)initWithContactId:(NSString *)contactId + name:(NSString *)name + contactsManager:(OWSContactsManager *)contactsManager + diameter:(NSUInteger)diameter { self = [super init]; if (!self) { return self; } - + _signalId = contactId; _contactName = name; _contactsManager = contactsManager; - + _diameter = diameter; + return self; } - -- (instancetype)initWithThread:(TSContactThread *)thread contactsManager:(OWSContactsManager *)contactsManager +- (instancetype)initWithThread:(TSContactThread *)thread contactsManager:(OWSContactsManager *)contactsManager diameter:(CGFloat)diameter { - return [self initWithContactId:thread.contactIdentifier name:thread.name contactsManager:contactsManager]; + return [self initWithContactId:thread.contactIdentifier name:thread.name contactsManager:contactsManager diameter:diameter]; } - (nullable UIImage *)buildSavedImage @@ -51,7 +62,8 @@ NS_ASSUME_NONNULL_BEGIN - (UIImage *)buildDefaultImage { - UIImage *cachedAvatar = [self.contactsManager.avatarCache objectForKey:self.signalId]; + NSString *cacheKey = [NSString stringWithFormat:@"signalId:%@:diamater:%lu", self.signalId, (unsigned long)self.diameter]; + UIImage *cachedAvatar = [self.contactsManager.avatarCache objectForKey:cacheKey]; if (cachedAvatar) { return cachedAvatar; } @@ -82,12 +94,13 @@ NS_ASSUME_NONNULL_BEGIN [initials appendString:@"#"]; } + CGFloat fontSize = (CGFloat)self.diameter / 2.8; UIColor *backgroundColor = [UIColor backgroundColorForContact:self.signalId]; UIImage *image = [[JSQMessagesAvatarImageFactory avatarImageWithUserInitials:initials backgroundColor:backgroundColor textColor:[UIColor whiteColor] - font:[UIFont ows_boldFontWithSize:36.0] - diameter:100] avatarImage]; + font:[UIFont ows_boldFontWithSize:fontSize] + diameter:self.diameter] avatarImage]; [self.contactsManager.avatarCache setObject:image forKey:self.signalId]; return image; } diff --git a/Signal/src/ViewControllers/CallViewController.swift b/Signal/src/ViewControllers/CallViewController.swift index f75f5be0a..51d489501 100644 --- a/Signal/src/ViewControllers/CallViewController.swift +++ b/Signal/src/ViewControllers/CallViewController.swift @@ -147,7 +147,7 @@ class CallViewController: UIViewController, CallObserver, CallServiceObserver, R createViews() contactNameLabel.text = contactsManager.displayName(forPhoneIdentifier: thread.contactIdentifier()) - contactAvatarView.image = OWSAvatarBuilder.buildImage(for: thread, contactsManager: contactsManager) + contactAvatarView.image = OWSAvatarBuilder.buildImage(for: thread, contactsManager: contactsManager, diameter:400) assert(call != nil) // Subscribe for future call updates