mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-22 20:18:36 +00:00
Fix flickering text caused by calling onSizeChanged en-masse.
This commit is contained in:
committed by
Greyson Parrelli
parent
ecf06647c6
commit
90094fbb11
@@ -26,13 +26,13 @@ import android.view.ViewGroup;
|
|||||||
import androidx.annotation.ColorInt;
|
import androidx.annotation.ColorInt;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.annotation.Px;
|
||||||
import androidx.appcompat.widget.AppCompatTextView;
|
import androidx.appcompat.widget.AppCompatTextView;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.core.view.GestureDetectorCompat;
|
import androidx.core.view.GestureDetectorCompat;
|
||||||
import androidx.core.view.ViewKt;
|
import androidx.core.view.ViewKt;
|
||||||
import androidx.core.widget.TextViewCompat;
|
import androidx.core.widget.TextViewCompat;
|
||||||
|
|
||||||
import org.signal.core.util.logging.Log;
|
|
||||||
import org.thoughtcrime.securesms.R;
|
import org.thoughtcrime.securesms.R;
|
||||||
import org.thoughtcrime.securesms.components.emoji.parsing.EmojiParser;
|
import org.thoughtcrime.securesms.components.emoji.parsing.EmojiParser;
|
||||||
import org.thoughtcrime.securesms.components.mention.MentionAnnotation;
|
import org.thoughtcrime.securesms.components.mention.MentionAnnotation;
|
||||||
@@ -57,6 +57,14 @@ public class EmojiTextView extends AppCompatTextView {
|
|||||||
private static final char ELLIPSIS = '…';
|
private static final char ELLIPSIS = '…';
|
||||||
private static final float JUMBOMOJI_SCALE = 0.8f;
|
private static final float JUMBOMOJI_SCALE = 0.8f;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Due to how ConstraintLayout works, we can end up with looping onSizeChanged
|
||||||
|
* as we try to figure out how long this thing should be. So, this adds a bit
|
||||||
|
* of slop so we don't have dancing text.
|
||||||
|
*/
|
||||||
|
@Px
|
||||||
|
private static final int SKIP_SET_TEXT_THRESHOLD = 2;
|
||||||
|
|
||||||
private CharSequence previousText;
|
private CharSequence previousText;
|
||||||
private BufferType previousBufferType;
|
private BufferType previousBufferType;
|
||||||
private TransformationMethod previousTransformationMethod;
|
private TransformationMethod previousTransformationMethod;
|
||||||
@@ -74,6 +82,8 @@ public class EmojiTextView extends AppCompatTextView {
|
|||||||
private boolean forceJumboEmoji;
|
private boolean forceJumboEmoji;
|
||||||
private boolean renderSpoilers;
|
private boolean renderSpoilers;
|
||||||
private boolean shrinkWrap;
|
private boolean shrinkWrap;
|
||||||
|
private int lastSizeChangedWidth = -1;
|
||||||
|
private int lastSizeChangedHeight = -1;
|
||||||
|
|
||||||
private MentionRendererDelegate mentionRendererDelegate;
|
private MentionRendererDelegate mentionRendererDelegate;
|
||||||
private SpoilerRendererDelegate spoilerRendererDelegate;
|
private SpoilerRendererDelegate spoilerRendererDelegate;
|
||||||
@@ -450,6 +460,16 @@ public class EmojiTextView extends AppCompatTextView {
|
|||||||
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
|
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
|
||||||
super.onSizeChanged(w, h, oldw, oldh);
|
super.onSizeChanged(w, h, oldw, oldh);
|
||||||
|
|
||||||
|
int deltaLastChangeWidth = Math.abs(lastSizeChangedWidth - w);
|
||||||
|
int deltaLastChangeHeight = Math.abs(lastSizeChangedHeight - h);
|
||||||
|
|
||||||
|
if (deltaLastChangeWidth <= SKIP_SET_TEXT_THRESHOLD && deltaLastChangeHeight <= SKIP_SET_TEXT_THRESHOLD) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
lastSizeChangedWidth = w;
|
||||||
|
lastSizeChangedHeight = h;
|
||||||
|
|
||||||
if (!sizeChangeInProgress) {
|
if (!sizeChangeInProgress) {
|
||||||
sizeChangeInProgress = true;
|
sizeChangeInProgress = true;
|
||||||
setText(previousText, previousBufferType);
|
setText(previousText, previousBufferType);
|
||||||
|
|||||||
Reference in New Issue
Block a user