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