diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java index f8b3fe2c3ee..c1c1c5bd51a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java @@ -1049,6 +1049,7 @@ class LoadingDrawableLocation { private int commentUnreadX; private boolean commentDrawUnread; private int commentWidth; + private CharSequence currentComment; private int commentX; private int totalCommentWidth; private int commentNumberWidth; @@ -4143,7 +4144,7 @@ private void setMessageContent(MessageObject messageObject, MessageObject.Groupe messageObject.translated != lastTranslated; boolean groupChanged = groupedMessages != currentMessagesGroup; boolean pollChanged = false; - + boolean captionChanged = currentCaption != messageObject.caption; if (!messageIdChanged && currentMessageObject != null) { messageObject.copyStableParams(currentMessageObject); } @@ -4512,7 +4513,12 @@ private void setMessageContent(MessageObject messageObject, MessageObject.Groupe } } commentWidth = totalCommentWidth = (int) Math.ceil(Theme.chat_commentTextPaint.measureText(comment)); - commentLayout = new StaticLayout(comment, Theme.chat_commentTextPaint, commentWidth + AndroidUtilities.dp(2), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); + boolean commentChanged = currentComment == null || !currentComment.equals(comment); + if (commentLayout == null || commentChanged) { + commentLayout = new StaticLayout(comment, Theme.chat_commentTextPaint, commentWidth + AndroidUtilities.dp(2), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); + currentComment = comment; + } + if (commentCount != 0 && !LocaleController.isRTL) { drawCommentNumber = true; if (commentNumberLayout == null) { @@ -6180,7 +6186,7 @@ private void setMessageContent(MessageObject messageObject, MessageObject.Groupe int width = backgroundWidth - AndroidUtilities.dp(31); widthForCaption = width - AndroidUtilities.dp(10) - getExtraTextX() * 2; - if (!messageObject.isRestrictedMessage && !TextUtils.isEmpty(messageObject.caption)) { + if (captionChanged && !messageObject.isRestrictedMessage && !TextUtils.isEmpty(messageObject.caption)) { try { currentCaption = messageObject.caption; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { @@ -6984,14 +6990,16 @@ private void setMessageContent(MessageObject messageObject, MessageObject.Groupe if (currentCaption != null) { try { widthForCaption -= getExtraTextX() * 2; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - captionLayout = StaticLayout.Builder.obtain(currentCaption, 0, currentCaption.length(), Theme.chat_msgTextPaint, widthForCaption) - .setBreakStrategy(StaticLayout.BREAK_STRATEGY_HIGH_QUALITY) - .setHyphenationFrequency(StaticLayout.HYPHENATION_FREQUENCY_NONE) - .setAlignment(Layout.Alignment.ALIGN_NORMAL) - .build(); - } else { - captionLayout = new StaticLayout(currentCaption, Theme.chat_msgTextPaint, widthForCaption, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); + if (captionLayout == null || captionChanged) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + captionLayout = StaticLayout.Builder.obtain(currentCaption, 0, currentCaption.length(), Theme.chat_msgTextPaint, widthForCaption) + .setBreakStrategy(StaticLayout.BREAK_STRATEGY_HIGH_QUALITY) + .setHyphenationFrequency(StaticLayout.HYPHENATION_FREQUENCY_NONE) + .setAlignment(Layout.Alignment.ALIGN_NORMAL) + .build(); + } else { + captionLayout = new StaticLayout(currentCaption, Theme.chat_msgTextPaint, widthForCaption, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); + } } updateCaptionSpoilers(); int lineCount = captionLayout.getLineCount(); @@ -7362,14 +7370,16 @@ private void setMessageContent(MessageObject messageObject, MessageObject.Groupe width -= AndroidUtilities.dp(24); } int widthForCaption = width - AndroidUtilities.dp(31 + (currentMessageObject.type != MessageObject.TYPE_ROUND_VIDEO ? 10 : 0)) - getExtraTextX() * 2; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - captionLayout = StaticLayout.Builder.obtain(currentCaption, 0, currentCaption.length(), Theme.chat_msgTextPaint, widthForCaption) - .setBreakStrategy(StaticLayout.BREAK_STRATEGY_HIGH_QUALITY) - .setHyphenationFrequency(StaticLayout.HYPHENATION_FREQUENCY_NONE) - .setAlignment(Layout.Alignment.ALIGN_NORMAL) - .build(); - } else { - captionLayout = new StaticLayout(currentCaption, Theme.chat_msgTextPaint, widthForCaption, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); + if (captionLayout == null || captionChanged) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + captionLayout = StaticLayout.Builder.obtain(currentCaption, 0, currentCaption.length(), Theme.chat_msgTextPaint, widthForCaption) + .setBreakStrategy(StaticLayout.BREAK_STRATEGY_HIGH_QUALITY) + .setHyphenationFrequency(StaticLayout.HYPHENATION_FREQUENCY_NONE) + .setAlignment(Layout.Alignment.ALIGN_NORMAL) + .build(); + } else { + captionLayout = new StaticLayout(currentCaption, Theme.chat_msgTextPaint, widthForCaption, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); + } } updateSeekBarWaveformWidth(null); updateCaptionSpoilers(); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ChatSelectionReactionMenuOverlay.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ChatSelectionReactionMenuOverlay.java index 9926104d16b..2f8287b4133 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ChatSelectionReactionMenuOverlay.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Reactions/ChatSelectionReactionMenuOverlay.java @@ -336,19 +336,23 @@ public void setSelectedMessages(List messages) { private void animateVisible(boolean visible) { if (visible) { - currentPrimaryObject = findPrimaryObject(); - checkCreateReactionsLayout(); - invalidatePosition(false); - setVisibility(VISIBLE); - if (reactionsContainerLayout.isEnabled()) { - messageSet = true; - reactionsContainerLayout.setMessage(currentPrimaryObject, parentFragment.getCurrentChatInfo()); - reactionsContainerLayout.startEnterAnimation(false); - } else { - messageSet = false; - reactionsContainerLayout.setTransitionProgress(1f); - } + + // The width of the current view must be calculated before creating [reactionsContainerLayout] + post(() -> { + currentPrimaryObject = findPrimaryObject(); + checkCreateReactionsLayout(); + invalidatePosition(false); + + if (reactionsContainerLayout.isEnabled()) { + messageSet = true; + reactionsContainerLayout.setMessage(currentPrimaryObject, parentFragment.getCurrentChatInfo()); + reactionsContainerLayout.startEnterAnimation(false); + } else { + messageSet = false; + reactionsContainerLayout.setTransitionProgress(1f); + } + }); } else { messageSet = false; ValueAnimator animator = ValueAnimator.ofFloat(1, 0).setDuration(150);