Skip to content

Commit 95a2b75

Browse files
coadofacebook-github-bot
authored andcommitted
Android: Add new configuration for DevSupportManager (#53557)
Summary: Following the [RFC](react-native-community/discussions-and-proposals#925), this PR adds new `DevMenuConfiguration` object and extends `ReactHost` API for passing settings to the particular `DevSupportManager`. The `DevMenuConfiguration` includes: - isDevMenuEnabled, - isShakeGestureEnabled, - areKeyboardShortcutsEnabled, ## Changelog: [ANDROID][ADDED] - Add new configuration for `RCTDevMenu` Test Plan: Tested with different configuration on `DevMenuConfiguration`: <details> <summary>Click to view code</summary> ```kt override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) fullyDrawnReporter.addReporter() maybeUpdateBackgroundColor() reactDelegate?.reactHost?.let { reactHost -> val devMenuConfiguration = DevMenuConfiguration( isDevMenuEnabled = true, isShakeGestureEnabled = false, areKeyboardShortcutsEnabled = false, ) reactHost.setDevMenuConfiguration(devMenuConfiguration) } // register insets listener to update margins on the ReactRootView to avoid overlap w/ system // bars reactDelegate?.reactRootView?.let { rootView -> val insetsType: Int = WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.displayCutout() val windowInsetsListener = { view: View, windowInsets: WindowInsetsCompat -> val insets = windowInsets.getInsets(insetsType) (view.layoutParams as FrameLayout.LayoutParams).apply { setMargins(insets.left, insets.top, insets.right, insets.bottom) } WindowInsetsCompat.CONSUMED } ViewCompat.setOnApplyWindowInsetsListener(rootView, windowInsetsListener) } } ``` </details> Differential Revision: D81684310 Pulled By: coado
1 parent 7d73d39 commit 95a2b75

File tree

9 files changed

+135
-9
lines changed

9 files changed

+135
-9
lines changed

packages/react-native/ReactAndroid/api/ReactAndroid.api

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,7 @@ public abstract interface class com/facebook/react/ReactHost {
244244
public abstract fun reload (Ljava/lang/String;)Lcom/facebook/react/interfaces/TaskInterface;
245245
public abstract fun removeBeforeDestroyListener (Lkotlin/jvm/functions/Function0;)V
246246
public abstract fun removeReactInstanceEventListener (Lcom/facebook/react/ReactInstanceEventListener;)V
247+
public fun setDevMenuConfiguration (Lcom/facebook/react/devsupport/DevMenuConfiguration;)V
247248
public abstract fun start ()Lcom/facebook/react/interfaces/TaskInterface;
248249
}
249250

@@ -1899,6 +1900,23 @@ public final class com/facebook/react/devsupport/DefaultDevLoadingViewImplementa
18991900
public final fun setDevLoadingEnabled (Z)V
19001901
}
19011902

1903+
public final class com/facebook/react/devsupport/DevMenuConfiguration {
1904+
public fun <init> ()V
1905+
public fun <init> (ZZZ)V
1906+
public synthetic fun <init> (ZZZILkotlin/jvm/internal/DefaultConstructorMarker;)V
1907+
public final fun component1 ()Z
1908+
public final fun component2 ()Z
1909+
public final fun component3 ()Z
1910+
public final fun copy (ZZZ)Lcom/facebook/react/devsupport/DevMenuConfiguration;
1911+
public static synthetic fun copy$default (Lcom/facebook/react/devsupport/DevMenuConfiguration;ZZZILjava/lang/Object;)Lcom/facebook/react/devsupport/DevMenuConfiguration;
1912+
public fun equals (Ljava/lang/Object;)Z
1913+
public final fun getAreKeyboardShortcutsEnabled ()Z
1914+
public fun hashCode ()I
1915+
public final fun isDevMenuEnabled ()Z
1916+
public final fun isShakeGestureEnabled ()Z
1917+
public fun toString ()Ljava/lang/String;
1918+
}
1919+
19021920
public class com/facebook/react/devsupport/DevServerHelper {
19031921
public fun <init> (Lcom/facebook/react/modules/debug/interfaces/DeveloperSettings;Landroid/content/Context;Lcom/facebook/react/packagerconnection/PackagerConnectionSettings;)V
19041922
public final fun closeInspectorConnection ()V
@@ -1940,17 +1958,20 @@ public abstract class com/facebook/react/devsupport/DevSupportManagerBase : com/
19401958
public fun getCurrentActivity ()Landroid/app/Activity;
19411959
public final fun getCurrentReactContext ()Lcom/facebook/react/bridge/ReactContext;
19421960
public final fun getDevLoadingViewManager ()Lcom/facebook/react/devsupport/interfaces/DevLoadingViewManager;
1961+
public fun getDevMenuEnabled ()Z
19431962
public final fun getDevServerHelper ()Lcom/facebook/react/devsupport/DevServerHelper;
19441963
public final fun getDevSettings ()Lcom/facebook/react/modules/debug/interfaces/DeveloperSettings;
19451964
public final fun getDevSupportEnabled ()Z
19461965
public fun getDownloadedJSBundleFile ()Ljava/lang/String;
19471966
public final fun getJSAppBundleName ()Ljava/lang/String;
1967+
public fun getKeyboardShortcutsEnabled ()Z
19481968
public final fun getLastErrorCookie ()I
19491969
public final fun getLastErrorStack ()[Lcom/facebook/react/devsupport/interfaces/StackFrame;
19501970
public final fun getLastErrorTitle ()Ljava/lang/String;
19511971
public final fun getLastErrorType ()Lcom/facebook/react/devsupport/interfaces/ErrorType;
19521972
public final fun getReactInstanceDevHelper ()Lcom/facebook/react/devsupport/ReactInstanceDevHelper;
19531973
public fun getRedBoxHandler ()Lcom/facebook/react/devsupport/interfaces/RedBoxHandler;
1974+
public final fun getShakeGestureEnabled ()Z
19541975
public fun getSourceMapUrl ()Ljava/lang/String;
19551976
public fun getSourceUrl ()Ljava/lang/String;
19561977
protected abstract fun getUniqueTag ()Ljava/lang/String;
@@ -1969,14 +1990,17 @@ public abstract class com/facebook/react/devsupport/DevSupportManagerBase : com/
19691990
public fun reloadSettings ()V
19701991
public fun setAdditionalOptionForPackager (Ljava/lang/String;Ljava/lang/String;)V
19711992
public final fun setDevLoadingViewManager (Lcom/facebook/react/devsupport/interfaces/DevLoadingViewManager;)V
1993+
public fun setDevMenuEnabled (Z)V
19721994
public final fun setDevSupportEnabled (Z)V
19731995
public fun setFpsDebugEnabled (Z)V
19741996
public fun setHotModuleReplacementEnabled (Z)V
1997+
public fun setKeyboardShortcutsEnabled (Z)V
19751998
public final fun setLastErrorCookie (I)V
19761999
public final fun setLastErrorStack ([Lcom/facebook/react/devsupport/interfaces/StackFrame;)V
19772000
public final fun setLastErrorTitle (Ljava/lang/String;)V
19782001
public final fun setLastErrorType (Lcom/facebook/react/devsupport/interfaces/ErrorType;)V
19792002
public fun setPackagerLocationCustomizer (Lcom/facebook/react/devsupport/interfaces/DevSupportManager$PackagerLocationCustomizer;)V
2003+
public final fun setShakeGestureEnabled (Z)V
19802004
protected final fun showDevLoadingViewForRemoteJSEnabled ()V
19812005
public fun showDevOptionsDialog ()V
19822006
public fun showNewJSError (Ljava/lang/String;Lcom/facebook/react/bridge/ReadableArray;I)V
@@ -2033,14 +2057,17 @@ public class com/facebook/react/devsupport/ReleaseDevSupportManager : com/facebo
20332057
public fun downloadBundleResourceFromUrlSync (Ljava/lang/String;Ljava/io/File;)Ljava/io/File;
20342058
public fun getCurrentActivity ()Landroid/app/Activity;
20352059
public fun getCurrentReactContext ()Lcom/facebook/react/bridge/ReactContext;
2060+
public fun getDevMenuEnabled ()Z
20362061
public fun getDevSettings ()Lcom/facebook/react/modules/debug/interfaces/DeveloperSettings;
20372062
public fun getDevSupportEnabled ()Z
20382063
public fun getDownloadedJSBundleFile ()Ljava/lang/String;
2064+
public fun getKeyboardShortcutsEnabled ()Z
20392065
public fun getLastErrorCookie ()I
20402066
public fun getLastErrorStack ()[Lcom/facebook/react/devsupport/interfaces/StackFrame;
20412067
public fun getLastErrorTitle ()Ljava/lang/String;
20422068
public fun getLastErrorType ()Lcom/facebook/react/devsupport/interfaces/ErrorType;
20432069
public fun getRedBoxHandler ()Lcom/facebook/react/devsupport/interfaces/RedBoxHandler;
2070+
public fun getShakeGestureEnabled ()Z
20442071
public fun getSourceMapUrl ()Ljava/lang/String;
20452072
public fun getSourceUrl ()Ljava/lang/String;
20462073
public fun handleException (Ljava/lang/Exception;)V
@@ -2057,10 +2084,13 @@ public class com/facebook/react/devsupport/ReleaseDevSupportManager : com/facebo
20572084
public fun reloadJSFromServer (Ljava/lang/String;Lcom/facebook/react/devsupport/interfaces/BundleLoadCallback;)V
20582085
public fun reloadSettings ()V
20592086
public fun setAdditionalOptionForPackager (Ljava/lang/String;Ljava/lang/String;)V
2087+
public fun setDevMenuEnabled (Z)V
20602088
public fun setDevSupportEnabled (Z)V
20612089
public fun setFpsDebugEnabled (Z)V
20622090
public fun setHotModuleReplacementEnabled (Z)V
2091+
public fun setKeyboardShortcutsEnabled (Z)V
20632092
public fun setPackagerLocationCustomizer (Lcom/facebook/react/devsupport/interfaces/DevSupportManager$PackagerLocationCustomizer;)V
2093+
public fun setShakeGestureEnabled (Z)V
20642094
public fun showDevOptionsDialog ()V
20652095
public fun showNewJSError (Ljava/lang/String;Lcom/facebook/react/bridge/ReadableArray;I)V
20662096
public fun showNewJavaError (Ljava/lang/String;Ljava/lang/Throwable;)V
@@ -2134,14 +2164,17 @@ public abstract interface class com/facebook/react/devsupport/interfaces/DevSupp
21342164
public abstract fun downloadBundleResourceFromUrlSync (Ljava/lang/String;Ljava/io/File;)Ljava/io/File;
21352165
public abstract fun getCurrentActivity ()Landroid/app/Activity;
21362166
public abstract fun getCurrentReactContext ()Lcom/facebook/react/bridge/ReactContext;
2167+
public abstract fun getDevMenuEnabled ()Z
21372168
public abstract fun getDevSettings ()Lcom/facebook/react/modules/debug/interfaces/DeveloperSettings;
21382169
public abstract fun getDevSupportEnabled ()Z
21392170
public abstract fun getDownloadedJSBundleFile ()Ljava/lang/String;
2171+
public abstract fun getKeyboardShortcutsEnabled ()Z
21402172
public abstract fun getLastErrorCookie ()I
21412173
public abstract fun getLastErrorStack ()[Lcom/facebook/react/devsupport/interfaces/StackFrame;
21422174
public abstract fun getLastErrorTitle ()Ljava/lang/String;
21432175
public abstract fun getLastErrorType ()Lcom/facebook/react/devsupport/interfaces/ErrorType;
21442176
public abstract fun getRedBoxHandler ()Lcom/facebook/react/devsupport/interfaces/RedBoxHandler;
2177+
public abstract fun getShakeGestureEnabled ()Z
21452178
public abstract fun getSourceMapUrl ()Ljava/lang/String;
21462179
public abstract fun getSourceUrl ()Ljava/lang/String;
21472180
public abstract fun handleReloadJS ()V
@@ -2158,10 +2191,13 @@ public abstract interface class com/facebook/react/devsupport/interfaces/DevSupp
21582191
public abstract fun reloadJSFromServer (Ljava/lang/String;Lcom/facebook/react/devsupport/interfaces/BundleLoadCallback;)V
21592192
public abstract fun reloadSettings ()V
21602193
public abstract fun setAdditionalOptionForPackager (Ljava/lang/String;Ljava/lang/String;)V
2194+
public abstract fun setDevMenuEnabled (Z)V
21612195
public abstract fun setDevSupportEnabled (Z)V
21622196
public abstract fun setFpsDebugEnabled (Z)V
21632197
public abstract fun setHotModuleReplacementEnabled (Z)V
2198+
public abstract fun setKeyboardShortcutsEnabled (Z)V
21642199
public abstract fun setPackagerLocationCustomizer (Lcom/facebook/react/devsupport/interfaces/DevSupportManager$PackagerLocationCustomizer;)V
2200+
public abstract fun setShakeGestureEnabled (Z)V
21652201
public abstract fun showDevOptionsDialog ()V
21662202
public abstract fun showNewJSError (Ljava/lang/String;Lcom/facebook/react/bridge/ReadableArray;I)V
21672203
public abstract fun showNewJavaError (Ljava/lang/String;Ljava/lang/Throwable;)V
@@ -3073,6 +3109,7 @@ public final class com/facebook/react/runtime/ReactHostImpl : com/facebook/react
30733109
public fun reload (Ljava/lang/String;)Lcom/facebook/react/interfaces/TaskInterface;
30743110
public fun removeBeforeDestroyListener (Lkotlin/jvm/functions/Function0;)V
30753111
public fun removeReactInstanceEventListener (Lcom/facebook/react/ReactInstanceEventListener;)V
3112+
public fun setDevMenuConfiguration (Lcom/facebook/react/devsupport/DevMenuConfiguration;)V
30763113
public fun start ()Lcom/facebook/react/interfaces/TaskInterface;
30773114
}
30783115

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,11 @@ public open class ReactDelegate {
393393
public fun shouldShowDevMenuOrReload(keyCode: Int, event: KeyEvent?): Boolean {
394394
val devSupportManager = devSupportManager
395395
// shouldShowDevMenuOrReload is a Dev API and not supported in RELEASE mode.
396-
if (devSupportManager == null || devSupportManager is ReleaseDevSupportManager) {
396+
if (
397+
devSupportManager == null ||
398+
devSupportManager is ReleaseDevSupportManager ||
399+
!devSupportManager.keyboardShortcutsEnabled
400+
) {
397401
return false
398402
}
399403

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactHost.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import android.os.Bundle
1414
import com.facebook.react.bridge.ReactContext
1515
import com.facebook.react.bridge.queue.ReactQueueConfiguration
1616
import com.facebook.react.common.LifecycleState
17+
import com.facebook.react.devsupport.DevMenuConfiguration
1718
import com.facebook.react.devsupport.interfaces.DevSupportManager
1819
import com.facebook.react.interfaces.TaskInterface
1920
import com.facebook.react.interfaces.fabric.ReactSurface
@@ -189,4 +190,7 @@ public interface ReactHost {
189190

190191
/** Remove a listener previously added with [addReactInstanceEventListener]. */
191192
public fun removeReactInstanceEventListener(listener: ReactInstanceEventListener)
193+
194+
/** Set the DevMenu configuration. */
195+
public fun setDevMenuConfiguration(config: DevMenuConfiguration): Unit = Unit
192196
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/*
2+
* Copyright (c) Meta Platforms, Inc. and affiliates.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*/
7+
8+
package com.facebook.react.devsupport
9+
10+
import com.facebook.react.BuildConfig
11+
12+
public data class DevMenuConfiguration(
13+
val isDevMenuEnabled: Boolean = BuildConfig.DEBUG,
14+
val isShakeGestureEnabled: Boolean = true,
15+
val areKeyboardShortcutsEnabled: Boolean = true,
16+
)

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.kt

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,22 @@ public abstract class DevSupportManagerBase(
130130
reloadSettings()
131131
}
132132

133+
final override var shakeGestureEnabled: Boolean
134+
get() = isShakeGestureEnabled
135+
set(isShakeGestureEnabled) {
136+
if (this.isShakeGestureEnabled == isShakeGestureEnabled) {
137+
return
138+
}
139+
140+
if (isShakeGestureEnabled) {
141+
startShakeDetector()
142+
} else {
143+
stopShakeDetector()
144+
}
145+
146+
this.isShakeGestureEnabled = isShakeGestureEnabled
147+
}
148+
133149
override val sourceMapUrl: String
134150
get() = jsAppBundleName?.let { devServerHelper.getSourceMapUrl(it) } ?: ""
135151

@@ -173,6 +189,7 @@ public abstract class DevSupportManagerBase(
173189
private var isReceiverRegistered = false
174190
private var isShakeDetectorStarted = false
175191
private var isDevSupportEnabled = false
192+
private var isShakeGestureEnabled = true
176193
private var isPackagerConnected = false
177194
private val errorCustomizers: MutableList<ErrorCustomizer> = mutableListOf()
178195
private var packagerLocationCustomizer: PackagerLocationCustomizer? = null
@@ -187,6 +204,9 @@ public abstract class DevSupportManagerBase(
187204
private var perfMonitorOverlayManager: PerfMonitorOverlayManager? = null
188205
private var tracingStateProvider: TracingStateProvider? = null
189206

207+
public override var keyboardShortcutsEnabled: Boolean = true
208+
public override var devMenuEnabled: Boolean = true
209+
190210
init {
191211
// We store JS bundle loaded from dev server in a single destination in app's data dir.
192212
// In case when someone schedule 2 subsequent reloads it may happen that JS thread will
@@ -332,7 +352,12 @@ public abstract class DevSupportManagerBase(
332352
}
333353

334354
override fun showDevOptionsDialog() {
335-
if (devOptionsDialog != null || !isDevSupportEnabled || ActivityManager.isUserAMonkey()) {
355+
if (
356+
devOptionsDialog != null ||
357+
!isDevSupportEnabled ||
358+
ActivityManager.isUserAMonkey() ||
359+
!devMenuEnabled
360+
) {
336361
return
337362
}
338363
val options = LinkedHashMap<String, DevOptionHandler>()
@@ -848,6 +873,17 @@ public abstract class DevSupportManagerBase(
848873
}
849874
}
850875

876+
private fun startShakeDetector() {
877+
val sensorManager = applicationContext.getSystemService(Context.SENSOR_SERVICE) as SensorManager
878+
shakeDetector.start(sensorManager)
879+
isShakeDetectorStarted = true
880+
}
881+
882+
private fun stopShakeDetector() {
883+
shakeDetector.stop()
884+
isShakeDetectorStarted = false
885+
}
886+
851887
private fun reload() {
852888
UiThreadUtil.assertOnUiThread()
853889

@@ -857,11 +893,8 @@ public abstract class DevSupportManagerBase(
857893
debugOverlayController?.setFpsDebugViewVisible(devSettings.isFpsDebugEnabled)
858894

859895
// start shake gesture detector
860-
if (!isShakeDetectorStarted) {
861-
val sensorManager =
862-
applicationContext.getSystemService(Context.SENSOR_SERVICE) as SensorManager
863-
shakeDetector.start(sensorManager)
864-
isShakeDetectorStarted = true
896+
if (!isShakeDetectorStarted && isShakeGestureEnabled) {
897+
startShakeDetector()
865898
}
866899

867900
// register reload app broadcast receiver
@@ -915,8 +948,7 @@ public abstract class DevSupportManagerBase(
915948

916949
// stop shake gesture detector
917950
if (isShakeDetectorStarted) {
918-
shakeDetector.stop()
919-
isShakeDetectorStarted = false
951+
stopShakeDetector()
920952
}
921953

922954
// unregister app reload broadcast receiver

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/ReleaseDevSupportManager.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,18 @@ public open class ReleaseDevSupportManager : DevSupportManager {
7272
get() = false
7373
@Suppress("UNUSED_PARAMETER") set(isDevSupportEnabled: Boolean): Unit = Unit
7474

75+
public override var devMenuEnabled: Boolean
76+
get() = false
77+
@Suppress("UNUSED_PARAMETER") set(isDevMenuEnabled: Boolean): Unit = Unit
78+
79+
public override var shakeGestureEnabled: Boolean
80+
get() = false
81+
@Suppress("UNUSED_PARAMETER") set(isShakeGestureEnabled: Boolean): Unit = Unit
82+
83+
public override var keyboardShortcutsEnabled: Boolean
84+
get() = false
85+
@Suppress("UNUSED_PARAMETER") set(areKeyboardShortcutsEnabled: Boolean): Unit = Unit
86+
7587
public override val devSettings: DeveloperSettings?
7688
get() = null
7789

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevSupportManager.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ public interface DevSupportManager : JSExceptionHandler {
3636
public val currentActivity: Activity?
3737
public val currentReactContext: ReactContext?
3838

39+
public var devMenuEnabled: Boolean
40+
public var shakeGestureEnabled: Boolean
41+
public var keyboardShortcutsEnabled: Boolean
3942
public var devSupportEnabled: Boolean
4043

4144
public fun showNewJavaError(message: String?, e: Throwable)

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import com.facebook.react.common.annotations.FrameworkAPI
3939
import com.facebook.react.common.annotations.UnstableReactNativeAPI
4040
import com.facebook.react.common.build.ReactBuildConfig
4141
import com.facebook.react.devsupport.DefaultDevSupportManagerFactory
42+
import com.facebook.react.devsupport.DevMenuConfiguration
4243
import com.facebook.react.devsupport.DevSupportManagerBase
4344
import com.facebook.react.devsupport.DevSupportManagerFactory
4445
import com.facebook.react.devsupport.InspectorFlags
@@ -365,6 +366,12 @@ public class ReactHostImpl(
365366
reactInstanceEventListeners.remove(listener)
366367
}
367368

369+
override fun setDevMenuConfiguration(config: DevMenuConfiguration) {
370+
devSupportManager.devMenuEnabled = config.isDevMenuEnabled
371+
devSupportManager.shakeGestureEnabled = config.isShakeGestureEnabled
372+
devSupportManager.keyboardShortcutsEnabled = config.areKeyboardShortcutsEnabled
373+
}
374+
368375
/**
369376
* Entrypoint to reload the ReactInstance. If the ReactInstance is destroying, will wait until
370377
* destroy is finished, before reloading.

packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/RNTesterActivity.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import com.facebook.react.FBRNTesterEndToEndHelper
1919
import com.facebook.react.ReactActivity
2020
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled
2121
import com.facebook.react.defaults.DefaultReactActivityDelegate
22+
import com.facebook.react.devsupport.DevMenuConfiguration
2223
import java.io.FileDescriptor
2324
import java.io.PrintWriter
2425

@@ -66,6 +67,16 @@ internal class RNTesterActivity : ReactActivity() {
6667
fullyDrawnReporter.addReporter()
6768
maybeUpdateBackgroundColor()
6869

70+
reactDelegate?.reactHost?.let { reactHost ->
71+
val devMenuConfiguration =
72+
DevMenuConfiguration(
73+
isDevMenuEnabled = true,
74+
isShakeGestureEnabled = true,
75+
areKeyboardShortcutsEnabled = true,
76+
)
77+
reactHost.setDevMenuConfiguration(devMenuConfiguration)
78+
}
79+
6980
// register insets listener to update margins on the ReactRootView to avoid overlap w/ system
7081
// bars
7182
reactDelegate?.reactRootView?.let { rootView ->

0 commit comments

Comments
 (0)