1// Copyright 2015-present 650 Industries. All rights reserved. 2 3#import "EXErrorRecoveryManager.h" 4#import "EXFileDownloader.h" 5#import "EXKernel.h" 6#import "EXKernelAppLoader.h" 7#import "EXKernelDevKeyCommands.h" 8#import "EXKernelDevMotionHandler.h" 9#import "EXKernelLinkingManager.h" 10#import "EXHomeModuleManager.h" 11#import "EXManifestResource.h" 12#import "EXReactAppManager.h" 13#import "EXShellManager.h" 14 15@implementation EXHomeModuleManager 16 17- (instancetype)init 18{ 19 if (self = [super init]) { 20 [EXKernelDevMotionHandler sharedInstance]; 21 [EXKernelDevKeyCommands sharedInstance]; 22 } 23 return self; 24} 25 26- (BOOL)homeModuleShouldEnableLegacyMenuBehavior:(EXHomeModule *)module 27{ 28 return [EXKernelDevKeyCommands sharedInstance].isLegacyMenuBehaviorEnabled; 29} 30 31- (void)homeModule:(EXHomeModule *)module didSelectEnableLegacyMenuBehavior:(BOOL)isEnabled 32{ 33 [EXKernelDevKeyCommands sharedInstance].isLegacyMenuBehaviorEnabled = isEnabled; 34} 35 36- (BOOL)homeModuleShouldEnableDevtools:(__unused EXHomeModule *)module 37{ 38 EXKernelAppRecord *visibleApp = [EXKernel sharedInstance].visibleApp; 39 return ( 40 visibleApp != [EXKernel sharedInstance].appRegistry.homeAppRecord && 41 [visibleApp.appManager enablesDeveloperTools] 42 ); 43 return NO; 44} 45 46- (NSDictionary<NSString *, NSString *> *)devMenuItemsForHomeModule:(EXHomeModule *)module 47{ 48 return [[EXKernel sharedInstance].visibleApp.appManager devMenuItems]; 49} 50 51- (void)homeModule:(EXHomeModule *)module didSelectDevMenuItemWithKey:(NSString *)key 52{ 53 [[EXKernel sharedInstance].visibleApp.appManager selectDevMenuItemWithKey:key]; 54 if ([EXKernel sharedInstance].browserController) { 55 dispatch_async(dispatch_get_main_queue(), ^{ 56 [[EXKernel sharedInstance].browserController toggleMenu]; 57 }); 58 } 59} 60 61- (void)homeModuleDidSelectRefresh:(EXHomeModule *)module 62{ 63 if ([EXKernel sharedInstance].browserController) { 64 dispatch_async(dispatch_get_main_queue(), ^{ 65 [[EXKernel sharedInstance].browserController refreshVisibleApp]; 66 }); 67 } 68} 69 70- (void)homeModuleDidSelectCloseMenu:(EXHomeModule *)module 71{ 72 if ([EXKernel sharedInstance].browserController) { 73 dispatch_async(dispatch_get_main_queue(), ^{ 74 [[EXKernel sharedInstance].browserController setIsMenuVisible:NO]; 75 }); 76 } 77} 78 79- (void)homeModuleDidSelectGoToHome:(EXHomeModule *)module 80{ 81 if ([EXKernel sharedInstance].browserController) { 82 dispatch_async(dispatch_get_main_queue(), ^{ 83 [[EXKernel sharedInstance].browserController moveHomeToVisible]; 84 }); 85 } 86} 87 88- (void)homeModuleDidSelectHomeDiagnostics:(__unused EXHomeModule *)module 89{ 90 if ([EXKernel sharedInstance].browserController) { 91 [EXUtil performSynchronouslyOnMainThread:^{ 92 [[EXKernel sharedInstance].browserController showDiagnostics]; 93 }]; 94 } 95} 96 97- (void)homeModuleDidSelectQRReader:(EXHomeModule *)module 98{ 99 if ([EXKernel sharedInstance].browserController) { 100 [EXUtil performSynchronouslyOnMainThread:^{ 101 [[EXKernel sharedInstance].browserController showQRReader]; 102 }]; 103 } 104} 105 106- (BOOL)homeModuleShouldAutoReloadCurrentTask:(EXHomeModule *)module 107{ 108 // TODO: ben: error recovery audit 109 NSString *visibleAppExperienceId = [EXKernel sharedInstance].visibleApp.experienceId; 110 return [[EXKernel sharedInstance].serviceRegistry.errorRecoveryManager experienceIdShouldReloadOnError:visibleAppExperienceId]; 111} 112 113- (void)homeModule:(__unused EXHomeModule *)module didOpenUrl:(NSString *)url 114{ 115 [[EXKernel sharedInstance].serviceRegistry.linkingManager openUrl:url isUniversalLink:NO]; 116} 117 118@end 119