From 445c9ce806240c6bdebe58eb6a8dd8c5d792d7aa Mon Sep 17 00:00:00 2001 From: Alan Lee Date: Thu, 4 Apr 2024 13:07:26 -0700 Subject: [PATCH] convert LayoutMetricsConversions to Kotlin (#43863) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/43863 convert Java to Kotlin: `react/fabric/mounding/LayoutMetricsConversions.java` Changelog: [Internal] internal Reviewed By: cortinico Differential Revision: D55714004 fbshipit-source-id: fbf167cb6030916789f6676c1bd0690f144cf330 --- .../ReactAndroid/api/ReactAndroid.api | 8 +++ .../mounting/LayoutMetricsConversions.java | 54 ------------------- .../mounting/LayoutMetricsConversions.kt | 53 ++++++++++++++++++ 3 files changed, 61 insertions(+), 54 deletions(-) delete mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/LayoutMetricsConversions.java create mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/LayoutMetricsConversions.kt diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index dd131f57925..f92d6881536 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -2702,12 +2702,20 @@ public class com/facebook/react/fabric/events/FabricEventEmitter : com/facebook/ } public abstract interface class com/facebook/react/fabric/mounting/LayoutMetricsConversions { + public static final field Companion Lcom/facebook/react/fabric/mounting/LayoutMetricsConversions$Companion; public static fun getMaxSize (I)F public static fun getMinSize (I)F public static fun getYogaMeasureMode (FF)Lcom/facebook/yoga/YogaMeasureMode; public static fun getYogaSize (FF)F } +public final class com/facebook/react/fabric/mounting/LayoutMetricsConversions$Companion { + public final fun getMaxSize (I)F + public final fun getMinSize (I)F + public final fun getYogaMeasureMode (FF)Lcom/facebook/yoga/YogaMeasureMode; + public final fun getYogaSize (FF)F +} + public class com/facebook/react/fabric/mounting/MountItemDispatcher { public fun (Lcom/facebook/react/fabric/mounting/MountingManager;Lcom/facebook/react/fabric/mounting/MountItemDispatcher$ItemDispatchListener;)V public fun addMountItem (Lcom/facebook/react/fabric/mounting/mountitems/MountItem;)V diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/LayoutMetricsConversions.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/LayoutMetricsConversions.java deleted file mode 100644 index f875d34e8bf..00000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/LayoutMetricsConversions.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.react.fabric.mounting; - -import static android.view.View.MeasureSpec.EXACTLY; - -import android.view.View; -import com.facebook.infer.annotation.Nullsafe; -import com.facebook.react.uimanager.PixelUtil; -import com.facebook.yoga.YogaMeasureMode; - -@Nullsafe(Nullsafe.Mode.LOCAL) -public interface LayoutMetricsConversions { - - static float getMinSize(int viewMeasureSpec) { - int mode = View.MeasureSpec.getMode(viewMeasureSpec); - int size = View.MeasureSpec.getSize(viewMeasureSpec); - - return mode == EXACTLY ? size : 0f; - } - - static float getMaxSize(int viewMeasureSpec) { - int mode = View.MeasureSpec.getMode(viewMeasureSpec); - int size = View.MeasureSpec.getSize(viewMeasureSpec); - - // Infinity represents an "unconstrained" size - return mode == View.MeasureSpec.UNSPECIFIED ? Float.POSITIVE_INFINITY : size; - } - - static float getYogaSize(float minSize, float maxSize) { - if (minSize == maxSize) { - return PixelUtil.toPixelFromDIP(maxSize); - } else if (Float.isInfinite(maxSize)) { - return Float.POSITIVE_INFINITY; - } else { - return PixelUtil.toPixelFromDIP(maxSize); - } - } - - static YogaMeasureMode getYogaMeasureMode(float minSize, float maxSize) { - if (minSize == maxSize) { - return YogaMeasureMode.EXACTLY; - } else if (Float.isInfinite(maxSize)) { - return YogaMeasureMode.UNDEFINED; - } else { - return YogaMeasureMode.AT_MOST; - } - } -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/LayoutMetricsConversions.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/LayoutMetricsConversions.kt new file mode 100644 index 00000000000..2bffc5b6945 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/LayoutMetricsConversions.kt @@ -0,0 +1,53 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.fabric.mounting + +import android.view.View.MeasureSpec +import com.facebook.react.uimanager.PixelUtil +import com.facebook.yoga.YogaMeasureMode + +public interface LayoutMetricsConversions { + + public companion object { + @JvmStatic + public fun getMinSize(viewMeasureSpec: Int): Float { + val mode = MeasureSpec.getMode(viewMeasureSpec) + val size = MeasureSpec.getSize(viewMeasureSpec) + return if (mode == MeasureSpec.EXACTLY) size.toFloat() else 0f + } + + @JvmStatic + public fun getMaxSize(viewMeasureSpec: Int): Float { + val mode = MeasureSpec.getMode(viewMeasureSpec) + val size = MeasureSpec.getSize(viewMeasureSpec) + + // Infinity represents an "unconstrained" size + return if (mode == MeasureSpec.UNSPECIFIED) Float.POSITIVE_INFINITY else size.toFloat() + } + + @JvmStatic + public fun getYogaSize(minSize: Float, maxSize: Float): Float = + if (minSize == maxSize) { + PixelUtil.toPixelFromDIP(maxSize) + } else if (maxSize.isInfinite()) { + Float.POSITIVE_INFINITY + } else { + PixelUtil.toPixelFromDIP(maxSize) + } + + @JvmStatic + public fun getYogaMeasureMode(minSize: Float, maxSize: Float): YogaMeasureMode = + if (minSize == maxSize) { + YogaMeasureMode.EXACTLY + } else if (maxSize.isInfinite()) { + YogaMeasureMode.UNDEFINED + } else { + YogaMeasureMode.AT_MOST + } + } +}