diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.java index 1192b50f2e4..ba4a1d5cb95 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.java @@ -13,6 +13,7 @@ import android.os.Build; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.facebook.react.bridge.Dynamic; import com.facebook.react.bridge.JSApplicationIllegalArgumentException; import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.ReadableArray; @@ -126,22 +127,35 @@ public class ReactViewManager extends ReactClippingViewManager { } @ReactProp(name = "hitSlop") - public void setHitSlop(final ReactViewGroup view, @Nullable ReadableMap hitSlop) { - if (hitSlop == null) { - view.setHitSlopRect(null); - } else { - view.setHitSlopRect( - new Rect( - hitSlop.hasKey("left") - ? (int) PixelUtil.toPixelFromDIP(hitSlop.getDouble("left")) - : 0, - hitSlop.hasKey("top") ? (int) PixelUtil.toPixelFromDIP(hitSlop.getDouble("top")) : 0, - hitSlop.hasKey("right") - ? (int) PixelUtil.toPixelFromDIP(hitSlop.getDouble("right")) - : 0, - hitSlop.hasKey("bottom") - ? (int) PixelUtil.toPixelFromDIP(hitSlop.getDouble("bottom")) - : 0)); + public void setHitSlop(final ReactViewGroup view, Dynamic hitSlop) { + switch (hitSlop.getType()) { + case Null: + view.setHitSlopRect(null); + break; + case Map: + ReadableMap hitSlopMap = hitSlop.asMap(); + view.setHitSlopRect( + new Rect( + hitSlopMap.hasKey("left") + ? (int) PixelUtil.toPixelFromDIP(hitSlopMap.getDouble("left")) + : 0, + hitSlopMap.hasKey("top") + ? (int) PixelUtil.toPixelFromDIP(hitSlopMap.getDouble("top")) + : 0, + hitSlopMap.hasKey("right") + ? (int) PixelUtil.toPixelFromDIP(hitSlopMap.getDouble("right")) + : 0, + hitSlopMap.hasKey("bottom") + ? (int) PixelUtil.toPixelFromDIP(hitSlopMap.getDouble("bottom")) + : 0)); + break; + case Number: + int hitSlopValue = (int) PixelUtil.toPixelFromDIP(hitSlop.asDouble()); + view.setHitSlopRect(new Rect(hitSlopValue, hitSlopValue, hitSlopValue, hitSlopValue)); + break; + default: + throw new JSApplicationIllegalArgumentException( + "Invalid type for 'hitSlop' value " + hitSlop.getType()); } }