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