From c3f2bba834a5ffcc42352bb738132baceafce76d Mon Sep 17 00:00:00 2001 From: Dave Miller Date: Wed, 6 Jul 2016 09:30:13 -0700 Subject: [PATCH] Fix padding with Text on Android Summary: Text was not correctly respecting padding. We would account for it when measuring, but then not actually apply the padding to the text. This adds support for proper padding Reviewed By: andreicoman11 Differential Revision: D3516692 fbshipit-source-id: 9a0991d89e9194c0e87af0af56c6631a6b95700a --- .../react/views/text/ReactTextShadowNode.java | 2 +- .../facebook/react/views/text/ReactTextUpdate.java | 14 +++++++++++++- .../facebook/react/views/text/ReactTextView.java | 7 +++++++ .../views/textinput/ReactTextInputShadowNode.java | 2 +- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java index a47fa7669..ae623bf0e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java @@ -530,7 +530,7 @@ public class ReactTextShadowNode extends LayoutShadowNode { super.onCollectExtraUpdates(uiViewOperationQueue); if (mPreparedSpannableText != null) { ReactTextUpdate reactTextUpdate = - new ReactTextUpdate(mPreparedSpannableText, UNSET, mContainsImages); + new ReactTextUpdate(mPreparedSpannableText, UNSET, mContainsImages, getPadding()); uiViewOperationQueue.enqueueUpdateExtraData(getReactTag(), reactTextUpdate); } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextUpdate.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextUpdate.java index 3af8cc87d..61a6b3b6f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextUpdate.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextUpdate.java @@ -11,6 +11,8 @@ package com.facebook.react.views.text; import android.text.Spannable; +import com.facebook.csslayout.Spacing; + /** * Class that contains the data needed for a text update. * Used by both and @@ -21,11 +23,17 @@ public class ReactTextUpdate { private final Spannable mText; private final int mJsEventCounter; private final boolean mContainsImages; + private final Spacing mPadding; - public ReactTextUpdate(Spannable text, int jsEventCounter, boolean containsImages) { + public ReactTextUpdate( + Spannable text, + int jsEventCounter, + boolean containsImages, + Spacing padding) { mText = text; mJsEventCounter = jsEventCounter; mContainsImages = containsImages; + mPadding = padding; } public Spannable getText() { @@ -39,4 +47,8 @@ public class ReactTextUpdate { public boolean containsImages() { return mContainsImages; } + + public Spacing getPadding() { + return mPadding; + } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java index 2d942d819..da7ea7e82 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java @@ -17,6 +17,7 @@ import android.view.Gravity; import android.view.ViewGroup; import android.widget.TextView; +import com.facebook.csslayout.Spacing; import com.facebook.react.uimanager.ReactCompoundView; public class ReactTextView extends TextView implements ReactCompoundView { @@ -45,6 +46,12 @@ public class ReactTextView extends TextView implements ReactCompoundView { setLayoutParams(EMPTY_LAYOUT_PARAMS); } setText(update.getText()); + Spacing padding = update.getPadding(); + setPadding( + (int) Math.ceil(padding.get(Spacing.LEFT)), + (int) Math.ceil(padding.get(Spacing.TOP)), + (int) Math.ceil(padding.get(Spacing.RIGHT)), + (int) Math.ceil(padding.get(Spacing.BOTTOM))); } @Override diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputShadowNode.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputShadowNode.java index 4bb885156..c75e9797b 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputShadowNode.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputShadowNode.java @@ -119,7 +119,7 @@ public class ReactTextInputShadowNode extends ReactTextShadowNode implements if (mJsEventCount != UNSET) { Spannable preparedSpannableText = fromTextCSSNode(this); ReactTextUpdate reactTextUpdate = - new ReactTextUpdate(preparedSpannableText, mJsEventCount, mContainsImages); + new ReactTextUpdate(preparedSpannableText, mJsEventCount, mContainsImages, getPadding()); uiViewOperationQueue.enqueueUpdateExtraData(getReactTag(), reactTextUpdate); } }