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