2017-03-08 15:14:41 +00:00
|
|
|
/*
|
|
|
|
Copyright 2016 OpenMarket Ltd
|
|
|
|
Copyright 2017 Vector Creations Ltd
|
|
|
|
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
you may not use this file except in compliance with the License.
|
|
|
|
You may obtain a copy of the License at
|
|
|
|
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
See the License for the specific language governing permissions and
|
|
|
|
limitations under the License.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#import "RiotDesignValues.h"
|
|
|
|
|
2017-07-21 09:28:17 +00:00
|
|
|
NSString *const kRiotDesignValuesDidChangeThemeNotification = @"kRiotDesignValuesDidChangeThemeNotification";
|
|
|
|
|
|
|
|
UIColor *kRiotPrimaryBgColor;
|
|
|
|
UIColor *kRiotSecondaryBgColor;
|
|
|
|
UIColor *kRiotPrimaryTextColor;
|
|
|
|
UIColor *kRiotSecondaryTextColor;
|
2017-08-11 14:56:09 +00:00
|
|
|
UIColor *kRiotPlaceholderTextColor;
|
2017-07-21 09:28:17 +00:00
|
|
|
UIColor *kRiotTopicTextColor;
|
2017-08-11 14:56:09 +00:00
|
|
|
UIColor *kRiotSelectedBgColor;
|
2017-09-11 09:27:47 +00:00
|
|
|
UIColor *kRiotAuxiliaryColor;
|
|
|
|
UIColor *kRiotOverlayColor;
|
2017-09-11 20:37:00 +00:00
|
|
|
UIColor *kRiotKeyboardColor;
|
2017-07-21 09:28:17 +00:00
|
|
|
|
2017-08-11 14:56:09 +00:00
|
|
|
// Riot Colors
|
2017-03-08 15:14:41 +00:00
|
|
|
UIColor *kRiotColorGreen;
|
|
|
|
UIColor *kRiotColorLightGreen;
|
2017-05-11 08:22:18 +00:00
|
|
|
UIColor *kRiotColorLightOrange;
|
2017-03-08 15:14:41 +00:00
|
|
|
UIColor *kRiotColorSilver;
|
|
|
|
UIColor *kRiotColorPinkRed;
|
|
|
|
UIColor *kRiotColorRed;
|
2017-05-11 08:22:18 +00:00
|
|
|
UIColor *kRiotColorIndigo;
|
|
|
|
UIColor *kRiotColorOrange;
|
2017-03-08 15:14:41 +00:00
|
|
|
|
2017-08-11 14:56:09 +00:00
|
|
|
// Riot Background Colors
|
2017-07-21 09:28:17 +00:00
|
|
|
UIColor *kRiotBgColorWhite;
|
|
|
|
UIColor *kRiotBgColorBlack;
|
2017-11-22 02:55:11 +00:00
|
|
|
UIColor *kRiotBgColorOLEDBlack;
|
2017-07-21 09:28:17 +00:00
|
|
|
UIColor *kRiotColorLightGrey;
|
|
|
|
UIColor *kRiotColorLightBlack;
|
2017-09-11 20:37:00 +00:00
|
|
|
UIColor *kRiotColorLightKeyboard;
|
|
|
|
UIColor *kRiotColorDarkKeyboard;
|
2017-07-21 09:28:17 +00:00
|
|
|
|
2017-08-11 14:56:09 +00:00
|
|
|
// Riot Text Colors
|
2017-03-08 15:14:41 +00:00
|
|
|
UIColor *kRiotTextColorBlack;
|
|
|
|
UIColor *kRiotTextColorDarkGray;
|
|
|
|
UIColor *kRiotTextColorGray;
|
2017-07-21 09:28:17 +00:00
|
|
|
UIColor *kRiotTextColorWhite;
|
|
|
|
UIColor *kRiotTextColorDarkWhite;
|
2017-03-08 15:14:41 +00:00
|
|
|
|
|
|
|
NSInteger const kRiotRoomModeratorLevel = 50;
|
|
|
|
NSInteger const kRiotRoomAdminLevel = 100;
|
|
|
|
|
2017-07-21 09:28:17 +00:00
|
|
|
UIStatusBarStyle kRiotDesignStatusBarStyle = UIStatusBarStyleDefault;
|
2017-08-11 14:56:09 +00:00
|
|
|
UIBarStyle kRiotDesignSearchBarStyle = UIBarStyleDefault;
|
|
|
|
UIColor *kRiotDesignSearchBarTintColor = nil;
|
2017-07-21 09:28:17 +00:00
|
|
|
|
2017-11-22 02:55:11 +00:00
|
|
|
UIKeyboardAppearance kRiotKeyboard;
|
|
|
|
|
2017-03-08 15:14:41 +00:00
|
|
|
@implementation RiotDesignValues
|
|
|
|
|
2017-07-21 09:28:17 +00:00
|
|
|
+ (RiotDesignValues *)sharedInstance
|
|
|
|
{
|
|
|
|
static RiotDesignValues *sharedOnceInstance;
|
|
|
|
|
|
|
|
static dispatch_once_t onceToken;
|
|
|
|
dispatch_once(&onceToken, ^{
|
|
|
|
sharedOnceInstance = [[RiotDesignValues alloc] init];
|
|
|
|
});
|
|
|
|
|
|
|
|
return sharedOnceInstance;
|
|
|
|
}
|
|
|
|
|
2017-03-08 15:14:41 +00:00
|
|
|
+ (void)load
|
|
|
|
{
|
|
|
|
[super load];
|
|
|
|
|
|
|
|
// Load colors at the app load time for the life of the app
|
|
|
|
|
|
|
|
// Colors as defined by the design
|
2017-04-11 07:39:08 +00:00
|
|
|
kRiotColorGreen = UIColorFromRGB(0x62CE9C);
|
|
|
|
kRiotColorSilver = UIColorFromRGB(0xC7C7CC);
|
|
|
|
kRiotColorPinkRed = UIColorFromRGB(0xFF0064);
|
2017-03-08 15:14:41 +00:00
|
|
|
kRiotColorRed = UIColorFromRGB(0xFF4444);
|
2017-05-11 08:22:18 +00:00
|
|
|
kRiotColorIndigo = UIColorFromRGB(0xBD79CC);
|
|
|
|
kRiotColorOrange = UIColorFromRGB(0xF8A15F);
|
2017-03-08 15:14:41 +00:00
|
|
|
|
2017-07-21 09:28:17 +00:00
|
|
|
kRiotBgColorWhite = [UIColor whiteColor];
|
|
|
|
kRiotBgColorBlack = UIColorFromRGB(0x2D2D2D);
|
2017-11-22 02:55:11 +00:00
|
|
|
kRiotBgColorOLEDBlack = [UIColor blackColor];
|
2017-07-21 09:28:17 +00:00
|
|
|
|
|
|
|
kRiotColorLightGrey = UIColorFromRGB(0xF2F2F2);
|
|
|
|
kRiotColorLightBlack = UIColorFromRGB(0x353535);
|
2017-09-11 20:37:00 +00:00
|
|
|
|
|
|
|
kRiotColorLightKeyboard = UIColorFromRGB(0xE7E7E7);
|
|
|
|
kRiotColorDarkKeyboard = UIColorFromRGB(0x7E7E7E);
|
2017-07-21 09:28:17 +00:00
|
|
|
|
|
|
|
kRiotTextColorBlack = UIColorFromRGB(0x3C3C3C);
|
|
|
|
kRiotTextColorDarkGray = UIColorFromRGB(0x4A4A4A);
|
|
|
|
kRiotTextColorGray = UIColorFromRGB(0x9D9D9D);
|
|
|
|
kRiotTextColorWhite = UIColorFromRGB(0xDDDDDD);
|
|
|
|
kRiotTextColorDarkWhite = UIColorFromRGB(0xD9D9D9);
|
2017-03-08 15:14:41 +00:00
|
|
|
|
|
|
|
// Colors copied from Vector web
|
|
|
|
kRiotColorLightGreen = UIColorFromRGB(0x50e2c2);
|
2017-05-11 08:22:18 +00:00
|
|
|
kRiotColorLightOrange = UIColorFromRGB(0xf4c371);
|
2017-07-21 09:28:17 +00:00
|
|
|
|
2017-11-22 02:55:11 +00:00
|
|
|
kRiotKeyboard = UIKeyboardAppearanceLight;
|
|
|
|
|
2017-07-21 09:28:17 +00:00
|
|
|
// Observe user interface theme change.
|
|
|
|
[[NSUserDefaults standardUserDefaults] addObserver:[RiotDesignValues sharedInstance] forKeyPath:@"userInterfaceTheme" options:0 context:nil];
|
|
|
|
[[RiotDesignValues sharedInstance] userInterfaceThemeDidChange];
|
|
|
|
|
2017-09-21 13:29:46 +00:00
|
|
|
// Observe "Invert Colours" settings changes (available since iOS 11)
|
|
|
|
[[NSNotificationCenter defaultCenter] addObserver:[RiotDesignValues sharedInstance] selector:@selector(accessibilityInvertColorsStatusDidChange) name:UIAccessibilityInvertColorsStatusDidChangeNotification object:nil];
|
|
|
|
}
|
2017-07-21 09:28:17 +00:00
|
|
|
|
|
|
|
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
|
|
|
|
{
|
|
|
|
if ([@"userInterfaceTheme" isEqualToString:keyPath])
|
|
|
|
{
|
|
|
|
[self userInterfaceThemeDidChange];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-09-21 13:29:46 +00:00
|
|
|
- (void)accessibilityInvertColorsStatusDidChange
|
|
|
|
{
|
|
|
|
// Refresh the theme only for "auto"
|
|
|
|
NSString *theme = [[NSUserDefaults standardUserDefaults] stringForKey:@"userInterfaceTheme"];
|
|
|
|
if (!theme || [theme isEqualToString:@"auto"])
|
|
|
|
{
|
|
|
|
[self userInterfaceThemeDidChange];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-07-21 09:28:17 +00:00
|
|
|
- (void)userInterfaceThemeDidChange
|
|
|
|
{
|
2017-09-21 13:29:46 +00:00
|
|
|
// Retrieve the current selected theme ("light" if none. "auto" is used as default from iOS 11).
|
2017-07-21 09:28:17 +00:00
|
|
|
NSString *theme = [[NSUserDefaults standardUserDefaults] stringForKey:@"userInterfaceTheme"];
|
2017-09-21 13:29:46 +00:00
|
|
|
|
|
|
|
if (!theme || [theme isEqualToString:@"auto"])
|
|
|
|
{
|
|
|
|
theme = UIAccessibilityIsInvertColorsEnabled() ? @"dark" : @"light";
|
|
|
|
}
|
2017-07-21 09:28:17 +00:00
|
|
|
|
|
|
|
if ([theme isEqualToString:@"dark"])
|
|
|
|
{
|
|
|
|
// Set dark theme colors
|
|
|
|
kRiotPrimaryBgColor = kRiotBgColorBlack;
|
|
|
|
kRiotSecondaryBgColor = kRiotColorLightBlack;
|
|
|
|
kRiotPrimaryTextColor = kRiotTextColorWhite;
|
|
|
|
kRiotSecondaryTextColor = kRiotTextColorGray;
|
2017-08-11 14:56:09 +00:00
|
|
|
kRiotPlaceholderTextColor = [UIColor colorWithWhite:1.0 alpha:0.3];
|
2017-07-21 09:28:17 +00:00
|
|
|
kRiotTopicTextColor = kRiotTextColorDarkWhite;
|
2017-08-11 14:56:09 +00:00
|
|
|
kRiotSelectedBgColor = [UIColor blackColor];
|
2017-07-21 09:28:17 +00:00
|
|
|
|
|
|
|
kRiotDesignStatusBarStyle = UIStatusBarStyleLightContent;
|
2017-08-11 14:56:09 +00:00
|
|
|
kRiotDesignSearchBarStyle = UIBarStyleBlack;
|
|
|
|
kRiotDesignSearchBarTintColor = kRiotColorGreen;
|
2017-09-11 09:27:47 +00:00
|
|
|
|
|
|
|
kRiotAuxiliaryColor = kRiotTextColorGray;
|
|
|
|
kRiotOverlayColor = [UIColor colorWithWhite:0.3 alpha:0.5];
|
2017-09-11 20:37:00 +00:00
|
|
|
kRiotKeyboardColor = kRiotColorDarkKeyboard;
|
2017-11-22 02:55:11 +00:00
|
|
|
|
|
|
|
[UITextField appearance].keyboardAppearance = UIKeyboardAppearanceDark;
|
|
|
|
kRiotKeyboard = UIKeyboardAppearanceDark;
|
|
|
|
}
|
|
|
|
else if ([theme isEqualToString:@"black"])
|
|
|
|
{
|
|
|
|
// Set black theme colors
|
|
|
|
kRiotPrimaryBgColor = kRiotBgColorOLEDBlack;
|
|
|
|
kRiotSecondaryBgColor = kRiotColorLightBlack;
|
|
|
|
kRiotPrimaryTextColor = kRiotTextColorWhite;
|
|
|
|
kRiotSecondaryTextColor = kRiotTextColorGray;
|
|
|
|
kRiotPlaceholderTextColor = [UIColor colorWithWhite:1.0 alpha:0.3];
|
|
|
|
kRiotTopicTextColor = kRiotTextColorDarkWhite;
|
|
|
|
kRiotSelectedBgColor = [UIColor blackColor];
|
|
|
|
|
|
|
|
kRiotDesignStatusBarStyle = UIStatusBarStyleLightContent;
|
|
|
|
kRiotDesignSearchBarStyle = UIBarStyleBlack;
|
|
|
|
kRiotDesignSearchBarTintColor = kRiotColorGreen;
|
|
|
|
|
|
|
|
kRiotAuxiliaryColor = kRiotTextColorGray;
|
|
|
|
kRiotOverlayColor = [UIColor colorWithWhite:0.3 alpha:0.5];
|
|
|
|
kRiotKeyboardColor = kRiotColorDarkKeyboard;
|
|
|
|
|
|
|
|
[UITextField appearance].keyboardAppearance = UIKeyboardAppearanceDark;
|
|
|
|
kRiotKeyboard = UIKeyboardAppearanceDark;
|
2017-07-21 09:28:17 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// Set light theme colors by default.
|
|
|
|
kRiotPrimaryBgColor = kRiotBgColorWhite;
|
|
|
|
kRiotSecondaryBgColor = kRiotColorLightGrey;
|
|
|
|
kRiotPrimaryTextColor = kRiotTextColorBlack;
|
|
|
|
kRiotSecondaryTextColor = kRiotTextColorGray;
|
2017-08-11 14:56:09 +00:00
|
|
|
kRiotPlaceholderTextColor = nil; // Use default 70% gray color.
|
2017-07-21 09:28:17 +00:00
|
|
|
kRiotTopicTextColor = kRiotTextColorDarkGray;
|
2017-08-11 14:56:09 +00:00
|
|
|
kRiotSelectedBgColor = nil; // Use the default selection color.
|
2017-07-21 09:28:17 +00:00
|
|
|
|
|
|
|
kRiotDesignStatusBarStyle = UIStatusBarStyleDefault;
|
2017-08-11 14:56:09 +00:00
|
|
|
kRiotDesignSearchBarStyle = UIBarStyleDefault;
|
|
|
|
kRiotDesignSearchBarTintColor = nil; // Default tint color.
|
2017-09-11 09:27:47 +00:00
|
|
|
|
|
|
|
kRiotAuxiliaryColor = kRiotColorSilver;
|
|
|
|
kRiotOverlayColor = [UIColor colorWithWhite:0.7 alpha:0.5];
|
2017-09-11 20:37:00 +00:00
|
|
|
kRiotKeyboardColor = kRiotColorLightKeyboard;
|
2017-11-22 02:55:11 +00:00
|
|
|
|
|
|
|
[UITextField appearance].keyboardAppearance = UIKeyboardAppearanceLight;
|
|
|
|
kRiotKeyboard = UIKeyboardAppearanceLight;
|
2017-07-21 09:28:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
[[NSNotificationCenter defaultCenter] postNotificationName:kRiotDesignValuesDidChangeThemeNotification object:nil];
|
2017-03-08 15:14:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@end
|