1 // Copyright 2015-present 650 Industries. All rights reserved. 2 3 import Foundation 4 5 class DevMenuDevOptionsDelegate { 6 internal private(set) weak var bridge: RCTBridge? 7 internal private(set) weak var devSettings: RCTDevSettings? 8 9 #if DEBUG 10 internal private(set) weak var perfMonitor: RCTPerfMonitor? 11 #endif 12 13 internal init(forBridge bridge: RCTBridge) { 14 self.bridge = bridge 15 devSettings = bridge.module(forName: "DevSettings") as? RCTDevSettings 16 17 #if DEBUG 18 perfMonitor = bridge.module(forName: "PerfMonitor") as? RCTPerfMonitor 19 #endif 20 } 21 22 internal func reload() { 23 // Without this the `expo-splash-screen` will reject 24 // No native splash screen registered for given view controller. Call 'SplashScreen.show' for given view controller first. 25 DevMenuManager.shared.hideMenu(); 26 27 bridge?.requestReload() 28 } 29 30 internal func toggleElementInsector() { 31 devSettings?.toggleElementInspector() 32 } 33 34 internal func toggleRemoteDebugging() { 35 guard let devSettings = devSettings else { 36 return 37 } 38 39 DispatchQueue.main.async { 40 devSettings.isDebuggingRemotely = !devSettings.isDebuggingRemotely 41 } 42 } 43 44 internal func togglePerformanceMonitor() { 45 #if DEBUG 46 guard let perfMonitor = perfMonitor else { 47 return 48 } 49 50 guard let devSettings = devSettings else { 51 return 52 } 53 54 DispatchQueue.main.async { 55 devSettings.isPerfMonitorShown ? perfMonitor.hide() : perfMonitor.show() 56 devSettings.isPerfMonitorShown = !devSettings.isPerfMonitorShown 57 } 58 #endif 59 } 60 61 internal func toggleFastRefresh() { 62 guard let devSettings = devSettings else { 63 return 64 } 65 66 devSettings.isHotLoadingEnabled = !devSettings.isHotLoadingEnabled 67 } 68 } 69