mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-23 20:48:43 +00:00
Avoid triggering requestLayout during measure pass for setBubbleWidth.
This commit is contained in:
@@ -15,6 +15,7 @@ import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.components.emoji.EmojiImageView;
|
||||
import org.thoughtcrime.securesms.components.emoji.EmojiUtil;
|
||||
@@ -74,7 +75,7 @@ public class ReactionsConversationView extends LinearLayout {
|
||||
}
|
||||
|
||||
public boolean setBubbleWidth(int bubbleWidth) {
|
||||
if (bubbleWidth == this.bubbleWidth) {
|
||||
if (bubbleWidth == this.bubbleWidth || getChildCount() == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -93,18 +94,22 @@ public class ReactionsConversationView extends LinearLayout {
|
||||
int margin = (bubbleWidth - railWidth - OUTER_MARGIN);
|
||||
|
||||
if (outgoing) {
|
||||
ViewUtil.setRightMargin(this, margin);
|
||||
setEndMargin(margin);
|
||||
} else {
|
||||
ViewUtil.setLeftMargin(this, margin);
|
||||
setStartMargin(margin);
|
||||
}
|
||||
} else {
|
||||
if (outgoing) {
|
||||
ViewUtil.setRightMargin(this, OUTER_MARGIN);
|
||||
setEndMargin(OUTER_MARGIN);
|
||||
} else {
|
||||
ViewUtil.setLeftMargin(this, OUTER_MARGIN);
|
||||
setStartMargin(OUTER_MARGIN);
|
||||
}
|
||||
}
|
||||
|
||||
if (!isInLayout()) {
|
||||
requestLayout();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -161,6 +166,26 @@ public class ReactionsConversationView extends LinearLayout {
|
||||
}
|
||||
}
|
||||
|
||||
private void setStartMargin(int margin) {
|
||||
if (ViewUtil.isLtr(this)) {
|
||||
getMarginLayoutParams().leftMargin = margin;
|
||||
} else {
|
||||
getMarginLayoutParams().rightMargin = margin;
|
||||
}
|
||||
}
|
||||
|
||||
private void setEndMargin(int margin) {
|
||||
if (ViewUtil.isLtr(this)) {
|
||||
getMarginLayoutParams().rightMargin = margin;
|
||||
} else {
|
||||
getMarginLayoutParams().leftMargin = margin;
|
||||
}
|
||||
}
|
||||
|
||||
private @NonNull MarginLayoutParams getMarginLayoutParams() {
|
||||
return (MarginLayoutParams) getLayoutParams();
|
||||
}
|
||||
|
||||
private static View buildPill(@NonNull Context context, @NonNull ViewGroup parent, @NonNull Reaction reaction) {
|
||||
View root = LayoutInflater.from(context).inflate(R.layout.reactions_pill, parent, false);
|
||||
EmojiImageView emojiView = root.findViewById(R.id.reactions_pill_emoji);
|
||||
|
||||
Reference in New Issue
Block a user