mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			105 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Objective-C
		
	
			
		
		
	
	
			105 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Objective-C
		
	
//
 | 
						|
//  Copyright (c) 2018 Open Whisper Systems. All rights reserved.
 | 
						|
//
 | 
						|
 | 
						|
#import "OWSAvatarBuilder.h"
 | 
						|
#import "JSQMessagesAvatarImageFactory.h"
 | 
						|
#import "OWSContactAvatarBuilder.h"
 | 
						|
#import "OWSGroupAvatarBuilder.h"
 | 
						|
#import "TSContactThread.h"
 | 
						|
#import "TSGroupThread.h"
 | 
						|
#import "UIColor+OWS.h"
 | 
						|
 | 
						|
NS_ASSUME_NONNULL_BEGIN
 | 
						|
 | 
						|
@implementation OWSAvatarBuilder
 | 
						|
 | 
						|
+ (UIImage *)buildImageForThread:(TSThread *)thread
 | 
						|
                        diameter:(NSUInteger)diameter
 | 
						|
                 contactsManager:(OWSContactsManager *)contactsManager
 | 
						|
{
 | 
						|
    OWSAssertDebug(thread);
 | 
						|
    OWSAssertDebug(contactsManager);
 | 
						|
 | 
						|
    OWSAvatarBuilder *avatarBuilder;
 | 
						|
    if ([thread isKindOfClass:[TSContactThread class]]) {
 | 
						|
        TSContactThread *contactThread = (TSContactThread *)thread;
 | 
						|
        NSString *colorName = thread.conversationColorName;
 | 
						|
        UIColor *color = [UIColor ows_conversationColorForColorName:colorName];
 | 
						|
        avatarBuilder = [[OWSContactAvatarBuilder alloc] initWithSignalId:contactThread.contactIdentifier
 | 
						|
                                                                    color:color
 | 
						|
                                                                 diameter:diameter
 | 
						|
                                                          contactsManager:contactsManager];
 | 
						|
    } else if ([thread isKindOfClass:[TSGroupThread class]]) {
 | 
						|
        avatarBuilder = [[OWSGroupAvatarBuilder alloc] initWithThread:(TSGroupThread *)thread];
 | 
						|
    } else {
 | 
						|
        OWSLogError(@"called with unsupported thread: %@", thread);
 | 
						|
    }
 | 
						|
    return [avatarBuilder build];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIImage *)buildRandomAvatarWithDiameter:(NSUInteger)diameter
 | 
						|
{
 | 
						|
    NSArray<NSString *> *eyes = @[ @":", @"=", @"8", @"B" ];
 | 
						|
    NSArray<NSString *> *mouths = @[ @"3", @")", @"(", @"|", @"\\", @"P", @"D", @"o" ];
 | 
						|
    // eyebrows are rare
 | 
						|
    NSArray<NSString *> *eyebrows = @[ @">", @"", @"", @"", @"" ];
 | 
						|
 | 
						|
    NSString *randomEye = eyes[arc4random_uniform((uint32_t)eyes.count)];
 | 
						|
    NSString *randomMouth = mouths[arc4random_uniform((uint32_t)mouths.count)];
 | 
						|
    NSString *randomEyebrow = eyebrows[arc4random_uniform((uint32_t)eyebrows.count)];
 | 
						|
    NSString *face = [NSString stringWithFormat:@"%@%@%@", randomEyebrow, randomEye, randomMouth];
 | 
						|
 | 
						|
    CGFloat fontSize = (CGFloat)(diameter / 2.4);
 | 
						|
 | 
						|
    UIImage *srcImage =
 | 
						|
        [[JSQMessagesAvatarImageFactory avatarImageWithUserInitials:face
 | 
						|
                                                    backgroundColor:[UIColor colorWithRGBHex:0xaca6633]
 | 
						|
                                                          textColor:[UIColor whiteColor]
 | 
						|
                                                               font:[UIFont boldSystemFontOfSize:fontSize]
 | 
						|
                                                           diameter:diameter] avatarImage];
 | 
						|
 | 
						|
    UIGraphicsBeginImageContext(srcImage.size);
 | 
						|
 | 
						|
    CGContextRef context = UIGraphicsGetCurrentContext();
 | 
						|
 | 
						|
    CGFloat width = srcImage.size.width;
 | 
						|
 | 
						|
    // Rotate
 | 
						|
    CGContextTranslateCTM(context, width / 2, width / 2);
 | 
						|
    CGContextRotateCTM(context, (CGFloat)M_PI_2);
 | 
						|
    CGContextTranslateCTM(context, -width / 2, -width / 2);
 | 
						|
 | 
						|
    [srcImage drawAtPoint:CGPointMake(0, 0)];
 | 
						|
 | 
						|
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
 | 
						|
    UIGraphicsEndImageContext();
 | 
						|
    return image;
 | 
						|
}
 | 
						|
 | 
						|
- (UIImage *)build
 | 
						|
{
 | 
						|
    UIImage *_Nullable savedImage = [self buildSavedImage];
 | 
						|
    if (savedImage) {
 | 
						|
        return savedImage;
 | 
						|
    } else {
 | 
						|
        return [self buildDefaultImage];
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
- (nullable UIImage *)buildSavedImage
 | 
						|
{
 | 
						|
    OWSAbstractMethod();
 | 
						|
    return nil;
 | 
						|
}
 | 
						|
 | 
						|
- (UIImage *)buildDefaultImage
 | 
						|
{
 | 
						|
    OWSAbstractMethod();
 | 
						|
    return [UIImage new];
 | 
						|
}
 | 
						|
 | 
						|
@end
 | 
						|
 | 
						|
NS_ASSUME_NONNULL_END
 |