1 // Copyright 2015-present 650 Industries. All rights reserved.
2 
3 @objc(DevMenuInternalModule)
4 public class DevMenuInternalModule: NSObject, RCTBridgeModule {
5   public static func moduleName() -> String! {
6     return "ExpoDevMenuInternal"
7   }
8 
9   let manager: DevMenuManager
10 
11   init(manager: DevMenuManager) {
12     self.manager = manager
13   }
14 
15   // MARK: JavaScript API
16 
17   @objc
18   func dispatchActionAsync(_ actionId: String, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
19     if actionId == nil {
20       return reject("ERR_DEVMENU_ACTION_FAILED", "Action ID not provided.", nil)
21     }
22     manager.dispatchAction(withId: actionId)
23     resolve(nil)
24   }
25 
26   @objc
27   func hideMenu() {
28     manager.hideMenu()
29   }
30 
31   @objc
32   func setOnboardingFinished(_ finished: Bool) {
33     DevMenuSettings.isOnboardingFinished = finished
34   }
35 
36   @objc
37   func getSettingsAsync(_ resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
38     resolve(DevMenuSettings.serialize())
39   }
40 
41   @objc
42   func setSettingsAsync(_ dict: [String: Any], resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
43     if let motionGestureEnabled = dict["motionGestureEnabled"] as? Bool {
44       DevMenuSettings.motionGestureEnabled = motionGestureEnabled
45     }
46     if let touchGestureEnabled = dict["touchGestureEnabled"] as? Bool {
47       DevMenuSettings.touchGestureEnabled = touchGestureEnabled
48     }
49     if let keyCommandsEnabled = dict["keyCommandsEnabled"] as? Bool {
50       DevMenuSettings.keyCommandsEnabled = keyCommandsEnabled
51     }
52     if let showsAtLaunch = dict["showsAtLaunch"] as? Bool {
53       DevMenuSettings.showsAtLaunch = showsAtLaunch
54     }
55   }
56 }
57