Fix spoilers not animating after leaving and returning to conversation.

Fixes #13015
This commit is contained in:
Cody Henthorne 2023-06-22 11:56:11 -04:00
parent c1b7b7c95e
commit bc1fbd9b6c
7 changed files with 21 additions and 6 deletions

View file

@ -68,9 +68,10 @@ public class EmojiTextView extends AppCompatTextView {
private TextDirectionHeuristic textDirection;
private boolean isJumbomoji;
private boolean forceJumboEmoji;
private boolean renderSpoilers;
private MentionRendererDelegate mentionRendererDelegate;
private final SpoilerRendererDelegate spoilerRendererDelegate;
private MentionRendererDelegate mentionRendererDelegate;
private SpoilerRendererDelegate spoilerRendererDelegate;
public EmojiTextView(Context context) {
this(context, null);
@ -90,6 +91,7 @@ public class EmojiTextView extends AppCompatTextView {
renderMentions = a.getBoolean(R.styleable.EmojiTextView_emoji_renderMentions, true);
measureLastLine = a.getBoolean(R.styleable.EmojiTextView_measureLastLine, false);
forceJumboEmoji = a.getBoolean(R.styleable.EmojiTextView_emoji_forceJumbo, false);
renderSpoilers = a.getBoolean(R.styleable.EmojiTextView_emoji_renderSpoilers, false);
a.recycle();
a = context.obtainStyledAttributes(attrs, new int[] { android.R.attr.textSize });
@ -99,7 +101,10 @@ public class EmojiTextView extends AppCompatTextView {
if (renderMentions) {
mentionRendererDelegate = new MentionRendererDelegate(getContext(), ContextCompat.getColor(getContext(), R.color.transparent_black_20));
}
spoilerRendererDelegate = new SpoilerRendererDelegate(this);
if (renderSpoilers) {
spoilerRendererDelegate = new SpoilerRendererDelegate(this);
}
textDirection = getLayoutDirection() == LAYOUT_DIRECTION_LTR ? TextDirectionHeuristics.FIRSTSTRONG_RTL : TextDirectionHeuristics.ANYRTL_LTR;
@ -127,14 +132,16 @@ public class EmojiTextView extends AppCompatTextView {
}
}
private void drawSpecialRenderers(@NonNull Canvas canvas, @Nullable MentionRendererDelegate mentionDelegate, @NonNull SpoilerRendererDelegate spoilerDelegate) {
private void drawSpecialRenderers(@NonNull Canvas canvas, @Nullable MentionRendererDelegate mentionDelegate, @Nullable SpoilerRendererDelegate spoilerDelegate) {
int checkpoint = canvas.save();
canvas.translate(getTotalPaddingLeft(), getTotalPaddingTop());
try {
if (mentionDelegate != null) {
mentionDelegate.draw(canvas, (Spanned) getText(), getLayout());
}
spoilerDelegate.draw(canvas, (Spanned) getText(), getLayout());
if (spoilerDelegate != null) {
spoilerDelegate.draw(canvas, (Spanned) getText(), getLayout());
}
} finally {
canvas.restoreToCount(checkpoint);
}
@ -431,7 +438,9 @@ public class EmojiTextView extends AppCompatTextView {
@Override
public void setTextColor(int color) {
super.setTextColor(color);
spoilerRendererDelegate.updateFromTextColor();
if (spoilerRendererDelegate != null) {
spoilerRendererDelegate.updateFromTextColor();
}
}
@Override

View file

@ -60,6 +60,7 @@ class SpoilerRendererDelegate @JvmOverloads constructor(
override fun onResume(owner: LifecycleOwner) {
canAnimate = true
systemAnimationsEnabled = !AccessibilityUtil.areAnimationsDisabled(view.context)
view.invalidate()
}
override fun onPause(owner: LifecycleOwner) {

View file

@ -228,6 +228,7 @@
app:emoji_maxLength="1000"
app:measureLastLine="true"
app:scaleEmojis="true"
app:emoji_renderSpoilers="true"
tools:text="Mango pickle lorem ipsum" />
<ViewStub

View file

@ -117,6 +117,7 @@
android:textColor="@color/signal_text_primary"
android:textColorLink="@color/signal_text_primary"
app:emoji_maxLength="1000"
app:emoji_renderSpoilers="true"
app:measureLastLine="true"
app:scaleEmojis="true"
tools:text="Mango pickle lorem ipsum" />

View file

@ -167,6 +167,7 @@
android:textColor="@color/conversation_item_sent_text_primary_color"
android:textColorLink="@color/conversation_item_sent_text_primary_color"
app:emoji_maxLength="1000"
app:emoji_renderSpoilers="true"
app:measureLastLine="true"
app:scaleEmojis="true"
tools:text="Mango pickle lorem ipsum" />

View file

@ -59,6 +59,7 @@
android:textColor="@color/conversation_item_sent_text_primary_color"
android:textColorLink="@color/conversation_item_sent_text_primary_color"
app:emoji_maxLength="1000"
app:emoji_renderSpoilers="true"
app:scaleEmojis="true"
app:measureLastLine="true"
tools:text="Mango pickle lorem ipsum" />

View file

@ -146,6 +146,7 @@
<attr name="emoji_forceCustom" format="boolean" />
<attr name="emoji_renderMentions" format="boolean" />
<attr name="emoji_forceJumbo" format="boolean" />
<attr name="emoji_renderSpoilers" format="boolean" />
</declare-styleable>
<declare-styleable name="EmojiImageView">