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 "EXKernelDevMotionHandler.h"
10#import "EXKernelLinkingManager.h"
11#import "EXReactAppManager.h"
12
13@implementation EXHomeModuleManager
14
15- (instancetype)init
16{
17  if (self = [super init]) {
18    [EXKernelDevMotionHandler sharedInstance];
19  }
20  return self;
21}
22
23- (BOOL)homeModuleShouldEnableDevtools:(__unused EXHomeModule *)module
24{
25  EXKernelAppRecord *visibleApp = [EXKernel sharedInstance].visibleApp;
26  return (
27    visibleApp != [EXKernel sharedInstance].appRegistry.homeAppRecord &&
28    [visibleApp.appManager enablesDeveloperTools]
29  );
30  return NO;
31}
32
33- (NSDictionary<NSString *, NSString *> *)devMenuItemsForHomeModule:(EXHomeModule *)module
34{
35  return [[EXKernel sharedInstance].visibleApp.appManager devMenuItems];
36}
37
38- (void)homeModule:(EXHomeModule *)module didSelectDevMenuItemWithKey:(NSString *)key
39{
40  [[EXKernel sharedInstance].visibleApp.appManager selectDevMenuItemWithKey:key];
41  [module requestToCloseDevMenu];
42}
43
44- (void)homeModuleDidSelectRefresh:(EXHomeModule *)module
45{
46  [[EXKernel sharedInstance] reloadVisibleApp];
47  [module requestToCloseDevMenu];
48}
49
50- (void)homeModuleDidSelectCloseMenu:(EXHomeModule *)module
51{
52  if ([EXKernel sharedInstance].browserController) {
53    dispatch_async(dispatch_get_main_queue(), ^{
54      [[EXKernel sharedInstance].browserController setIsMenuVisible:NO completion:^{}];
55    });
56  }
57}
58
59- (void)homeModuleDidSelectGoToHome:(EXHomeModule *)module
60{
61  if ([EXKernel sharedInstance].browserController) {
62    dispatch_async(dispatch_get_main_queue(), ^{
63      [[EXKernel sharedInstance].browserController moveHomeToVisible];
64    });
65  }
66  [module requestToCloseDevMenu];
67}
68
69- (void)homeModuleDidSelectQRReader:(EXHomeModule *)module
70{
71  if ([EXKernel sharedInstance].browserController) {
72    [EXUtil performSynchronouslyOnMainThread:^{
73      [[EXKernel sharedInstance].browserController showQRReader];
74    }];
75  }
76}
77
78- (void)homeModule:(__unused EXHomeModule *)module didOpenUrl:(NSString *)url
79{
80  [[EXKernel sharedInstance].serviceRegistry.linkingManager openUrl:url isUniversalLink:NO];
81}
82
83- (void)homeModule:(EXHomeModule *)homeModule didFinishNux:(BOOL)isNuxFinished
84{
85  if ([EXKernel sharedInstance].browserController) {
86    [[EXKernel sharedInstance].browserController setIsNuxFinished:isNuxFinished];
87  }
88}
89
90- (BOOL)homeModuleShouldFinishNux:(EXHomeModule *)homeModule
91{
92  if ([EXKernel sharedInstance].browserController) {
93    return [[EXKernel sharedInstance].browserController isNuxFinished];
94  }
95  return NO;
96}
97
98@end
99