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 "EXKernelLinkingManager.h" 10#import "EXReactAppManager.h" 11#import "EXDevMenuManager.h" 12 13@implementation EXHomeModuleManager 14 15// TODO: (@tsapeta) Move all of those dev menu methods out of here and make them independent of the kernel. 16 17- (BOOL)homeModuleShouldEnableDevtools:(__unused EXHomeModule *)module 18{ 19 EXKernelAppRecord *visibleApp = [EXKernel sharedInstance].visibleApp; 20 return ( 21 visibleApp != [EXKernel sharedInstance].appRegistry.homeAppRecord && 22 [visibleApp.appManager enablesDeveloperTools] 23 ); 24 return NO; 25} 26 27- (NSDictionary<NSString *, NSString *> *)devMenuItemsForHomeModule:(EXHomeModule *)module 28{ 29 return [[EXKernel sharedInstance].visibleApp.appManager devMenuItems]; 30} 31 32- (void)homeModule:(EXHomeModule *)module didSelectDevMenuItemWithKey:(NSString *)key 33{ 34 [[EXKernel sharedInstance].visibleApp.appManager selectDevMenuItemWithKey:key]; 35 [module requestToCloseDevMenu]; 36} 37 38- (void)homeModuleDidSelectRefresh:(EXHomeModule *)module 39{ 40 [[EXKernel sharedInstance] reloadVisibleApp]; 41 [module requestToCloseDevMenu]; 42} 43 44- (void)homeModuleDidSelectGoToHome:(EXHomeModule *)module 45{ 46 if ([EXKernel sharedInstance].browserController) { 47 dispatch_async(dispatch_get_main_queue(), ^{ 48 [[EXKernel sharedInstance].browserController moveHomeToVisible]; 49 }); 50 } 51 [module requestToCloseDevMenu]; 52} 53 54- (void)homeModuleDidSelectQRReader:(EXHomeModule *)module 55{ 56 if ([EXKernel sharedInstance].browserController) { 57 [EXUtil performSynchronouslyOnMainThread:^{ 58 [[EXKernel sharedInstance].browserController showQRReader]; 59 }]; 60 } 61} 62 63- (void)homeModule:(__unused EXHomeModule *)module didOpenUrl:(NSString *)url 64{ 65 [[EXKernel sharedInstance].serviceRegistry.linkingManager openUrl:url isUniversalLink:NO]; 66} 67 68- (void)homeModule:(EXHomeModule *)homeModule didFinishNux:(BOOL)isNuxFinished 69{ 70 if ([EXKernel sharedInstance].browserController) { 71 [[EXKernel sharedInstance].browserController setIsNuxFinished:isNuxFinished]; 72 } 73} 74 75- (BOOL)homeModuleShouldFinishNux:(EXHomeModule *)homeModule 76{ 77 if ([EXKernel sharedInstance].browserController) { 78 return [[EXKernel sharedInstance].browserController isNuxFinished]; 79 } 80 return NO; 81} 82 83@end 84