Avoid triggering requestLayout during measure pass for setBubbleWidth.

This commit is contained in:
Alex Hart
2023-09-19 10:15:06 -04:00
parent f3a8825cb9
commit da8df5beac

View File

@@ -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);