#1393 - Improve how we display long conversation names or group members

This commit is contained in:
moezbhatti
2019-06-09 01:44:14 -04:00
parent ec89c97b45
commit 97f447dfd3
4 changed files with 53 additions and 6 deletions
@@ -30,6 +30,20 @@ open class QkTextView @JvmOverloads constructor(context: Context, attrs: Attribu
@Inject lateinit var textViewStyler: TextViewStyler
/**
* Collapse a multiline list of strings into a single line
*
* Ex.
*
* Toronto, New York, Los Angeles,
* Seattle, Portland
*
* Will be converted to
*
* Toronto, New York, Los Angeles, +2
*/
var collapseEnabled: Boolean = false
init {
if (!isInEditMode) {
appComponent.inject(this)
@@ -39,6 +53,22 @@ open class QkTextView @JvmOverloads constructor(context: Context, attrs: Attribu
}
}
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
super.onLayout(changed, left, top, right, bottom)
if (collapseEnabled) {
layout
?.takeIf { layout -> layout.lineCount > 0 }
?.let { layout -> layout.getEllipsisCount(layout.lineCount - 1) }
?.takeIf { ellipsisCount -> ellipsisCount > 0 }
?.let { ellipsisCount ->
val lastComma = text.dropLast(ellipsisCount).lastIndexOf(',')
val remainingNames = text.drop(lastComma).count { c -> c == ',' }
text = "${text.take(lastComma)}, +$remainingNames"
}
}
}
override fun setTextColor(color: Int) {
super.setTextColor(color)
setLinkTextColor(color)
@@ -84,6 +84,21 @@ class ConversationsAdapter @Inject constructor(
view.isActivated = isSelected(conversation.id)
view.avatars.contacts = conversation.recipients
view.title.collapseEnabled = conversation.recipients.size > 1
val conversationTitle = conversation.getTitle()
view.title.text = conversationTitle
if (conversation.recipients.size > 1) {
view.title.layout
?.takeIf { layout -> layout.lineCount > 0 }
?.let { layout -> layout.getEllipsisCount(layout.lineCount - 1) }
?.takeIf { ellipsisCount -> ellipsisCount > 0 }
?.let { ellipsisCount ->
val lastComma = conversationTitle.dropLast(ellipsisCount).lastIndexOf(',')
val remainingNames = conversationTitle.drop(lastComma).count { c -> c == ',' }
view.title.text = "${conversationTitle.take(lastComma)}, +$remainingNames"
}
}
view.title.text = conversation.getTitle()
view.date.text = dateFormatter.getConversationTimestamp(conversation.date)
view.snippet.text = when (conversation.me) {
@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
<?xml version="1.0" encoding="utf-8"?><!--
~ Copyright (C) 2017 Moez Bhatti <moez.bhatti@gmail.com>
~
~ This file is part of QKSMS.
@@ -25,10 +24,10 @@
android:background="?attr/selectableItemBackground"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingBottom="12dp"
android:paddingEnd="16dp"
android:paddingStart="16dp"
android:paddingTop="12dp">
android:paddingTop="12dp"
android:paddingEnd="16dp"
android:paddingBottom="12dp">
<com.moez.QKSMS.common.widget.GroupAvatarView
android:id="@+id/avatars"
@@ -45,8 +44,10 @@
style="@style/TextPrimary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:ellipsize="end"
android:lines="1"
app:layout_constraintBottom_toTopOf="@id/snippet"
app:layout_constraintEnd_toStartOf="@id/date"
app:layout_constraintStart_toEndOf="@id/avatars"
@@ -58,6 +58,7 @@
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">match_parent</item>
<item name="android:background">@null</item>
<item name="android:ellipsize">end</item>
<item name="android:gravity">start|center_vertical</item>
<item name="android:maxLines">1</item>
<item name="textColor">primary</item>