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