Skip to content

Commit 962c1ef

Browse files
committed
feat(android): move retreiving margin and padding insets to FabricUiManager
1 parent 909042f commit 962c1ef

File tree

3 files changed

+23
-38
lines changed

3 files changed

+23
-38
lines changed

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import android.annotation.SuppressLint;
2222
import android.content.Context;
2323
import android.graphics.Point;
24+
import android.graphics.RectF;
2425
import android.os.SystemClock;
2526
import android.view.View;
2627
import android.view.accessibility.AccessibilityEvent;
@@ -1335,13 +1336,23 @@ public Map<String, Long> getPerformanceCounters() {
13351336
}
13361337

13371338
@Nullable
1338-
public float[] getComputedMarginInsets(int surfaceId, int viewTag) {
1339-
return mBinding != null ? mBinding.getComputedMarginInsets(surfaceId, viewTag) : null;
1339+
private RectF computeInsetsToRectF(@Nullable float[] insets, int surfaceId, int viewTag) {
1340+
if (insets == null || surfaceId == View.NO_ID || viewTag == View.NO_ID) {
1341+
return null;
1342+
}
1343+
return new RectF(insets[0], insets[1], insets[2], insets[3]);
1344+
}
1345+
1346+
@Nullable
1347+
public RectF getComputedMarginInsets(int surfaceId, int viewTag) {
1348+
float[] insets = mBinding != null ? mBinding.getComputedMarginInsets(surfaceId, viewTag) : null;
1349+
return computeInsetsToRectF(insets, surfaceId, viewTag);
13401350
}
13411351

13421352
@Nullable
1343-
public float[] getComputedPaddingInsets(int surfaceId, int viewTag) {
1344-
return mBinding != null ? mBinding.getComputedPaddingInsets(surfaceId, viewTag) : null;
1353+
public RectF getComputedPaddingInsets(int surfaceId, int viewTag) {
1354+
float[] insets = mBinding != null ? mBinding.getComputedPaddingInsets(surfaceId, viewTag) : null;
1355+
return computeInsetsToRectF(insets, surfaceId, viewTag);
13451356
}
13461357

13471358
private class MountItemDispatchListener implements MountItemDispatcher.ItemDispatchListener {

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ import com.facebook.react.uimanager.style.GeometryBoxUtil.getGeometryBoxBounds
5454
import com.facebook.react.uimanager.style.LogicalEdge
5555
import com.facebook.react.uimanager.style.OutlineStyle
5656
import androidx.core.graphics.withSave
57+
import com.facebook.react.bridge.ReactContext
58+
import com.facebook.react.fabric.FabricUIManager
5759

5860
/**
5961
* Utility object responsible for applying backgrounds, borders, and related visual effects to
@@ -494,8 +496,12 @@ public object BackgroundStyleApplicator {
494496

495497
canvas.withSave {
496498
val composite = getCompositeBackgroundDrawable(view)
497-
val computedMarginInsets = UIManagerHelper.getComputedMarginInsets(view)
498-
val computedPaddingInsets = UIManagerHelper.getComputedPaddingInsets(view)
499+
val uiManager =
500+
UIManagerHelper.getUIManager(view.context as ReactContext, UIManagerType.FABRIC) as? FabricUIManager
501+
val surfaceId = UIManagerHelper.getSurfaceId(view)
502+
val viewId = view.id
503+
val computedMarginInsets = uiManager?.getComputedMarginInsets(surfaceId, viewId)
504+
val computedPaddingInsets = uiManager?.getComputedPaddingInsets(surfaceId, viewId)
499505
val computedBorderInsets =
500506
composite?.borderInsets?.resolve(composite.layoutDirection, view.context)
501507
val bounds = getGeometryBoxBounds(

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

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ package com.facebook.react.uimanager
1111

1212
import android.content.Context
1313
import android.content.ContextWrapper
14-
import android.graphics.RectF
1514
import android.view.View
1615
import android.widget.EditText
1716
import androidx.core.view.ViewCompat
@@ -248,35 +247,4 @@ public object UIManagerHelper {
248247
padding[PADDING_BOTTOM_INDEX] = PixelUtil.toDIPFromPixel(editText.paddingBottom.toFloat())
249248
return padding
250249
}
251-
252-
@JvmStatic
253-
public fun getComputedMarginInsets(view: View): RectF? =
254-
getComputedLayoutMetrics(view) { uiManager, surfaceId, viewTag ->
255-
uiManager.getComputedMarginInsets(surfaceId, viewTag)
256-
}
257-
258-
@JvmStatic
259-
public fun getComputedPaddingInsets(view: View): RectF? =
260-
getComputedLayoutMetrics(view) { uiManager, surfaceId, viewTag ->
261-
uiManager.getComputedPaddingInsets(surfaceId, viewTag)
262-
}
263-
264-
private inline fun getComputedLayoutMetrics(
265-
view: View,
266-
getter: (com.facebook.react.fabric.FabricUIManager, Int, Int) -> FloatArray?
267-
): RectF? {
268-
val viewTag = view.id
269-
if (viewTag == View.NO_ID || getUIManagerType(viewTag) != UIManagerType.FABRIC) {
270-
return null
271-
}
272-
273-
val context = view.context as? ThemedReactContext ?: return null
274-
val surfaceId = getSurfaceId(context)
275-
val uiManager = getUIManager(
276-
context.reactApplicationContext,
277-
UIManagerType.FABRIC
278-
) as? com.facebook.react.fabric.FabricUIManager ?: return null
279-
val array = getter(uiManager, surfaceId, viewTag) ?: return null
280-
return RectF(array[0], array[1], array[2], array[3])
281-
}
282250
}

0 commit comments

Comments
 (0)