Add chevron to conversation heading.

This commit is contained in:
Alex Hart 2024-04-01 15:39:22 -03:00 committed by Greyson Parrelli
parent 133b7ef3f1
commit 544cc06f13
6 changed files with 31 additions and 11 deletions

View file

@ -67,7 +67,8 @@ class InternalConversationTestFragment : Fragment(R.layout.conversation_test_fra
hasWallpaper = springboardViewModel.hasWallpaper.value,
colorizer = Colorizer(),
startExpirationTimeout = {},
chatColorsDataProvider = { ChatColorsDrawable.ChatColorsData(null, null) }
chatColorsDataProvider = { ChatColorsDrawable.ChatColorsData(null, null) },
displayDialogFragment = {}
)
if (springboardViewModel.hasWallpaper.value) {

View file

@ -25,6 +25,7 @@ import org.thoughtcrime.securesms.contacts.avatars.FallbackContactPhoto;
import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto;
import org.thoughtcrime.securesms.database.SignalDatabase;
import org.thoughtcrime.securesms.databinding.ConversationHeaderViewBinding;
import org.thoughtcrime.securesms.fonts.SignalSymbols;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.ContextUtil;
import org.thoughtcrime.securesms.util.LongClickMovementMethod;
@ -75,11 +76,22 @@ public class ConversationHeaderView extends ConstraintLayout {
}
}
public String setTitle(@NonNull Recipient recipient) {
public String setTitle(@NonNull Recipient recipient, @NonNull Runnable onTitleClicked) {
SpannableStringBuilder title = new SpannableStringBuilder(recipient.isSelf() ? getContext().getString(R.string.note_to_self) : recipient.getDisplayName(getContext()));
if (recipient.showVerified()) {
SpanUtil.appendCenteredImageSpan(title, ContextUtil.requireDrawable(getContext(), R.drawable.ic_official_28), 28, 28);
}
if (recipient.isIndividual() && !recipient.isSelf()) {
CharSequence chevronRight = SignalSymbols.getSpannedString(getContext(), SignalSymbols.Weight.BOLD, SignalSymbols.Glyph.CHEVRON_RIGHT);
title.append(" ");
title.append(SpanUtil.ofSize(chevronRight, 24));
binding.messageRequestTitle.setOnClickListener(v -> onTitleClicked.run());
} else {
binding.messageRequestTitle.setOnClickListener(null);
}
binding.messageRequestTitle.setText(title);
return title.toString();
}

View file

@ -10,6 +10,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.core.text.HtmlCompat
import androidx.core.view.children
import androidx.fragment.app.DialogFragment
import androidx.lifecycle.LifecycleOwner
import androidx.media3.common.MediaItem
import androidx.recyclerview.widget.RecyclerView
@ -52,6 +53,7 @@ import org.thoughtcrime.securesms.groups.v2.GroupDescriptionUtil
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.recipients.ui.about.AboutSheet
import org.thoughtcrime.securesms.util.CachedInflater
import org.thoughtcrime.securesms.util.Projection
import org.thoughtcrime.securesms.util.ProjectionList
@ -67,7 +69,8 @@ class ConversationAdapterV2(
private var hasWallpaper: Boolean,
private val colorizer: Colorizer,
private val startExpirationTimeout: (MessageRecord) -> Unit,
private val chatColorsDataProvider: () -> ChatColorsDrawable.ChatColorsData
private val chatColorsDataProvider: () -> ChatColorsDrawable.ChatColorsData,
private val displayDialogFragment: (DialogFragment) -> Unit
) : PagingMappingAdapter<ConversationElementKey>(), ConversationAdapterBridge, V2ConversationContext {
companion object {
@ -570,7 +573,9 @@ class ConversationAdapterV2(
conversationBanner.setAvatar(requestManager, recipient)
conversationBanner.showBackgroundBubble(recipient.hasWallpaper())
val title: String = conversationBanner.setTitle(recipient)
val title: String = conversationBanner.setTitle(recipient) {
displayDialogFragment(AboutSheet.create(recipient))
}
conversationBanner.setAbout(recipient)
if (recipient.isGroup) {

View file

@ -1536,7 +1536,8 @@ class ConversationFragment :
hasWallpaper = args.wallpaper != null,
colorizer = colorizer,
startExpirationTimeout = viewModel::startExpirationTimeout,
chatColorsDataProvider = viewModel::chatColorsSnapshot
chatColorsDataProvider = viewModel::chatColorsSnapshot,
displayDialogFragment = { it.show(childFragmentManager, null) }
)
typingIndicatorAdapter = ConversationTypingIndicatorAdapter(Glide.with(this))

View file

@ -27,6 +27,7 @@ object SignalSymbols {
private val cache = mutableMapOf<Weight, Typeface>()
@JvmStatic
fun getSpannedString(
context: Context,
weight: Weight,

View file

@ -196,18 +196,18 @@ public final class RecipientBottomSheetDialogFragment extends BottomSheetDialogF
SpanUtil.appendSpacer(nameBuilder, 8);
SpanUtil.appendCenteredImageSpanWithoutSpace(nameBuilder, ContextUtil.requireDrawable(requireContext(), R.drawable.ic_official_28), 28, 28);
} else if (recipient.isSystemContact()) {
CharSequence systemContactGlyph = SignalSymbols.INSTANCE.getSpannedString(requireContext(),
SignalSymbols.Weight.BOLD,
SignalSymbols.Glyph.PERSON_CIRCLE);
CharSequence systemContactGlyph = SignalSymbols.getSpannedString(requireContext(),
SignalSymbols.Weight.BOLD,
SignalSymbols.Glyph.PERSON_CIRCLE);
nameBuilder.append(" ");
nameBuilder.append(SpanUtil.ofSize(systemContactGlyph, 20));
}
if (!recipient.isSelf() && recipient.isIndividual()) {
CharSequence chevronGlyph = SignalSymbols.INSTANCE.getSpannedString(requireContext(),
SignalSymbols.Weight.BOLD,
SignalSymbols.Glyph.CHEVRON_RIGHT);
CharSequence chevronGlyph = SignalSymbols.getSpannedString(requireContext(),
SignalSymbols.Weight.BOLD,
SignalSymbols.Glyph.CHEVRON_RIGHT);
nameBuilder.append(" ");
nameBuilder.append(SpanUtil.color(ContextCompat.getColor(requireContext(), R.color.signal_colorOutline),