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.
393 lines
11 KiB
Objective-C
393 lines
11 KiB
Objective-C
//
|
|
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
|
//
|
|
|
|
#import "OWSConversationColor.h"
|
|
#import "Theme.h"
|
|
#import "UIColor+OWS.h"
|
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
@interface OWSConversationColor ()
|
|
|
|
@property (nonatomic) NSString *name;
|
|
@property (nonatomic) UIColor *primaryColor;
|
|
@property (nonatomic) UIColor *shadeColor;
|
|
@property (nonatomic) UIColor *tintColor;
|
|
|
|
@end
|
|
|
|
#pragma mark -
|
|
|
|
@implementation OWSConversationColor
|
|
|
|
+ (OWSConversationColor *)conversationColorWithName:(NSString *)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:@"crimson"
|
|
primaryColor:self.ows_crimsonColor
|
|
shadeColor:self.ows_crimsonShadeColor
|
|
tintColor:self.ows_crimsonTintColor],
|
|
[OWSConversationColor conversationColorWithName:@"vermilion"
|
|
primaryColor:self.ows_vermilionColor
|
|
shadeColor:self.ows_vermilionShadeColor
|
|
tintColor:self.ows_vermilionTintColor],
|
|
[OWSConversationColor conversationColorWithName:@"burlap"
|
|
primaryColor:self.ows_burlapColor
|
|
shadeColor:self.ows_burlapShadeColor
|
|
tintColor:self.ows_burlapTintColor],
|
|
[OWSConversationColor conversationColorWithName:@"forest"
|
|
primaryColor:self.ows_forestColor
|
|
shadeColor:self.ows_forestShadeColor
|
|
tintColor:self.ows_forestTintColor],
|
|
[OWSConversationColor conversationColorWithName:@"wintergreen"
|
|
primaryColor:self.ows_wintergreenColor
|
|
shadeColor:self.ows_wintergreenShadeColor
|
|
tintColor:self.ows_wintergreenTintColor],
|
|
[OWSConversationColor conversationColorWithName:@"teal"
|
|
primaryColor:self.ows_tealColor
|
|
shadeColor:self.ows_tealShadeColor
|
|
tintColor:self.ows_tealTintColor],
|
|
[OWSConversationColor conversationColorWithName:@"blue"
|
|
primaryColor:self.ows_blueColor
|
|
shadeColor:self.ows_blueShadeColor
|
|
tintColor:self.ows_blueTintColor],
|
|
[OWSConversationColor conversationColorWithName:@"indigo"
|
|
primaryColor:self.ows_indigoColor
|
|
shadeColor:self.ows_indigoShadeColor
|
|
tintColor:self.ows_indigoTintColor],
|
|
[OWSConversationColor conversationColorWithName:@"violet"
|
|
primaryColor:self.ows_violetColor
|
|
shadeColor:self.ows_violetShadeColor
|
|
tintColor:self.ows_violetTintColor],
|
|
[OWSConversationColor conversationColorWithName:@"plum"
|
|
primaryColor:self.ows_plumColor
|
|
shadeColor:self.ows_plumShadeColor
|
|
tintColor:self.ows_plumTintColor],
|
|
[OWSConversationColor conversationColorWithName:@"taupe"
|
|
primaryColor:self.ows_taupeColor
|
|
shadeColor:self.ows_taupeShadeColor
|
|
tintColor:self.ows_taupeTintColor],
|
|
[OWSConversationColor conversationColorWithName:@"steel"
|
|
primaryColor:self.ows_steelColor
|
|
shadeColor:self.ows_steelShadeColor
|
|
tintColor:self.ows_steelTintColor],
|
|
];
|
|
});
|
|
|
|
return allConversationColors;
|
|
}
|
|
|
|
+ (NSDictionary<NSString *, OWSConversationColor *> *)conversationColorMap
|
|
{
|
|
static NSDictionary<NSString *, OWSConversationColor *> *colorMap;
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^{
|
|
NSMutableDictionary<NSString *, OWSConversationColor *> *mutableColorMap = [NSMutableDictionary new];
|
|
for (OWSConversationColor *conversationColor in self.allConversationColors) {
|
|
mutableColorMap[conversationColor.name] = conversationColor;
|
|
}
|
|
colorMap = [mutableColorMap copy];
|
|
});
|
|
|
|
return colorMap;
|
|
}
|
|
|
|
+ (NSDictionary<NSString *, NSString *> *)ows_legacyConversationColorMap
|
|
{
|
|
static NSDictionary<NSString *, NSString *> *colorMap;
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^{
|
|
colorMap = @{
|
|
@"red" : @"crimson",
|
|
@"deep_orange" : @"crimson",
|
|
@"orange" : @"vermilion",
|
|
@"amber" : @"vermilion",
|
|
@"brown" : @"burlap",
|
|
@"yellow" : @"burlap",
|
|
@"pink" : @"plum",
|
|
@"purple" : @"violet",
|
|
@"deep_purple" : @"violet",
|
|
@"indigo" : @"indigo",
|
|
@"blue" : @"blue",
|
|
@"light_blue" : @"blue",
|
|
@"cyan" : @"teal",
|
|
@"teal" : @"teal",
|
|
@"green" : @"forest",
|
|
@"light_green" : @"wintergreen",
|
|
@"lime" : @"wintergreen",
|
|
@"blue_grey" : @"taupe",
|
|
@"grey" : @"steel",
|
|
};
|
|
});
|
|
|
|
return colorMap;
|
|
}
|
|
|
|
+ (NSArray<NSString *> *)conversationColorNames
|
|
{
|
|
NSMutableArray<NSString *> *names = [NSMutableArray new];
|
|
for (OWSConversationColor *conversationColor in self.allConversationColors) {
|
|
[names addObject:conversationColor.name];
|
|
}
|
|
return [names copy];
|
|
}
|
|
|
|
+ (nullable OWSConversationColor *)conversationColorForColorName:(NSString *)conversationColorName
|
|
{
|
|
NSString *_Nullable mappedColorName = self.ows_legacyConversationColorMap[conversationColorName.lowercaseString];
|
|
if (mappedColorName) {
|
|
conversationColorName = mappedColorName;
|
|
} else {
|
|
OWSAssertDebug(self.conversationColorMap[conversationColorName] != nil);
|
|
}
|
|
|
|
return self.conversationColorMap[conversationColorName];
|
|
}
|
|
|
|
+ (OWSConversationColor *)conversationColorOrDefaultForColorName:(NSString *)conversationColorName
|
|
{
|
|
OWSConversationColor *_Nullable conversationColor = [self conversationColorForColorName:conversationColorName];
|
|
if (conversationColor) {
|
|
return conversationColor;
|
|
}
|
|
return [self defaultConversationColor];
|
|
}
|
|
|
|
+ (NSString *)defaultConversationColorName
|
|
{
|
|
NSString *conversationColorName = @"steel";
|
|
OWSAssert([self.conversationColorNames containsObject:conversationColorName]);
|
|
return conversationColorName;
|
|
}
|
|
|
|
+ (OWSConversationColor *)defaultConversationColor
|
|
{
|
|
return [self conversationColorForColorName:self.defaultConversationColorName];
|
|
}
|
|
|
|
@end
|
|
|
|
NS_ASSUME_NONNULL_END
|