From 88eeea0995faa800e3b9e48461f95488c73f7fd9 Mon Sep 17 00:00:00 2001 From: Pieter De Baets Date: Mon, 23 Jan 2017 11:22:37 -0800 Subject: [PATCH] Allow views to be collapsed when pointerEvents is set Reviewed By: astreet Differential Revision: D4440164 fbshipit-source-id: 88a710affea229228f9c96b82d0bcf4c81f3205d --- .../uimanager/NativeViewHierarchyOptimizer.java | 2 +- .../com/facebook/react/uimanager/ViewProps.java | 16 ++++++++++++++-- .../react/views/view/ReactViewManager.java | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyOptimizer.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyOptimizer.java index 2d921bb0f..52c549b74 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyOptimizer.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyOptimizer.java @@ -446,7 +446,7 @@ public class NativeViewHierarchyOptimizer { ReadableMapKeySetIterator keyIterator = props.mBackingMap.keySetIterator(); while (keyIterator.hasNextKey()) { - if (!ViewProps.isLayoutOnly(keyIterator.nextKey())) { + if (!ViewProps.isLayoutOnly(props.mBackingMap, keyIterator.nextKey())) { return false; } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java index 5c4feaf02..138437940 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java @@ -12,6 +12,8 @@ package com.facebook.react.uimanager; import java.util.Arrays; import java.util.HashSet; +import com.facebook.react.bridge.ReadableMap; + /** * Keys for props that need to be shared across multiple classes. */ @@ -64,6 +66,9 @@ public class ViewProps { public static final String ASPECT_RATIO = "aspectRatio"; + // Props that sometimes may prevent us from collapsing views + public static final String POINTER_EVENTS = "pointerEvents"; + // Props that affect more than just layout public static final String ENABLED = "enabled"; public static final String BACKGROUND_COLOR = "backgroundColor"; @@ -151,7 +156,14 @@ public class ViewProps { PADDING_TOP, PADDING_BOTTOM)); - public static boolean isLayoutOnly(String prop) { - return LAYOUT_ONLY_PROPS.contains(prop); + public static boolean isLayoutOnly(ReadableMap map, String prop) { + if (LAYOUT_ONLY_PROPS.contains(prop)) { + return true; + } else if (POINTER_EVENTS.equals(prop)) { + String value = map.getString(prop); + return "auto".equals(value) || "box-none".equals(value); + } else { + return false; + } } } 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 b57fb619d..ccf728178 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 @@ -93,7 +93,7 @@ public class ReactViewManager extends ViewGroupManager { } } - @ReactProp(name = "pointerEvents") + @ReactProp(name = ViewProps.POINTER_EVENTS) public void setPointerEvents(ReactViewGroup view, @Nullable String pointerEventsStr) { if (pointerEventsStr != null) { PointerEvents pointerEvents =