From 7a4041cdde26f7a6281c3e19434bd5447912d4b8 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Wed, 20 Feb 2019 10:37:46 -0700 Subject: [PATCH] Cache dark theme preference This is a hot path --- SignalMessaging/appearance/Theme.m | 42 +++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/SignalMessaging/appearance/Theme.m b/SignalMessaging/appearance/Theme.m index b0d66e3bf..24c3bd54b 100644 --- a/SignalMessaging/appearance/Theme.m +++ b/SignalMessaging/appearance/Theme.m @@ -16,24 +16,60 @@ NSString *const ThemeDidChangeNotification = @"ThemeDidChangeNotification"; NSString *const ThemeCollection = @"ThemeCollection"; NSString *const ThemeKeyThemeEnabled = @"ThemeKeyThemeEnabled"; + +@interface Theme () + +@property (nonatomic) NSNumber *isDarkThemeEnabledNumber; + +@end + @implementation Theme ++ (instancetype)sharedInstance +{ + static dispatch_once_t onceToken; + static Theme *instance; + dispatch_once(&onceToken, ^{ + instance = [Theme new]; + }); + + return instance; +} + + (BOOL)isDarkThemeEnabled { + return [self.sharedInstance isDarkThemeEnabled]; +} + +- (BOOL)isDarkThemeEnabled +{ + OWSAssertIsOnMainThread(); + if (!CurrentAppContext().isMainApp) { // Ignore theme in app extensions. return NO; } - return [OWSPrimaryStorage.sharedManager.dbReadConnection boolForKey:ThemeKeyThemeEnabled - inCollection:ThemeCollection - defaultValue:NO]; + if (self.isDarkThemeEnabledNumber == nil) { + BOOL isDarkThemeEnabled = [OWSPrimaryStorage.sharedManager.dbReadConnection boolForKey:ThemeKeyThemeEnabled + inCollection:ThemeCollection + defaultValue:NO]; + self.isDarkThemeEnabledNumber = @(isDarkThemeEnabled); + } + + return self.isDarkThemeEnabledNumber.boolValue; } + (void)setIsDarkThemeEnabled:(BOOL)value +{ + return [self.sharedInstance setIsDarkThemeEnabled:value]; +} + +- (void)setIsDarkThemeEnabled:(BOOL)value { OWSAssertIsOnMainThread(); + self.isDarkThemeEnabledNumber = @(value); [OWSPrimaryStorage.sharedManager.dbReadWriteConnection setBool:value forKey:ThemeKeyThemeEnabled inCollection:ThemeCollection];