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