From d756d94b3a7e2812f17f549c57767ac63734b49c Mon Sep 17 00:00:00 2001 From: Tim Yung Date: Thu, 12 Jul 2018 07:58:40 -0700 Subject: [PATCH] RN: Workaround for ReactNativeART on Android Summary: Brings back the fix for `overflow: hidden` on Android by implementing a workaround for a bug with `ReactNativeART`. The ReactNativeART bug is that changes in the canvas due to a resize of the `Surface` are not properly reflected on Android. I have verified that the correct props are being computed and passed to the shadow nodes and that the `ARTSurfaceView`'s canvas is indeed updated. But for some reason, the paint is not updated. This workaround is to simply unmount and remount `Surface` on Android. It sucks and we should eventually fix it. Reviewed By: achen1 Differential Revision: D8818010 fbshipit-source-id: 71d1927580b6bde7263fd241797d4655140b5f34 --- Libraries/ART/ReactNativeART.js | 12 ++++++++---- .../facebook/react/views/view/ReactViewGroup.java | 3 +-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Libraries/ART/ReactNativeART.js b/Libraries/ART/ReactNativeART.js index 760b5ff809d..cf56028b102 100644 --- a/Libraries/ART/ReactNativeART.js +++ b/Libraries/ART/ReactNativeART.js @@ -11,6 +11,7 @@ const Color = require('art/core/color'); const Path = require('ARTSerializablePath'); +const Platform = require('Platform'); const Transform = require('art/core/transform'); const React = require('React'); @@ -150,11 +151,14 @@ class Surface extends React.Component { } render() { - const props = this.props; - const w = extractNumber(props.width, 0); - const h = extractNumber(props.height, 0); + const height = extractNumber(this.props.height, 0); + const width = extractNumber(this.props.width, 0); + + // WORKAROUND: Android bug in which canvas does not reflect size changes. + const key = Platform.OS === 'android' ? height + ',' + width : null; + return ( - + {this.props.children} ); diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.java b/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.java index f3942754ec9..e8afaa93574 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.java @@ -51,9 +51,8 @@ public class ReactViewGroup extends ViewGroup implements /** * Kill switch to make overflow hidden by default. This flag will eventually be removed. - * TODO (T31096050): Sets this back to `false` until ReactNativeARTSurface issue is resolved. */ - public static boolean sDefaultOverflowHidden = true; + public static boolean sDefaultOverflowHidden; private static final int ARRAY_CAPACITY_INCREMENT = 12; private static final int DEFAULT_BACKGROUND_COLOR = Color.TRANSPARENT;