Fix infinite post loop when parent is GONE.

This commit is contained in:
Rashad Sookram 2022-01-18 09:47:42 -05:00
parent bf2ab74ca4
commit 5a51544cae

View file

@ -23,6 +23,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.core.content.ContextCompat;
import androidx.core.view.ViewKt;
import androidx.core.widget.TextViewCompat;
import org.thoughtcrime.securesms.R;
@ -35,6 +36,8 @@ import org.whispersystems.libsignal.util.guava.Optional;
import java.util.List;
import kotlin.Unit;
public class EmojiTextView extends AppCompatTextView {
@ -269,12 +272,7 @@ public class EmojiTextView extends AppCompatTextView {
}
private void ellipsizeEmojiTextForMaxLines() {
post(() -> {
if (getLayout() == null) {
ellipsizeEmojiTextForMaxLines();
return;
}
Runnable ellipsize = () -> {
int maxLines = TextViewCompat.getMaxLines(EmojiTextView.this);
if (maxLines <= 0 && maxLength < 0) {
return;
@ -282,10 +280,10 @@ public class EmojiTextView extends AppCompatTextView {
int lineCount = getLineCount();
if (lineCount > maxLines) {
int overflowStart = getLayout().getLineStart(maxLines - 1);
CharSequence overflow = getText().subSequence(overflowStart, getText().length());
float adjust = overflowText != null ? getPaint().measureText(overflowText, 0, overflowText.length()) : 0f;
CharSequence ellipsized = TextUtils.ellipsize(overflow, getPaint(), getWidth() - adjust, TextUtils.TruncateAt.END);
int overflowStart = getLayout().getLineStart(maxLines - 1);
CharSequence overflow = getText().subSequence(overflowStart, getText().length());
float adjust = overflowText != null ? getPaint().measureText(overflowText, 0, overflowText.length()) : 0f;
CharSequence ellipsized = TextUtils.ellipsize(overflow, getPaint(), getWidth() - adjust, TextUtils.TruncateAt.END);
SpannableStringBuilder newContent = new SpannableStringBuilder();
newContent.append(getText().subSequence(0, overflowStart))
@ -297,7 +295,16 @@ public class EmojiTextView extends AppCompatTextView {
super.setText(emojified, BufferType.SPANNABLE);
}
});
};
if (getLayout() != null) {
ellipsize.run();
} else {
ViewKt.doOnNextLayout(this, view -> {
ellipsize.run();
return Unit.INSTANCE;
});
}
}
private boolean unchanged(CharSequence text, CharSequence overflowText, BufferType bufferType) {