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