Fix spoilers not animating after leaving and returning to conversation.
Fixes #13015
This commit is contained in:
parent
c1b7b7c95e
commit
bc1fbd9b6c
7 changed files with 21 additions and 6 deletions
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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" />
|
||||
|
|
|
@ -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" />
|
||||
|
|
|
@ -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" />
|
||||
|
|
|
@ -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">
|
||||
|
|
Loading…
Add table
Reference in a new issue