1 @file:Suppress("RedundantVisibilityModifier")
2 
3 package com.facebook.react.devsupport
4 
5 import android.content.Context
6 import android.content.SharedPreferences
7 import com.facebook.react.modules.debug.interfaces.DeveloperSettings
8 import com.facebook.react.packagerconnection.PackagerConnectionSettings
9 import expo.modules.devmenu.react.DevMenuPackagerConnectionSettings
10 
11 /**
12  * Class representing react's internal [DevInternalSettings] class, which we want to replace to change [packagerConnectionSettings] and others settings.
13  * It is only use when [expo.modules.devmenu.DevMenuHost.getUseDeveloperSupport] returns true.
14  */
15 internal class DevMenuReactInternalSettings(
16   serverIp: String,
17   application: Context
<lambda>null18 ) : DevInternalSettings(application, {}) {
19   private val packagerConnectionSettings = DevMenuPackagerConnectionSettings(serverIp, application)
20 
isElementInspectorEnablednull21   override fun isElementInspectorEnabled() = false
22 
23   override fun isJSMinifyEnabled() = false
24 
25   override fun setRemoteJSDebugEnabled(remoteJSDebugEnabled: Boolean) = Unit
26 
27   override fun isJSDevModeEnabled() = true
28 
29   override fun isStartSamplingProfilerOnInit() = false
30 
31   override fun setElementInspectorEnabled(enabled: Boolean) = Unit
32 
33   override fun isAnimationFpsDebugEnabled() = false
34 
35   override fun setJSDevModeEnabled(value: Boolean) = Unit
36 
37   override fun setFpsDebugEnabled(enabled: Boolean) = Unit
38 
39   override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) = Unit
40 
41   override fun isRemoteJSDebugEnabled() = false
42 
43   override fun isHotModuleReplacementEnabled() = true
44 
45   override fun setHotModuleReplacementEnabled(enabled: Boolean) = Unit
46 
47   override fun addMenuItem(title: String?) = Unit
48 
49   override fun isFpsDebugEnabled() = false
50 
51   override fun getPackagerConnectionSettings() = packagerConnectionSettings
52 }
53 
54 /**
55  * A wrapper of [DevInternalSettings] allows us to access the package-private [DevInternalSettings] properties
56  */
57 internal class DevMenuInternalSettingsWrapper(private val devSettings: DevInternalSettings) {
58   constructor(developerSettings: DeveloperSettings) : this(developerSettings as DevInternalSettings)
59 
60   val isFpsDebugEnabled = devSettings.isFpsDebugEnabled
61   var isHotModuleReplacementEnabled: Boolean
62     get() = devSettings.isHotModuleReplacementEnabled
63     set(value) {
64       devSettings.isHotModuleReplacementEnabled = value
65     }
66 
67   var isRemoteJSDebugEnabled: Boolean
68     get() = devSettings.isRemoteJSDebugEnabled
69     set(value) {
70       devSettings.isRemoteJSDebugEnabled = value
71     }
72   val packagerConnectionSettings: PackagerConnectionSettings = devSettings.packagerConnectionSettings
73 }
74