Build higher res avatar for call screen

Initials avatar looks blurry on call screen

// FREEBIE
pull/1/head
Michael Kirk 8 years ago
parent b11f8affa7
commit 19d74d91e0

@ -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 NS_ASSUME_NONNULL_BEGIN
@ -10,6 +11,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface OWSAvatarBuilder : NSObject @interface OWSAvatarBuilder : NSObject
+ (UIImage *)buildImageForThread:(TSThread *)thread contactsManager:(OWSContactsManager *)contactsManager; + (UIImage *)buildImageForThread:(TSThread *)thread contactsManager:(OWSContactsManager *)contactsManager;
+ (UIImage *)buildImageForThread:(TSThread *)thread contactsManager:(OWSContactsManager *)contactsManager diameter:(CGFloat)diameter;
- (nullable UIImage *)buildSavedImage; - (nullable UIImage *)buildSavedImage;
- (UIImage *)buildDefaultImage; - (UIImage *)buildDefaultImage;

@ -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 "OWSAvatarBuilder.h"
#import "OWSContactAvatarBuilder.h" #import "OWSContactAvatarBuilder.h"
@ -12,11 +13,16 @@ NS_ASSUME_NONNULL_BEGIN
@implementation OWSAvatarBuilder @implementation OWSAvatarBuilder
+ (UIImage *)buildImageForThread:(TSThread *)thread contactsManager:(OWSContactsManager *)contactsManager + (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; OWSAvatarBuilder *avatarBuilder;
if ([thread isKindOfClass:[TSContactThread class]]) { if ([thread isKindOfClass:[TSContactThread class]]) {
avatarBuilder = avatarBuilder = [[OWSContactAvatarBuilder alloc] initWithThread:(TSContactThread *)thread contactsManager:contactsManager diameter:diameter];
[[OWSContactAvatarBuilder alloc] initWithThread:(TSContactThread *)thread contactsManager:contactsManager];
} else if ([thread isKindOfClass:[TSGroupThread class]]) { } else if ([thread isKindOfClass:[TSGroupThread class]]) {
avatarBuilder = [[OWSGroupAvatarBuilder alloc] initWithThread:(TSGroupThread *)thread]; avatarBuilder = [[OWSGroupAvatarBuilder alloc] initWithThread:(TSGroupThread *)thread];
} else { } else {

@ -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" #import "OWSAvatarBuilder.h"
@ -14,6 +15,15 @@ NS_ASSUME_NONNULL_BEGIN
name:(NSString *)name name:(NSString *)name
contactsManager:(OWSContactsManager *)contactsManager; 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; - (instancetype)initWithThread:(TSContactThread *)thread contactsManager:(OWSContactsManager *)contactsManager;
@end @end

@ -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 "OWSContactAvatarBuilder.h"
#import "OWSContactsManager.h" #import "OWSContactsManager.h"
@ -17,6 +18,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, readonly) OWSContactsManager *contactsManager; @property (nonatomic, readonly) OWSContactsManager *contactsManager;
@property (nonatomic, readonly) NSString *signalId; @property (nonatomic, readonly) NSString *signalId;
@property (nonatomic, readonly) NSString *contactName; @property (nonatomic, readonly) NSString *contactName;
@property (nonatomic, readonly) NSUInteger diameter;
@end @end
@ -25,23 +27,32 @@ NS_ASSUME_NONNULL_BEGIN
- (instancetype)initWithContactId:(NSString *)contactId - (instancetype)initWithContactId:(NSString *)contactId
name:(NSString *)name name:(NSString *)name
contactsManager:(OWSContactsManager *)contactsManager 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]; self = [super init];
if (!self) { if (!self) {
return self; return self;
} }
_signalId = contactId; _signalId = contactId;
_contactName = name; _contactName = name;
_contactsManager = contactsManager; _contactsManager = contactsManager;
_diameter = diameter;
return self; return self;
} }
- (instancetype)initWithThread:(TSContactThread *)thread contactsManager:(OWSContactsManager *)contactsManager diameter:(CGFloat)diameter
- (instancetype)initWithThread:(TSContactThread *)thread contactsManager:(OWSContactsManager *)contactsManager
{ {
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 - (nullable UIImage *)buildSavedImage
@ -51,7 +62,8 @@ NS_ASSUME_NONNULL_BEGIN
- (UIImage *)buildDefaultImage - (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) { if (cachedAvatar) {
return cachedAvatar; return cachedAvatar;
} }
@ -82,12 +94,13 @@ NS_ASSUME_NONNULL_BEGIN
[initials appendString:@"#"]; [initials appendString:@"#"];
} }
CGFloat fontSize = (CGFloat)self.diameter / 2.8;
UIColor *backgroundColor = [UIColor backgroundColorForContact:self.signalId]; UIColor *backgroundColor = [UIColor backgroundColorForContact:self.signalId];
UIImage *image = [[JSQMessagesAvatarImageFactory avatarImageWithUserInitials:initials UIImage *image = [[JSQMessagesAvatarImageFactory avatarImageWithUserInitials:initials
backgroundColor:backgroundColor backgroundColor:backgroundColor
textColor:[UIColor whiteColor] textColor:[UIColor whiteColor]
font:[UIFont ows_boldFontWithSize:36.0] font:[UIFont ows_boldFontWithSize:fontSize]
diameter:100] avatarImage]; diameter:self.diameter] avatarImage];
[self.contactsManager.avatarCache setObject:image forKey:self.signalId]; [self.contactsManager.avatarCache setObject:image forKey:self.signalId];
return image; return image;
} }

@ -147,7 +147,7 @@ class CallViewController: UIViewController, CallObserver, CallServiceObserver, R
createViews() createViews()
contactNameLabel.text = contactsManager.displayName(forPhoneIdentifier: thread.contactIdentifier()) 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) assert(call != nil)
// Subscribe for future call updates // Subscribe for future call updates

Loading…
Cancel
Save