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 410f3ef54..285ddb3cc 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 @@ -41,9 +41,9 @@ public class ReactTextUpdate { mText = text; mJsEventCounter = jsEventCounter; mContainsImages = containsImages; - mPaddingLeft = padding.get(Spacing.LEFT); + mPaddingLeft = padding.get(Spacing.START); mPaddingTop = padding.get(Spacing.TOP); - mPaddingRight = padding.get(Spacing.RIGHT); + mPaddingRight = padding.get(Spacing.END); mPaddingBottom = padding.get(Spacing.BOTTOM); mLineHeight = lineHeight; mTextAlign = textAlign; 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 c33d26ced..246ce8120 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 @@ -16,6 +16,7 @@ import android.util.TypedValue; import android.view.ViewGroup; import android.widget.EditText; +import com.facebook.csslayout.CSSDirection; import com.facebook.csslayout.CSSMeasureMode; import com.facebook.csslayout.CSSNodeAPI; import com.facebook.csslayout.MeasureOutput; @@ -57,9 +58,9 @@ public class ReactTextInputShadowNode extends ReactTextShadowNode implements ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); - setDefaultPadding(Spacing.LEFT, mEditText.getPaddingLeft()); + setDefaultPadding(Spacing.START, mEditText.getPaddingStart()); setDefaultPadding(Spacing.TOP, mEditText.getPaddingTop()); - setDefaultPadding(Spacing.RIGHT, mEditText.getPaddingRight()); + setDefaultPadding(Spacing.END, mEditText.getPaddingEnd()); setDefaultPadding(Spacing.BOTTOM, mEditText.getPaddingBottom()); mComputedPadding = spacingToFloatArray(getPadding()); } @@ -81,9 +82,9 @@ public class ReactTextInputShadowNode extends ReactTextShadowNode implements (int) Math.ceil(PixelUtil.toPixelFromSP(ViewDefaults.FONT_SIZE_SP)) : mFontSize); mComputedPadding = spacingToFloatArray(getPadding()); editText.setPadding( - (int) Math.ceil(getPadding().get(Spacing.LEFT)), + (int) Math.ceil(getPadding().get(Spacing.START)), (int) Math.ceil(getPadding().get(Spacing.TOP)), - (int) Math.ceil(getPadding().get(Spacing.RIGHT)), + (int) Math.ceil(getPadding().get(Spacing.END)), (int) Math.ceil(getPadding().get(Spacing.BOTTOM))); if (mNumberOfLines != UNSET) { @@ -112,7 +113,11 @@ public class ReactTextInputShadowNode extends ReactTextShadowNode implements public void onCollectExtraUpdates(UIViewOperationQueue uiViewOperationQueue) { super.onCollectExtraUpdates(uiViewOperationQueue); if (mComputedPadding != null) { - uiViewOperationQueue.enqueueUpdateExtraData(getReactTag(), mComputedPadding); + float[] updatedPadding = mComputedPadding; + if (getLayoutDirection() == CSSDirection.RTL) { + updatedPadding = spacingToFloatArrayForRTL(getPadding()); + } + uiViewOperationQueue.enqueueUpdateExtraData(getReactTag(), updatedPadding); mComputedPadding = null; } @@ -138,11 +143,22 @@ public class ReactTextInputShadowNode extends ReactTextShadowNode implements markUpdated(); } - private static float[] spacingToFloatArray(Spacing spacing) { + private float[] spacingToFloatArray(Spacing spacing) { return new float[] { - spacing.get(Spacing.LEFT), + spacing.get(Spacing.START), spacing.get(Spacing.TOP), - spacing.get(Spacing.RIGHT), + spacing.get(Spacing.END), + spacing.get(Spacing.BOTTOM), + }; + } + + // Since TextInput communicate with native component but not CSSLayout, + // So flip the padding for RTL is necessary when the padding is updated + private float[] spacingToFloatArrayForRTL(Spacing spacing) { + return new float[] { + spacing.get(Spacing.END), + spacing.get(Spacing.TOP), + spacing.get(Spacing.START), spacing.get(Spacing.BOTTOM), }; }