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