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 146- (EXAudioSessionManager *)audioSessionManager 147{ 148 if (!_audioSessionManager) { 149 _audioSessionManager = [[EXAudioSessionManager alloc] init]; 150 } 151 return _audioSessionManager; 152} 153 154- (EXUpdatesManager *)updatesManager 155{ 156 if (!_updatesManager) { 157 _updatesManager = [[EXUpdatesManager alloc] init]; 158 } 159 return _updatesManager; 160} 161 162- (EXPermissionsManager *)permissionsManager 163{ 164 if (!_permissionsManager) { 165 _permissionsManager = [[EXPermissionsManager alloc] init]; 166 } 167 return _permissionsManager; 168} 169 170- (EXUtilService *)utilService 171{ 172 if (!_utilService) { 173 _utilService = [[EXUtilService alloc] init]; 174 } 175 return _utilService; 176} 177 178- (NSDictionary *)allServices 179{ 180 if (!_allServices) { 181 NSMutableDictionary *result = [NSMutableDictionary dictionary]; 182 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 ]) { 183 NSString *className = NSStringFromClass([service class]); 184 result[className] = service; 185 } 186 _allServices = result; 187 } 188 return _allServices; 189} 190 191#pragma mark - app registry delegate 192 193- (void)appRegistry:(EXKernelAppRegistry *)registry didRegisterAppRecord:(EXKernelAppRecord *)appRecord 194{ 195 [self.allServices enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull className, id _Nonnull service, BOOL * _Nonnull stop) { 196 if ([service respondsToSelector:@selector(kernelDidRegisterAppWithRecord:)]) { 197 [service kernelDidRegisterAppWithRecord:appRecord]; 198 } 199 }]; 200} 201 202- (void)appRegistry:(EXKernelAppRegistry *)registry willUnregisterAppRecord:(EXKernelAppRecord *)appRecord 203{ 204 [self.allServices enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull className, id _Nonnull service, BOOL * _Nonnull stop) { 205 if ([service respondsToSelector:@selector(kernelWillUnregisterAppWithRecord:)]) { 206 [service kernelWillUnregisterAppWithRecord:appRecord]; 207 } 208 }]; 209} 210 211@end 212