From 4d642a2250251d90d4afec8e81bf19848217c3f6 Mon Sep 17 00:00:00 2001 From: Lulu Wu Date: Mon, 29 Aug 2022 18:44:24 -0700 Subject: [PATCH] Fix isRootVisible not working with non-Venice Summary: ## Context ```isRootViewVisible``` doesn't work as expected for non-Venice: when enter Marketplace tab, ```isRootViewVisible``` should returns true with Marketplace tab's rootViewTag, but it returns false. ## Root cause ```rootViewTag``` is added to "mVisibleRootTags" in "FbReactRootVisibilityTracker" when ```BaseFbReactFragment.onViewDidAppear()``` gets called, but ```BaseFbReactFragment.onViewDidAppear()``` is called earlier than when the ```rootViewTag``` is set. ## Fix Move setRootViewTag to earlier when RootView is created instead of in startSurface or mounting. Changelog: [Android][Changed] - Move setRootViewTag to earlier when RootView is created Reviewed By: RSNara Differential Revision: D38586584 fbshipit-source-id: aec3ed37eb62289a19794e68b1a6b5ca213cb14a --- .../main/java/com/facebook/react/ReactInstanceManager.java | 1 - .../src/main/java/com/facebook/react/ReactRootView.java | 2 ++ .../main/java/com/facebook/react/fabric/FabricUIManager.java | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java index 67120d27bde..38daad20487 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java @@ -1260,7 +1260,6 @@ public class ReactInstanceManager { : Arguments.fromBundle(initialProperties), reactRoot.getWidthMeasureSpec(), reactRoot.getHeightMeasureSpec()); - reactRoot.setRootViewTag(rootTag); reactRoot.setShouldLogContentAppeared(true); } else { rootTag = diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java b/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java index 1114d8e1532..e0c37c31a24 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java @@ -62,6 +62,7 @@ import com.facebook.react.uimanager.JSTouchDispatcher; import com.facebook.react.uimanager.PixelUtil; import com.facebook.react.uimanager.ReactClippingProhibitedView; import com.facebook.react.uimanager.ReactRoot; +import com.facebook.react.uimanager.ReactRootViewTagGenerator; import com.facebook.react.uimanager.RootView; import com.facebook.react.uimanager.RootViewUtil; import com.facebook.react.uimanager.UIManagerHelper; @@ -131,6 +132,7 @@ public class ReactRootView extends FrameLayout implements RootView, ReactRoot { } private void init() { + setRootViewTag(ReactRootViewTagGenerator.getNextRootViewTag()); setClipChildren(false); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index dad32fe91ad..a46b984e9e7 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -265,8 +265,8 @@ public class FabricUIManager implements UIManager, LifecycleEventListener { new IllegalViewOperationException( "Do not call addRootView in Fabric; it is unsupported. Call startSurface instead.")); - final int rootTag = ReactRootViewTagGenerator.getNextRootViewTag(); ReactRoot reactRootView = (ReactRoot) rootView; + final int rootTag = reactRootView.getRootViewTag(); ThemedReactContext reactContext = new ThemedReactContext( @@ -322,7 +322,7 @@ public class FabricUIManager implements UIManager, LifecycleEventListener { final WritableMap initialProps, int widthMeasureSpec, int heightMeasureSpec) { - final int rootTag = ReactRootViewTagGenerator.getNextRootViewTag(); + final int rootTag = ((ReactRoot) rootView).getRootViewTag(); Context context = rootView.getContext(); ThemedReactContext reactContext = new ThemedReactContext(mReactApplicationContext, context, moduleName, rootTag);