Skip to content

Commit e51e0c5

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> Reviewed By: vzaidman Differential Revision: D81684310 Pulled By: coado
1 parent 0caf8e7 commit e51e0c5

File tree

9 files changed

+134
-9
lines changed

9 files changed

+134
-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 abstract 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)
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>()
@@ -844,6 +869,17 @@ public abstract class DevSupportManagerBase(
844869
}
845870
}
846871

872+
private fun startShakeDetector() {
873+
val sensorManager = applicationContext.getSystemService(Context.SENSOR_SERVICE) as SensorManager
874+
shakeDetector.start(sensorManager)
875+
isShakeDetectorStarted = true
876+
}
877+
878+
private fun stopShakeDetector() {
879+
shakeDetector.stop()
880+
isShakeDetectorStarted = false
881+
}
882+
847883
private fun reload() {
848884
UiThreadUtil.assertOnUiThread()
849885

@@ -853,11 +889,8 @@ public abstract class DevSupportManagerBase(
853889
debugOverlayController?.setFpsDebugViewVisible(devSettings.isFpsDebugEnabled)
854890

855891
// start shake gesture detector
856-
if (!isShakeDetectorStarted) {
857-
val sensorManager =
858-
applicationContext.getSystemService(Context.SENSOR_SERVICE) as SensorManager
859-
shakeDetector.start(sensorManager)
860-
isShakeDetectorStarted = true
892+
if (!isShakeDetectorStarted && isShakeGestureEnabled) {
893+
startShakeDetector()
861894
}
862895

863896
// register reload app broadcast receiver
@@ -911,8 +944,7 @@ public abstract class DevSupportManagerBase(
911944

912945
// stop shake gesture detector
913946
if (isShakeDetectorStarted) {
914-
shakeDetector.stop()
915-
isShakeDetectorStarted = false
947+
stopShakeDetector()
916948
}
917949

918950
// 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: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@ internal class RNTesterActivity : ReactActivity() {
6666
fullyDrawnReporter.addReporter()
6767
maybeUpdateBackgroundColor()
6868

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

0 commit comments

Comments
 (0)