1// Copyright 2015-present 650 Industries. All rights reserved. 2 3#import "EXAppLoader.h" 4#import "EXEnvironment.h" 5#import "EXFileDownloader.h" 6#import "EXHomeModuleManager.h" 7#import "EXManifestResource.h" 8#import "EXKernel.h" 9#import "EXKernelDevKeyCommands.h" 10#import "EXKernelDevMotionHandler.h" 11#import "EXKernelLinkingManager.h" 12#import "EXReactAppManager.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 [[EXKernel sharedInstance] reloadVisibleApp]; 63} 64 65- (void)homeModuleDidSelectCloseMenu:(EXHomeModule *)module 66{ 67 if ([EXKernel sharedInstance].browserController) { 68 dispatch_async(dispatch_get_main_queue(), ^{ 69 [[EXKernel sharedInstance].browserController setIsMenuVisible:NO completion:^{}]; 70 }); 71 } 72} 73 74- (void)homeModuleDidSelectGoToHome:(EXHomeModule *)module 75{ 76 if ([EXKernel sharedInstance].browserController) { 77 dispatch_async(dispatch_get_main_queue(), ^{ 78 [[EXKernel sharedInstance].browserController moveHomeToVisible]; 79 }); 80 } 81} 82 83- (void)homeModuleDidSelectQRReader:(EXHomeModule *)module 84{ 85 if ([EXKernel sharedInstance].browserController) { 86 [EXUtil performSynchronouslyOnMainThread:^{ 87 [[EXKernel sharedInstance].browserController showQRReader]; 88 }]; 89 } 90} 91 92- (void)homeModule:(__unused EXHomeModule *)module didOpenUrl:(NSString *)url 93{ 94 [[EXKernel sharedInstance].serviceRegistry.linkingManager openUrl:url isUniversalLink:NO]; 95} 96 97- (void)homeModule:(EXHomeModule *)homeModule didFinishNux:(BOOL)isNuxFinished 98{ 99 if ([EXKernel sharedInstance].browserController) { 100 [[EXKernel sharedInstance].browserController setIsNuxFinished:isNuxFinished]; 101 } 102} 103 104- (BOOL)homeModuleShouldFinishNux:(EXHomeModule *)homeModule 105{ 106 if ([EXKernel sharedInstance].browserController) { 107 return [[EXKernel sharedInstance].browserController isNuxFinished]; 108 } 109 return NO; 110} 111 112@end 113