Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 0 additions & 37 deletions packages/react-native/ReactAndroid/api/ReactAndroid.api
Original file line number Diff line number Diff line change
Expand Up @@ -6133,44 +6133,17 @@ public final class com/facebook/react/views/text/ReactTextShadowNode : com/faceb
public final fun setShouldNotifyOnTextLayout (Z)V
}

public final class com/facebook/react/views/text/ReactTextUpdate {
public static final field Companion Lcom/facebook/react/views/text/ReactTextUpdate$Companion;
public fun <init> (Landroid/text/Spannable;IZFFFFI)V
public fun <init> (Landroid/text/Spannable;IZFFFFIII)V
public fun <init> (Landroid/text/Spannable;IZIII)V
public static final fun buildReactTextUpdateFromState (Landroid/text/Spannable;IIII)Lcom/facebook/react/views/text/ReactTextUpdate;
public final fun containsImages ()Z
public final fun getContainsImages ()Z
public final fun getJsEventCounter ()I
public final fun getJustificationMode ()I
public final fun getPaddingBottom ()F
public final fun getPaddingLeft ()F
public final fun getPaddingRight ()F
public final fun getPaddingTop ()F
public final fun getText ()Landroid/text/Spannable;
public final fun getTextAlign ()I
public final fun getTextBreakStrategy ()I
}

public final class com/facebook/react/views/text/ReactTextUpdate$Companion {
public final fun buildReactTextUpdateFromState (Landroid/text/Spannable;IIII)Lcom/facebook/react/views/text/ReactTextUpdate;
}

public class com/facebook/react/views/text/ReactTextView : androidx/appcompat/widget/AppCompatTextView, com/facebook/react/uimanager/ReactCompoundView {
public fun <init> (Landroid/content/Context;)V
protected fun dispatchHoverEvent (Landroid/view/MotionEvent;)Z
public fun dispatchKeyEvent (Landroid/view/KeyEvent;)Z
public fun getSpanned ()Landroid/text/Spannable;
public fun hasOverlappingRendering ()Z
public fun invalidateDrawable (Landroid/graphics/drawable/Drawable;)V
public fun onAttachedToWindow ()V
public fun onDetachedFromWindow ()V
protected fun onDraw (Landroid/graphics/Canvas;)V
public fun onFinishTemporaryDetach ()V
public final fun onFocusChanged (ZILandroid/graphics/Rect;)V
protected fun onLayout (ZIIII)V
protected fun onMeasure (II)V
public fun onStartTemporaryDetach ()V
public fun reactTagForTouch (FF)I
public fun setAdjustFontSizeToFit (Z)V
public fun setBackgroundColor (I)V
Expand All @@ -6193,7 +6166,6 @@ public class com/facebook/react/views/text/ReactTextView : androidx/appcompat/wi
public fun setText (Lcom/facebook/react/views/text/ReactTextUpdate;)V
public fun setTextIsSelectable (Z)V
public fun updateView ()V
protected fun verifyDrawable (Landroid/graphics/drawable/Drawable;)Z
}

public final class com/facebook/react/views/text/ReactTextViewManager : com/facebook/react/views/text/ReactTextAnchorViewManager, com/facebook/react/uimanager/IViewManagerWithChildren, com/facebook/react/views/text/ReactTextViewManagerCallback {
Expand Down Expand Up @@ -6344,7 +6316,6 @@ public class com/facebook/react/views/textinput/ReactEditText : androidx/appcomp
public final fun canUpdateWithEventCount (I)Z
protected final fun finalize ()V
public final fun getBorderColor (I)I
protected final fun getContainsImages ()Z
public final fun getDisableFullscreenUI ()Z
public final fun getDragAndDropFilter ()Ljava/util/List;
protected final fun getNativeEventCount ()I
Expand All @@ -6354,27 +6325,21 @@ public class com/facebook/react/views/textinput/ReactEditText : androidx/appcomp
public final fun getSubmitBehavior ()Ljava/lang/String;
protected final fun hideSoftKeyboard ()V
public final fun incrementAndGetEventCounter ()I
public fun invalidateDrawable (Landroid/graphics/drawable/Drawable;)V
public fun isLayoutRequested ()Z
protected final fun isSettingTextFromJS ()Z
protected final fun isSettingTextFromState ()Z
public final fun maybeSetSelection (III)V
public final fun maybeSetTextFromJS (Lcom/facebook/react/views/text/ReactTextUpdate;)V
public final fun maybeSetTextFromState (Lcom/facebook/react/views/text/ReactTextUpdate;)V
public final fun maybeUpdateTypeface ()V
public fun onAttachedToWindow ()V
public fun onConfigurationChanged (Landroid/content/res/Configuration;)V
public fun onCreateInputConnection (Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection;
public fun onDetachedFromWindow ()V
public fun onDragEvent (Landroid/view/DragEvent;)Z
public fun onDraw (Landroid/graphics/Canvas;)V
public fun onFinishTemporaryDetach ()V
protected fun onFocusChanged (ZILandroid/graphics/Rect;)V
public fun onKeyUp (ILandroid/view/KeyEvent;)Z
protected fun onLayout (ZIIII)V
protected fun onScrollChanged (IIII)V
protected fun onSelectionChanged (II)V
public fun onStartTemporaryDetach ()V
public fun onTextContextMenuItem (I)Z
public fun onTouchEvent (Landroid/view/MotionEvent;)Z
public fun removeTextChangedListener (Landroid/text/TextWatcher;)V
Expand All @@ -6387,7 +6352,6 @@ public class com/facebook/react/views/textinput/ReactEditText : androidx/appcomp
public final fun setBorderRadius (FI)V
public final fun setBorderStyle (Ljava/lang/String;)V
public final fun setBorderWidth (IF)V
protected final fun setContainsImages (Z)V
public final fun setContentSizeWatcher (Lcom/facebook/react/views/textinput/ContentSizeWatcher;)V
public final fun setContextMenuHidden (Z)V
public final fun setDisableFullscreenUI (Z)V
Expand Down Expand Up @@ -6418,7 +6382,6 @@ public class com/facebook/react/views/textinput/ReactEditText : androidx/appcomp
public final fun shouldBlurOnReturn ()Z
public final fun shouldSubmitOnReturn ()Z
protected final fun showSoftKeyboard ()Z
protected fun verifyDrawable (Landroid/graphics/drawable/Drawable;)Z
}

public final class com/facebook/react/views/textinput/ReactEditText$Companion {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ import com.facebook.react.views.swiperefresh.SwipeRefreshLayoutManager
import com.facebook.react.views.switchview.ReactSwitchManager
import com.facebook.react.views.text.PreparedLayoutTextViewManager
import com.facebook.react.views.text.ReactTextViewManager
import com.facebook.react.views.text.frescosupport.FrescoBasedReactTextInlineImageViewManager
import com.facebook.react.views.textinput.ReactTextInputManager
import com.facebook.react.views.unimplementedview.ReactUnimplementedViewManager
import com.facebook.react.views.view.ReactViewManager
Expand Down Expand Up @@ -146,7 +145,6 @@ constructor(private val config: MainPackageConfig? = null) :
ReactSafeAreaViewManager(),
SwipeRefreshLayoutManager(),
// Native equivalents
FrescoBasedReactTextInlineImageViewManager(),
ReactImageManager(),
ReactModalHostManager(),
ReactTextInputManager(),
Expand Down Expand Up @@ -183,8 +181,6 @@ constructor(private val config: MainPackageConfig? = null) :
ReactSwitchManager.REACT_CLASS to ModuleSpec.viewManagerSpec { ReactSwitchManager() },
SwipeRefreshLayoutManager.REACT_CLASS to
ModuleSpec.viewManagerSpec { SwipeRefreshLayoutManager() },
FrescoBasedReactTextInlineImageViewManager.REACT_CLASS to
ModuleSpec.viewManagerSpec { FrescoBasedReactTextInlineImageViewManager() },
ReactImageManager.REACT_CLASS to ModuleSpec.viewManagerSpec { ReactImageManager() },
ReactModalHostManager.REACT_CLASS to
ModuleSpec.viewManagerSpec { ReactModalHostManager() },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,80 +7,20 @@

package com.facebook.react.views.text

import android.text.Layout
import android.text.Spannable
import com.facebook.react.common.ReactConstants
import android.text.Spanned

/** Class that contains the data needed for a text update. Used by both <Text/> and <TextInput/>. */
public class ReactTextUpdate(
public val text: Spannable,
internal class ReactTextUpdate(
public val text: Spanned,
public val jsEventCounter: Int,
public val containsImages: Boolean,
public val paddingLeft: Float,
public val paddingTop: Float,
public val paddingRight: Float,
public val paddingBottom: Float,
public val textAlign: Int,
public val textBreakStrategy: Int,
public val justificationMode: Int,
) {

/**
* @deprecated Use a non-deprecated constructor for ReactTextUpdate instead. This one remains
* because it's being used by a unit test that isn't currently open source.
*/
public constructor(
text: Spannable,
jsEventCounter: Int,
containsImages: Boolean,
paddingStart: Float,
paddingTop: Float,
paddingEnd: Float,
paddingBottom: Float,
textAlign: Int,
) : this(
text,
jsEventCounter,
containsImages,
paddingStart,
paddingTop,
paddingEnd,
paddingBottom,
textAlign,
Layout.BREAK_STRATEGY_HIGH_QUALITY,
Layout.JUSTIFICATION_MODE_NONE,
)

public constructor(
text: Spannable,
jsEventCounter: Int,
containsImages: Boolean,
textAlign: Int,
textBreakStrategy: Int,
justificationMode: Int,
) : this(
text,
jsEventCounter,
containsImages,
ReactConstants.UNSET.toFloat(),
ReactConstants.UNSET.toFloat(),
ReactConstants.UNSET.toFloat(),
ReactConstants.UNSET.toFloat(),
textAlign,
textBreakStrategy,
justificationMode,
)

@Deprecated(
"This is just for backwards compatibility and will be removed some time in the future",
ReplaceWith("containsImages"),
)
public fun containsImages(): Boolean = containsImages

public companion object {
@JvmStatic
public fun buildReactTextUpdateFromState(
text: Spannable,
text: Spanned,
jsEventCounter: Int,
textAlign: Int,
textBreakStrategy: Int,
Expand All @@ -89,7 +29,6 @@ public class ReactTextUpdate(
ReactTextUpdate(
text,
jsEventCounter,
false,
textAlign,
textBreakStrategy,
justificationMode,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.text.Layout;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
Expand Down Expand Up @@ -53,7 +53,6 @@
import com.facebook.react.uimanager.style.LogicalEdge;
import com.facebook.react.uimanager.style.Overflow;
import com.facebook.react.views.text.internal.span.ReactTagSpan;
import com.facebook.react.views.text.internal.span.TextInlineImageSpan;
import com.facebook.react.views.text.internal.span.TextInlineViewPlaceholderSpan;
import com.facebook.yoga.YogaMeasureMode;

Expand All @@ -66,7 +65,6 @@ public class ReactTextView extends AppCompatTextView implements ReactCompoundVie
// https://github.com/aosp-mirror/platform_frameworks_base/blob/master/core/java/android/widget/TextView.java#L854
private static final int DEFAULT_GRAVITY = Gravity.TOP | Gravity.START;

private boolean mContainsImages;
private int mNumberOfLines;
private @Nullable TextUtils.TruncateAt mEllipsizeLocation;
private boolean mAdjustsFontSizeToFit;
Expand Down Expand Up @@ -377,38 +375,21 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

public void setText(ReactTextUpdate update) {
try (SystraceSection s = new SystraceSection("ReactTextView.setText(ReactTextUpdate)")) {
mContainsImages = update.containsImages();
// Android's TextView crashes when it tries to relayout if LayoutParams are
// null; explicitly set the LayoutParams to prevent this crash. See:
// https://github.com/facebook/react-native/pull/7011
if (getLayoutParams() == null) {
setLayoutParams(EMPTY_LAYOUT_PARAMS);
}
Spannable spannable = update.getText();
Spanned spanned = update.getText();
if (mLinkifyMaskType > 0) {
Linkify.addLinks(spannable, mLinkifyMaskType);
if (!(spanned instanceof Spannable)) {
spanned = new SpannableString(spanned);
}
Linkify.addLinks((Spannable) spanned, mLinkifyMaskType);
setMovementMethod(LinkMovementMethod.getInstance());
}
setText(spannable);
float paddingLeft = update.getPaddingLeft();
float paddingTop = update.getPaddingTop();
float paddingRight = update.getPaddingRight();
float paddingBottom = update.getPaddingBottom();

// In Fabric padding is set by the update of Layout Metrics and not as part of the "setText"
// operation
// TODO T56559197: remove this condition when we migrate 100% to Fabric
if (paddingLeft != ReactConstants.UNSET
&& paddingTop != ReactConstants.UNSET
&& paddingRight != ReactConstants.UNSET
&& paddingBottom != ReactConstants.UNSET) {

setPadding(
(int) Math.floor(paddingLeft),
(int) Math.floor(paddingTop),
(int) Math.floor(paddingRight),
(int) Math.floor(paddingBottom));
}
setText(spanned);

int nextTextAlign = update.getTextAlign();
if (nextTextAlign != getGravityHorizontal()) {
Expand Down Expand Up @@ -481,58 +462,6 @@ public int reactTagForTouch(float touchX, float touchY) {
return target;
}

@Override
protected boolean verifyDrawable(Drawable drawable) {
if (mContainsImages && getText() instanceof Spanned) {
Spanned text = (Spanned) getText();
TextInlineImageSpan[] spans = text.getSpans(0, text.length(), TextInlineImageSpan.class);
for (TextInlineImageSpan span : spans) {
if (span.getDrawable() == drawable) {
return true;
}
}
}
return super.verifyDrawable(drawable);
}

@Override
public void invalidateDrawable(Drawable drawable) {
if (mContainsImages && getText() instanceof Spanned) {
Spanned text = (Spanned) getText();
TextInlineImageSpan[] spans = text.getSpans(0, text.length(), TextInlineImageSpan.class);
for (TextInlineImageSpan span : spans) {
if (span.getDrawable() == drawable) {
invalidate();
}
}
}
super.invalidateDrawable(drawable);
}

@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
if (mContainsImages && getText() instanceof Spanned) {
Spanned text = (Spanned) getText();
TextInlineImageSpan[] spans = text.getSpans(0, text.length(), TextInlineImageSpan.class);
for (TextInlineImageSpan span : spans) {
span.onDetachedFromWindow();
}
}
}

@Override
public void onStartTemporaryDetach() {
super.onStartTemporaryDetach();
if (mContainsImages && getText() instanceof Spanned) {
Spanned text = (Spanned) getText();
TextInlineImageSpan[] spans = text.getSpans(0, text.length(), TextInlineImageSpan.class);
for (TextInlineImageSpan span : spans) {
span.onStartTemporaryDetach();
}
}
}

@Override
public void setTextIsSelectable(boolean selectable) {
mTextIsSelectable = selectable;
Expand All @@ -551,26 +480,6 @@ public void onAttachedToWindow() {
} else {
setTextIsSelectable(false);
}

if (mContainsImages && getText() instanceof Spanned) {
Spanned text = (Spanned) getText();
TextInlineImageSpan[] spans = text.getSpans(0, text.length(), TextInlineImageSpan.class);
for (TextInlineImageSpan span : spans) {
span.onAttachedToWindow();
}
}
}

@Override
public void onFinishTemporaryDetach() {
super.onFinishTemporaryDetach();
if (mContainsImages && getText() instanceof Spanned) {
Spanned text = (Spanned) getText();
TextInlineImageSpan[] spans = text.getSpans(0, text.length(), TextInlineImageSpan.class);
for (TextInlineImageSpan span : spans) {
span.onFinishTemporaryDetach();
}
}
}

@Override
Expand Down
Loading
Loading