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.
		
		
		
		
		
			
		
			
				
	
	
		
			360 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Objective-C
		
	
			
		
		
	
	
			360 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Objective-C
		
	
//
 | 
						|
//  Copyright (c) 2018 Open Whisper Systems. All rights reserved.
 | 
						|
//
 | 
						|
 | 
						|
#import "OWSConversationColor.h"
 | 
						|
#import "Theme.h"
 | 
						|
#import "UIColor+OWS.h"
 | 
						|
#import <SignalServiceKit/TSThread.h>
 | 
						|
 | 
						|
NS_ASSUME_NONNULL_BEGIN
 | 
						|
 | 
						|
@interface OWSConversationColor ()
 | 
						|
 | 
						|
@property (nonatomic) ConversationColorName name;
 | 
						|
@property (nonatomic) UIColor *primaryColor;
 | 
						|
@property (nonatomic) UIColor *shadeColor;
 | 
						|
@property (nonatomic) UIColor *tintColor;
 | 
						|
 | 
						|
@end
 | 
						|
 | 
						|
#pragma mark -
 | 
						|
 | 
						|
@implementation OWSConversationColor
 | 
						|
 | 
						|
+ (OWSConversationColor *)conversationColorWithName:(ConversationColorName)name
 | 
						|
                                       primaryColor:(UIColor *)primaryColor
 | 
						|
                                         shadeColor:(UIColor *)shadeColor
 | 
						|
                                          tintColor:(UIColor *)tintColor
 | 
						|
{
 | 
						|
    OWSConversationColor *instance = [OWSConversationColor new];
 | 
						|
    instance.name = name;
 | 
						|
    instance.primaryColor = primaryColor;
 | 
						|
    instance.shadeColor = shadeColor;
 | 
						|
    instance.tintColor = tintColor;
 | 
						|
    return instance;
 | 
						|
}
 | 
						|
 | 
						|
#pragma mark -
 | 
						|
 | 
						|
- (UIColor *)themeColor
 | 
						|
{
 | 
						|
    return Theme.isDarkThemeEnabled ? self.shadeColor : self.primaryColor;
 | 
						|
}
 | 
						|
 | 
						|
- (BOOL)isEqual:(id)other
 | 
						|
{
 | 
						|
    if (![other isKindOfClass:[OWSConversationColor class]]) {
 | 
						|
        return NO;
 | 
						|
    }
 | 
						|
    
 | 
						|
    OWSConversationColor *otherColor = (OWSConversationColor *)other;
 | 
						|
    return [self.name isEqual:otherColor.name];
 | 
						|
}
 | 
						|
 | 
						|
#pragma mark - Conversation Color (Primary)
 | 
						|
 | 
						|
+ (UIColor *)ows_crimsonColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0xCC163D];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_vermilionColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0xC73800];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_burlapColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x746C53];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_forestColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x3B7845];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_wintergreenColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x1C8260];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_tealColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x067589];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_blueColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x336BA3];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_indigoColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x5951C8];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_violetColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x862CAF];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_plumColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0xA23474];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_taupeColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x895D66];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_steelColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x6B6B78];
 | 
						|
}
 | 
						|
 | 
						|
#pragma mark - Conversation Colors (Tint)
 | 
						|
 | 
						|
+ (UIColor *)ows_crimsonTintColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0xEDA6AE];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_vermilionTintColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0xEBA78E];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_burlapTintColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0xC4B997];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_forestTintColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x8FCC9A];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_wintergreenTintColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x9BCFBD];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_tealTintColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0xA5CAD5];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_blueTintColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0xADC8E1];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_indigoTintColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0xC2C1E7];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_violetTintColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0xCDADDC];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_plumTintColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0xDCB2CA];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_taupeTintColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0xCFB5BB];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_steelTintColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0xBEBEC6];
 | 
						|
}
 | 
						|
 | 
						|
#pragma mark - Conversation Colors (Shade)
 | 
						|
 | 
						|
+ (UIColor *)ows_crimsonShadeColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x8A0F29];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_vermilionShadeColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x872600];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_burlapShadeColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x58513C];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_forestShadeColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x2B5934];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_wintergreenShadeColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x36544A];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_tealShadeColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x055968];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_blueShadeColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x285480];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_indigoShadeColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x4840A0];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_violetShadeColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x6B248A];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_plumShadeColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x881B5B];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_taupeShadeColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x6A4E54];
 | 
						|
}
 | 
						|
 | 
						|
+ (UIColor *)ows_steelShadeColor
 | 
						|
{
 | 
						|
    return [UIColor colorWithRGBHex:0x5A5A63];
 | 
						|
}
 | 
						|
 | 
						|
+ (NSArray<OWSConversationColor *> *)allConversationColors
 | 
						|
{
 | 
						|
    static NSArray<OWSConversationColor *> *allConversationColors;
 | 
						|
    static dispatch_once_t onceToken;
 | 
						|
 | 
						|
    dispatch_once(&onceToken, ^{
 | 
						|
        // Order here affects the order in the conversation color picker.
 | 
						|
        allConversationColors = @[
 | 
						|
            [OWSConversationColor conversationColorWithName:ConversationColorNameCrimson
 | 
						|
                                               primaryColor:self.ows_crimsonColor
 | 
						|
                                                 shadeColor:self.ows_crimsonShadeColor
 | 
						|
                                                  tintColor:self.ows_crimsonTintColor],
 | 
						|
            [OWSConversationColor conversationColorWithName:ConversationColorNameVermilion
 | 
						|
                                               primaryColor:self.ows_vermilionColor
 | 
						|
                                                 shadeColor:self.ows_vermilionShadeColor
 | 
						|
                                                  tintColor:self.ows_vermilionTintColor],
 | 
						|
            [OWSConversationColor conversationColorWithName:ConversationColorNameBurlap
 | 
						|
                                               primaryColor:self.ows_burlapColor
 | 
						|
                                                 shadeColor:self.ows_burlapShadeColor
 | 
						|
                                                  tintColor:self.ows_burlapTintColor],
 | 
						|
            [OWSConversationColor conversationColorWithName:ConversationColorNameForest
 | 
						|
                                               primaryColor:self.ows_forestColor
 | 
						|
                                                 shadeColor:self.ows_forestShadeColor
 | 
						|
                                                  tintColor:self.ows_forestTintColor],
 | 
						|
            [OWSConversationColor conversationColorWithName:ConversationColorNameWintergreen
 | 
						|
                                               primaryColor:self.ows_wintergreenColor
 | 
						|
                                                 shadeColor:self.ows_wintergreenShadeColor
 | 
						|
                                                  tintColor:self.ows_wintergreenTintColor],
 | 
						|
            [OWSConversationColor conversationColorWithName:ConversationColorNameTeal
 | 
						|
                                               primaryColor:self.ows_tealColor
 | 
						|
                                                 shadeColor:self.ows_tealShadeColor
 | 
						|
                                                  tintColor:self.ows_tealTintColor],
 | 
						|
            [OWSConversationColor conversationColorWithName:ConversationColorNameBlue
 | 
						|
                                               primaryColor:self.ows_blueColor
 | 
						|
                                                 shadeColor:self.ows_blueShadeColor
 | 
						|
                                                  tintColor:self.ows_blueTintColor],
 | 
						|
            [OWSConversationColor conversationColorWithName:ConversationColorNameIndigo
 | 
						|
                                               primaryColor:self.ows_indigoColor
 | 
						|
                                                 shadeColor:self.ows_indigoShadeColor
 | 
						|
                                                  tintColor:self.ows_indigoTintColor],
 | 
						|
            [OWSConversationColor conversationColorWithName:ConversationColorNameViolet
 | 
						|
                                               primaryColor:self.ows_violetColor
 | 
						|
                                                 shadeColor:self.ows_violetShadeColor
 | 
						|
                                                  tintColor:self.ows_violetTintColor],
 | 
						|
            [OWSConversationColor conversationColorWithName:ConversationColorNamePlum
 | 
						|
                                               primaryColor:self.ows_plumColor
 | 
						|
                                                 shadeColor:self.ows_plumShadeColor
 | 
						|
                                                  tintColor:self.ows_plumTintColor],
 | 
						|
            [OWSConversationColor conversationColorWithName:ConversationColorNameTaupe
 | 
						|
                                               primaryColor:self.ows_taupeColor
 | 
						|
                                                 shadeColor:self.ows_taupeShadeColor
 | 
						|
                                                  tintColor:self.ows_taupeTintColor],
 | 
						|
            [OWSConversationColor conversationColorWithName:ConversationColorNameSteel
 | 
						|
                                               primaryColor:self.ows_steelColor
 | 
						|
                                                 shadeColor:self.ows_steelShadeColor
 | 
						|
                                                  tintColor:self.ows_steelTintColor],
 | 
						|
        ];
 | 
						|
    });
 | 
						|
 | 
						|
    return allConversationColors;
 | 
						|
}
 | 
						|
 | 
						|
+ (NSDictionary<ConversationColorName, OWSConversationColor *> *)conversationColorMap
 | 
						|
{
 | 
						|
    static NSDictionary<ConversationColorName, OWSConversationColor *> *colorMap;
 | 
						|
    static dispatch_once_t onceToken;
 | 
						|
    dispatch_once(&onceToken, ^{
 | 
						|
        NSMutableDictionary<ConversationColorName, OWSConversationColor *> *mutableColorMap = [NSMutableDictionary new];
 | 
						|
        for (OWSConversationColor *conversationColor in self.allConversationColors) {
 | 
						|
            mutableColorMap[conversationColor.name] = conversationColor;
 | 
						|
        }
 | 
						|
        colorMap = [mutableColorMap copy];
 | 
						|
    });
 | 
						|
 | 
						|
    return colorMap;
 | 
						|
}
 | 
						|
 | 
						|
+ (NSArray<ConversationColorName> *)conversationColorNames
 | 
						|
{
 | 
						|
    NSMutableArray<ConversationColorName> *names = [NSMutableArray new];
 | 
						|
    for (OWSConversationColor *conversationColor in self.allConversationColors) {
 | 
						|
        [names addObject:conversationColor.name];
 | 
						|
    }
 | 
						|
#ifdef DEBUG
 | 
						|
    NSSet<ConversationColorName> *colorNameSet = [NSSet setWithArray:names];
 | 
						|
    // These constants are duplicated in two places. So this canary exists to make sure they stay in sync.
 | 
						|
    NSSet<ConversationColorName> *threadColorNameSet = [NSSet setWithArray:TSThread.conversationColorNames];
 | 
						|
    OWSAssertDebug([colorNameSet isEqual:threadColorNameSet]);
 | 
						|
#endif
 | 
						|
    return [names copy];
 | 
						|
}
 | 
						|
 | 
						|
+ (nullable OWSConversationColor *)conversationColorForColorName:(ConversationColorName)conversationColorName
 | 
						|
{
 | 
						|
    OWSConversationColor *_Nullable result = self.conversationColorMap[conversationColorName];
 | 
						|
 | 
						|
    // Any mapping to colorNames should be done in TSThread before this method is called.
 | 
						|
    OWSAssertDebug(result != nil);
 | 
						|
 | 
						|
    return result;
 | 
						|
}
 | 
						|
 | 
						|
+ (OWSConversationColor *)conversationColorOrDefaultForColorName:(ConversationColorName)conversationColorName
 | 
						|
{
 | 
						|
    OWSConversationColor *_Nullable conversationColor = [self conversationColorForColorName:conversationColorName];
 | 
						|
    if (conversationColor) {
 | 
						|
        return conversationColor;
 | 
						|
    }
 | 
						|
    return [self defaultConversationColor];
 | 
						|
}
 | 
						|
 | 
						|
+ (OWSConversationColor *)defaultConversationColor
 | 
						|
{
 | 
						|
    return [self conversationColorForColorName:kConversationColorName_Default];
 | 
						|
}
 | 
						|
 | 
						|
@end
 | 
						|
 | 
						|
NS_ASSUME_NONNULL_END
 |