Fix truncated text on View Badges bottom sheet.

fork-5.53.8
Cody Henthorne 2021-11-23 11:27:09 -05:00 zatwierdzone przez Greyson Parrelli
rodzic 11aa168a6b
commit 89e55a7133
2 zmienionych plików z 26 dodań i 3 usunięć

Wyświetl plik

@ -12,13 +12,13 @@ data class LargeBadge(
val badge: Badge
) {
class Model(val largeBadge: LargeBadge, val shortName: String) : MappingModel<Model> {
class Model(val largeBadge: LargeBadge, val shortName: String, val maxLines: Int) : MappingModel<Model> {
override fun areItemsTheSame(newItem: Model): Boolean {
return newItem.largeBadge.badge.id == largeBadge.badge.id
}
override fun areContentsTheSame(newItem: Model): Boolean {
return newItem.largeBadge == largeBadge && newItem.shortName == shortName
return newItem.largeBadge == largeBadge && newItem.shortName == shortName && newItem.maxLines == maxLines
}
}
@ -43,6 +43,9 @@ data class LargeBadge(
name.text = model.largeBadge.badge.name
description.text = model.largeBadge.badge.resolveDescription(model.shortName)
description.setLines(model.maxLines)
description.maxLines = model.maxLines
description.minLines = model.maxLines
}
}

Wyświetl plik

@ -1,5 +1,7 @@
package org.thoughtcrime.securesms.badges.view
import android.graphics.Paint
import android.graphics.Rect
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
@ -24,7 +26,10 @@ import org.thoughtcrime.securesms.util.CommunicationActions
import org.thoughtcrime.securesms.util.FeatureFlags
import org.thoughtcrime.securesms.util.MappingAdapter
import org.thoughtcrime.securesms.util.PlayServicesUtil
import org.thoughtcrime.securesms.util.ViewUtil
import org.thoughtcrime.securesms.util.visible
import kotlin.math.ceil
import kotlin.math.max
class ViewBadgeBottomSheetDialogFragment : FixedRoundedCornerBottomSheetDialogFragment() {
@ -32,6 +37,13 @@ class ViewBadgeBottomSheetDialogFragment : FixedRoundedCornerBottomSheetDialogFr
override val peekHeightPercentage: Float = 1f
private val textWidth: Float
get() = (resources.displayMetrics.widthPixels - ViewUtil.dpToPx(64)).toFloat()
private val textBounds: Rect = Rect()
private val textPaint: Paint = Paint().apply {
textSize = ViewUtil.spToPx(16f).toFloat()
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.view_badge_bottom_sheet_dialog_fragment, container, false)
}
@ -95,9 +107,17 @@ class ViewBadgeBottomSheetDialogFragment : FixedRoundedCornerBottomSheetDialogFr
tabs.visible = state.allBadgesVisibleOnProfile.size > 1
var maxLines = 3
state.allBadgesVisibleOnProfile.forEach { badge ->
val text = badge.resolveDescription(state.recipient.getShortDisplayName(requireContext()))
textPaint.getTextBounds(text, 0, text.length, textBounds)
val estimatedLines = ceil(textBounds.width().toFloat() / textWidth).toInt()
maxLines = max(maxLines, estimatedLines)
}
adapter.submitList(
state.allBadgesVisibleOnProfile.map {
LargeBadge.Model(LargeBadge(it), state.recipient.getShortDisplayName(requireContext()))
LargeBadge.Model(LargeBadge(it), state.recipient.getShortDisplayName(requireContext()), maxLines + 1)
}
) {
val stateSelectedIndex = state.allBadgesVisibleOnProfile.indexOf(state.selectedBadge)