-
Notifications
You must be signed in to change notification settings - Fork 6
/
CBRReadabilityManager.m
85 lines (74 loc) · 3.06 KB
/
CBRReadabilityManager.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#import "CBRReadabilityManager.h"
static CFStringRef kUseLightTextNotification = CFSTR("ColorBanners_Readability_Light");
static CFStringRef kUseDarkTextNotification = CFSTR("ColorBanners_Readability_Dark");
static CFStringRef kPrefsAppID = CFSTR("com.golddavid.colorbanners");
static CFStringRef kPrefsUseDarkTextKey = CFSTR("Readability_UseDarkText");
@implementation CBRReadabilityManager
static void callBack(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object,
CFDictionaryRef userInfo) {
CBRReadabilityManager *self = (CBRReadabilityManager *)observer;
NSString *notificationName = (NSString *)name;
self.shouldUseDarkText = [notificationName isEqualToString:(NSString *)kUseDarkTextNotification];
}
static void notify(BOOL useDarkText) {
CFStringRef notification = (useDarkText) ? kUseDarkTextNotification : kUseLightTextNotification;
CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(),
notification,
NULL,
NULL,
true);
}
+ (instancetype)sharedInstance {
static dispatch_once_t predicate;
static CBRReadabilityManager *manager;
dispatch_once(&predicate, ^{ manager = [[CBRReadabilityManager alloc] init]; });
return manager;
}
- (instancetype)init {
self = [super init];
if (self) {
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(),
self,
&callBack,
kUseDarkTextNotification,
NULL,
0);
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(),
self,
&callBack,
kUseLightTextNotification,
NULL,
0);
[self refresh];
}
return self;
}
- (void)setShouldUseDarkText:(BOOL)useDarkText {
if (_shouldUseDarkText != useDarkText) {
_shouldUseDarkText = useDarkText;
[self.delegate managersReadabilityStateDidChange:self];
}
}
- (void)dealloc {
CFNotificationCenterRemoveEveryObserver(CFNotificationCenterGetDarwinNotifyCenter(), self);
[super dealloc];
}
- (void)refresh {
CFPreferencesAppSynchronize(kPrefsAppID);
Boolean keyExists = false;
Boolean useDarkText = CFPreferencesGetAppBooleanValue(kPrefsUseDarkTextKey,
kPrefsAppID,
&keyExists);
if (keyExists) {
self.shouldUseDarkText = (BOOL)useDarkText;
}
}
- (void)setShouldUseDarkTextAndSynchronize:(BOOL)useDarkText {
if (_shouldUseDarkText != useDarkText) {
_shouldUseDarkText = useDarkText;
CFPreferencesSetAppValue(kPrefsUseDarkTextKey, @(useDarkText), kPrefsAppID);
CFPreferencesAppSynchronize(kPrefsAppID);
notify(useDarkText);
}
}
@end