1// Copyright 2015-present 650 Industries. All rights reserved. 2 3#import "EXKernelServiceRegistry.h" 4#import "EXBranchManager.h" 5#import "EXCachedResourceManager.h" 6#import "EXErrorRecoveryManager.h" 7#import "EXFileSystemManager.h" 8#import "EXGoogleAuthManager.h" 9#import "EXHomeModuleManager.h" 10#import "EXKernelAppRegistry.h" 11#import "EXKernelLinkingManager.h" 12#import "EXKernelService.h" 13#import "EXRemoteNotificationManager.h" 14#import "EXScreenOrientationManager.h" 15#import "EXSensorManager.h" 16#import "EXAudioSessionManager.h" 17#import "EXUpdatesManager.h" 18#import "EXPermissionsManager.h" 19#import "EXUtilService.h" 20 21@interface EXKernelServiceRegistry () 22 23@property (nonatomic, strong) EXBranchManager *branchManager; 24@property (nonatomic, strong) EXCachedResourceManager *cachedResourceManager; 25@property (nonatomic, strong) EXFileSystemManager *fileSystemManager; 26@property (nonatomic, strong) EXGoogleAuthManager *googleAuthManager; 27@property (nonatomic, strong) EXErrorRecoveryManager *errorRecoveryManager; 28@property (nonatomic, strong) EXHomeModuleManager *homeModuleManager; 29@property (nonatomic, strong) EXKernelLinkingManager *linkingManager; 30@property (nonatomic, strong) EXRemoteNotificationManager *remoteNotificationManager; 31@property (nonatomic, strong) EXScreenOrientationManager *screenOrientationManager; 32@property (nonatomic, strong) EXSensorManager *sensorManager; 33@property (nonatomic, strong) EXAudioSessionManager *audioSessionManager; 34@property (nonatomic, strong) EXUpdatesManager *updatesManager; 35@property (nonatomic, strong) EXPermissionsManager *permissionsManager; 36@property (nonatomic, strong) EXUtilService *utilService; 37@property (nonatomic, strong) NSDictionary<NSString *, id> *allServices; 38 39@end 40 41@implementation EXKernelServiceRegistry 42 43- (instancetype)init 44{ 45 if (self = [super init]) { 46 // TODO: init these in some clean way 47 [self branchManager]; 48 [self cachedResourceManager]; 49 [self errorRecoveryManager]; 50 [self remoteNotificationManager]; 51 [self linkingManager]; 52 [self homeModuleManager]; 53 [self screenOrientationManager]; 54 [self googleAuthManager]; 55 [self sensorManager]; 56 [self fileSystemManager]; 57 [self audioSessionManager]; 58 [self updatesManager]; 59 [self permissionsManager]; 60 [self utilService]; 61 } 62 return self; 63} 64 65- (EXBranchManager *)branchManager 66{ 67 if (!_branchManager) { 68 _branchManager = [[EXBranchManager alloc] init]; 69 } 70 return _branchManager; 71} 72 73- (EXCachedResourceManager *)cachedResourceManager 74{ 75 if (!_cachedResourceManager) { 76 _cachedResourceManager = [[EXCachedResourceManager alloc] init]; 77 } 78 return _cachedResourceManager; 79} 80 81- (EXRemoteNotificationManager *)remoteNotificationManager 82{ 83 if (!_remoteNotificationManager) { 84 _remoteNotificationManager = [[EXRemoteNotificationManager alloc] init]; 85 } 86 return _remoteNotificationManager; 87} 88 89- (EXErrorRecoveryManager *)errorRecoveryManager 90{ 91 if (!_errorRecoveryManager) { 92 _errorRecoveryManager = [[EXErrorRecoveryManager alloc] init]; 93 } 94 return _errorRecoveryManager; 95} 96 97- (EXFileSystemManager *)fileSystemManager 98{ 99 if (!_fileSystemManager) { 100 _fileSystemManager = [[EXFileSystemManager alloc] init]; 101 } 102 return _fileSystemManager; 103} 104 105- (EXGoogleAuthManager *)googleAuthManager 106{ 107 if (!_googleAuthManager) { 108 _googleAuthManager = [[EXGoogleAuthManager alloc] init]; 109 } 110 return _googleAuthManager; 111} 112 113- (EXKernelLinkingManager *)linkingManager 114{ 115 if (!_linkingManager) { 116 _linkingManager = [[EXKernelLinkingManager alloc] init]; 117 } 118 return _linkingManager; 119} 120 121- (EXHomeModuleManager *)homeModuleManager 122{ 123 if (!_homeModuleManager) { 124 _homeModuleManager = [[EXHomeModuleManager alloc] init]; 125 } 126 return _homeModuleManager; 127} 128 129- (EXScreenOrientationManager *)screenOrientationManager 130{ 131 if (!_screenOrientationManager) { 132 _screenOrientationManager = [[EXScreenOrientationManager alloc] init]; 133 } 134 return _screenOrientationManager; 135} 136 137- (EXSensorManager *)sensorManager 138{ 139 if (!_sensorManager) { 140 _sensorManager = [[EXSensorManager alloc] init]; 141 } 142 return _sensorManager; 143} 144 145- (EXAudioSessionManager *)audioSessionManager 146{ 147 if (!_audioSessionManager) { 148 _audioSessionManager = [[EXAudioSessionManager alloc] init]; 149 } 150 return _audioSessionManager; 151} 152 153- (EXUpdatesManager *)updatesManager 154{ 155 if (!_updatesManager) { 156 _updatesManager = [[EXUpdatesManager alloc] init]; 157 } 158 return _updatesManager; 159} 160 161- (EXPermissionsManager *)permissionsManager 162{ 163 if (!_permissionsManager) { 164 _permissionsManager = [[EXPermissionsManager alloc] init]; 165 } 166 return _permissionsManager; 167} 168 169- (EXUtilService *)utilService 170{ 171 if (!_utilService) { 172 _utilService = [[EXUtilService alloc] init]; 173 } 174 return _utilService; 175} 176 177- (NSDictionary *)allServices 178{ 179 if (!_allServices) { 180 NSMutableDictionary *result = [NSMutableDictionary dictionary]; 181 for (id service in @[ self.branchManager, self.cachedResourceManager, self.errorRecoveryManager, self.fileSystemManager, self.googleAuthManager, self.homeModuleManager, self.linkingManager, self.remoteNotificationManager, self.screenOrientationManager, self.sensorManager, self.updatesManager, self.audioSessionManager, self.permissionsManager, self.utilService ]) { 182 NSString *className = NSStringFromClass([service class]); 183 result[className] = service; 184 } 185 _allServices = result; 186 } 187 return _allServices; 188} 189 190#pragma mark - app registry delegate 191 192- (void)appRegistry:(EXKernelAppRegistry *)registry didRegisterAppRecord:(EXKernelAppRecord *)appRecord 193{ 194 [self.allServices enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull className, id _Nonnull service, BOOL * _Nonnull stop) { 195 if ([service respondsToSelector:@selector(kernelDidRegisterAppWithRecord:)]) { 196 [service kernelDidRegisterAppWithRecord:appRecord]; 197 } 198 }]; 199} 200 201- (void)appRegistry:(EXKernelAppRegistry *)registry willUnregisterAppRecord:(EXKernelAppRecord *)appRecord 202{ 203 [self.allServices enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull className, id _Nonnull service, BOOL * _Nonnull stop) { 204 if ([service respondsToSelector:@selector(kernelWillUnregisterAppWithRecord:)]) { 205 [service kernelWillUnregisterAppWithRecord:appRecord]; 206 } 207 }]; 208} 209 210@end 211