Fix chevron placement for rtl languages.

This commit is contained in:
Michelle Tang
2025-03-21 11:42:10 -04:00
committed by Cody Henthorne
parent cef839d300
commit a681d06de5
6 changed files with 53 additions and 19 deletions

View File

@@ -14,6 +14,7 @@ import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.util.ContextUtil
import org.thoughtcrime.securesms.util.ServiceUtil
import org.thoughtcrime.securesms.util.SpanUtil
import org.thoughtcrime.securesms.util.ViewUtil
import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
import org.thoughtcrime.securesms.util.adapter.mapping.MappingViewHolder
@@ -70,18 +71,24 @@ object BioTextPreference {
}
if (recipient.isIndividual && !recipient.isSelf) {
val isLtr = ViewUtil.isLtr(context)
val chevronGlyph = SignalSymbols.getSpannedString(
context,
SignalSymbols.Weight.BOLD,
SignalSymbols.Glyph.CHEVRON_RIGHT
if (isLtr) SignalSymbols.Glyph.CHEVRON_RIGHT else SignalSymbols.Glyph.CHEVRON_LEFT
).let {
SpanUtil.ofSize(it, 24)
}.let {
SpanUtil.color(ContextCompat.getColor(context, R.color.signal_colorOutline), it)
}
append(" ")
append(chevronGlyph)
if (isLtr) {
append(" ")
append(chevronGlyph)
} else {
insert(0, " ")
insert(0, chevronGlyph)
}
}
}
}

View File

@@ -20,6 +20,7 @@ import org.thoughtcrime.securesms.fonts.SignalSymbols
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.service.webrtc.PendingParticipantCollection
import org.thoughtcrime.securesms.util.SpanUtil
import org.thoughtcrime.securesms.util.ViewUtil
import org.thoughtcrime.securesms.util.visible
/**
@@ -59,14 +60,26 @@ class PendingParticipantsView @JvmOverloads constructor(
avatar.setAvatar(firstRecipient)
avatar.setOnClickListener { listener?.onLaunchRecipientSheet(firstRecipient) }
name.text = SpannableStringBuilder(firstRecipient.getShortDisplayName(context))
.append(" ")
.append(
SpanUtil.ofSize(
SignalSymbols.getSpannedString(context, SignalSymbols.Weight.REGULAR, SignalSymbols.Glyph.CHEVRON_RIGHT),
16
name.text = if (ViewUtil.isLtr(this)) {
SpannableStringBuilder(firstRecipient.getShortDisplayName(context))
.append(" ")
.append(
SpanUtil.ofSize(
SignalSymbols.getSpannedString(context, SignalSymbols.Weight.REGULAR, SignalSymbols.Glyph.CHEVRON_RIGHT),
16
)
)
)
} else {
SpannableStringBuilder(firstRecipient.getShortDisplayName(context))
.insert(0, " ")
.insert(
0,
SpanUtil.ofSize(
SignalSymbols.getSpannedString(context, SignalSymbols.Weight.REGULAR, SignalSymbols.Glyph.CHEVRON_LEFT),
16
)
)
}
name.setOnClickListener { listener?.onLaunchRecipientSheet(firstRecipient) }
allow.setOnClickListener { listener?.onAllowPendingRecipient(firstRecipient) }

View File

@@ -136,9 +136,16 @@ public class ConversationHeaderView extends ConstraintLayout {
}
if (recipient.isIndividual() && !recipient.isSelf()) {
CharSequence chevronRight = SignalSymbols.getSpannedString(getContext(), SignalSymbols.Weight.BOLD, SignalSymbols.Glyph.CHEVRON_RIGHT, R.color.signal_colorOutline);
title.append(" ");
title.append(SpanUtil.ofSize(chevronRight, 24));
boolean isLtr = ViewUtil.isLtr(this);
CharSequence chevron = SignalSymbols.getSpannedString(getContext(), SignalSymbols.Weight.BOLD, isLtr ? SignalSymbols.Glyph.CHEVRON_RIGHT : SignalSymbols.Glyph.CHEVRON_LEFT, R.color.signal_colorOutline);
if (isLtr) {
title.append(" ");
title.append(SpanUtil.ofSize(chevron, 24));
} else {
title.insert(0, " ");
title.insert(0, SpanUtil.ofSize(chevron, 24));
}
binding.messageRequestTitle.setOnClickListener(v -> onTitleClicked.run());
} else {

View File

@@ -26,6 +26,7 @@ object SignalSymbols {
enum class Glyph(val unicode: Char) {
CHECKMARK('\u2713'),
CHEVRON_LEFT('\uE024'),
CHEVRON_RIGHT('\uE025'),
PERSON_CIRCLE('\uE05E'),
LOCK('\uE041')

View File

@@ -47,6 +47,7 @@ import org.thoughtcrime.securesms.util.BottomSheetUtil
import org.thoughtcrime.securesms.util.ContextUtil
import org.thoughtcrime.securesms.util.SpanUtil
import org.thoughtcrime.securesms.util.ThemeUtil
import org.thoughtcrime.securesms.util.ViewUtil
import org.thoughtcrime.securesms.util.WindowUtil
import org.thoughtcrime.securesms.util.visible
@@ -234,16 +235,20 @@ class RecipientBottomSheetDialogFragment : BottomSheetDialogFragment() {
}
if (!recipient.isSelf && recipient.isIndividual) {
val isLtr = ViewUtil.isLtr(view)
val chevronGlyph = SignalSymbols.getSpannedString(
requireContext(),
SignalSymbols.Weight.BOLD,
SignalSymbols.Glyph.CHEVRON_RIGHT
if (isLtr) SignalSymbols.Glyph.CHEVRON_RIGHT else SignalSymbols.Glyph.CHEVRON_LEFT
)
nameBuilder.append(" ")
nameBuilder.append(
SpanUtil.color(ContextCompat.getColor(requireContext(), R.color.signal_colorOutline), SpanUtil.ofSize(chevronGlyph, 24))
)
if (isLtr) {
nameBuilder.append(" ")
nameBuilder.append(SpanUtil.color(ContextCompat.getColor(requireContext(), R.color.signal_colorOutline), SpanUtil.ofSize(chevronGlyph, 24)))
} else {
nameBuilder.insert(0, " ")
nameBuilder.insert(0, SpanUtil.color(ContextCompat.getColor(requireContext(), R.color.signal_colorOutline), SpanUtil.ofSize(chevronGlyph, 24)))
}
fullName.text = nameBuilder
fullName.setOnClickListener {

View File

@@ -2,7 +2,8 @@
android:width="16dp"
android:height="16dp"
android:viewportWidth="16"
android:viewportHeight="16">
android:viewportHeight="16"
android:autoMirrored="true">
<path
android:pathData="M5.47,2.47a0.75,0.75 0,0 1,1.06 0l5,5a0.75,0.75 0,0 1,0 1.06l-5,5a0.75,0.75 0,0 1,-1.06 -1.06L9.94,8 5.47,3.53a0.75,0.75 0,0 1,0 -1.06Z"
android:fillColor="#000"/>