Update size of Root ShadowNode when RootView changes its size

Summary: This diff updates the size of RootShadowNode and re-render RN views when the Size of the Android React View changes

Reviewed By: achen1

Differential Revision: D9173758

fbshipit-source-id: 7cc6bbfb646025c3ec1773ab041eb9207623af71
This commit is contained in:
David Vacca 2018-08-28 22:49:26 -07:00 committed by Facebook Github Bot
parent 575f7d478d
commit 8b5e3fc16b
4 changed files with 33 additions and 21 deletions

View File

@ -408,17 +408,11 @@ public class ReactRootView extends SizeMonitoringFrameLayout
return;
}
final ReactContext reactApplicationContext = mReactInstanceManager.getCurrentReactContext();
if (reactApplicationContext != null) {
reactApplicationContext.runOnNativeModulesQueueThread(
new GuardedRunnable(reactApplicationContext) {
@Override
public void runGuarded() {
UIManagerHelper
.getUIManager(reactApplicationContext, getUIManagerType())
UIManagerHelper.getUIManager(reactApplicationContext, getUIManagerType())
.updateRootLayoutSpecs(getRootViewTag(), widthMeasureSpec, heightMeasureSpec);
}
});
}
}
/**

View File

@ -512,7 +512,10 @@ public class FabricUIManager implements UIManager, JSHandler, FabricBinder {
@Override
@DoNotStrip
public synchronized void updateRootLayoutSpecs(int rootViewTag, int widthMeasureSpec, int heightMeasureSpec) {
public synchronized void updateRootLayoutSpecs(final int rootViewTag, final int widthMeasureSpec, final int heightMeasureSpec) {
mReactApplicationContext.runOnNativeModulesQueueThread(new Runnable() {
@Override
public void run() {
ReactShadowNode rootNode = getRootNode(rootViewTag);
if (rootNode == null) {
FLog.w(ReactConstants.TAG, "Tried to update non-existent root tag: " + rootViewTag);
@ -523,6 +526,8 @@ public class FabricUIManager implements UIManager, JSHandler, FabricBinder {
updateRootView(newRootNode, widthMeasureSpec, heightMeasureSpec);
mRootShadowNodeRegistry.replaceNode(newRootNode);
}
});
}
/**
* Updates the root view size and re-render the RN surface.

View File

@ -55,4 +55,11 @@ public class PixelUtil {
return value / DisplayMetricsHolder.getWindowDisplayMetrics().density;
}
/**
* @return {@link float} that represents the density of the display metrics for device screen.
*/
public static float getDisplayMetricDensity() {
return DisplayMetricsHolder.getScreenDisplayMetrics().density;
}
}

View File

@ -784,9 +784,15 @@ public class UIManagerModule extends ReactContextBaseJavaModule implements
* Updates the styles of the {@link ReactShadowNode} based on the Measure specs received by
* parameters.
*/
public void updateRootLayoutSpecs(int rootViewTag, int widthMeasureSpec, int heightMeasureSpec) {
public void updateRootLayoutSpecs(final int rootViewTag, final int widthMeasureSpec, final int heightMeasureSpec) {
ReactApplicationContext reactApplicationContext = getReactApplicationContext();
reactApplicationContext.runOnNativeModulesQueueThread(
new GuardedRunnable(reactApplicationContext) {
@Override
public void runGuarded() {
mUIImplementation.updateRootView(rootViewTag, widthMeasureSpec, heightMeasureSpec);
mUIImplementation.dispatchViewUpdates(-1);
}});
}
/** Listener that drops the CSSNode pool on low memory when the app is backgrounded. */