Merge pull request #6019 from element-hq/feature/bma/fixCrashOnLongStrings
Ensure that room with long names are rendered correctly in the room list.
This commit is contained in:
commit
85be09639d
3 changed files with 8 additions and 9 deletions
|
|
@ -46,6 +46,7 @@ import io.element.android.features.home.impl.model.RoomListRoomSummaryProvider
|
||||||
import io.element.android.features.home.impl.model.RoomSummaryDisplayType
|
import io.element.android.features.home.impl.model.RoomSummaryDisplayType
|
||||||
import io.element.android.features.home.impl.roomlist.RoomListEvents
|
import io.element.android.features.home.impl.roomlist.RoomListEvents
|
||||||
import io.element.android.libraries.core.extensions.orEmpty
|
import io.element.android.libraries.core.extensions.orEmpty
|
||||||
|
import io.element.android.libraries.core.extensions.toSafeLength
|
||||||
import io.element.android.libraries.designsystem.atomic.atoms.UnreadIndicatorAtom
|
import io.element.android.libraries.designsystem.atomic.atoms.UnreadIndicatorAtom
|
||||||
import io.element.android.libraries.designsystem.atomic.molecules.InviteButtonsRowMolecule
|
import io.element.android.libraries.designsystem.atomic.molecules.InviteButtonsRowMolecule
|
||||||
import io.element.android.libraries.designsystem.components.avatar.Avatar
|
import io.element.android.libraries.designsystem.components.avatar.Avatar
|
||||||
|
|
@ -227,7 +228,7 @@ private fun NameAndTimestampRow(
|
||||||
// Name
|
// Name
|
||||||
Text(
|
Text(
|
||||||
style = ElementTheme.typography.fontBodyLgMedium,
|
style = ElementTheme.typography.fontBodyLgMedium,
|
||||||
text = name ?: stringResource(id = CommonStrings.common_no_room_name),
|
text = name?.toSafeLength(ellipsize = true) ?: stringResource(id = CommonStrings.common_no_room_name),
|
||||||
fontStyle = FontStyle.Italic.takeIf { name == null },
|
fontStyle = FontStyle.Italic.takeIf { name == null },
|
||||||
color = ElementTheme.colors.roomListRoomName,
|
color = ElementTheme.colors.roomListRoomName,
|
||||||
maxLines = 1,
|
maxLines = 1,
|
||||||
|
|
@ -380,7 +381,7 @@ private fun InviteNameAndIndicatorRow(
|
||||||
Text(
|
Text(
|
||||||
modifier = Modifier.weight(1f),
|
modifier = Modifier.weight(1f),
|
||||||
style = ElementTheme.typography.fontBodyLgMedium,
|
style = ElementTheme.typography.fontBodyLgMedium,
|
||||||
text = name ?: stringResource(id = CommonStrings.common_no_room_name),
|
text = name?.toSafeLength(ellipsize = true) ?: stringResource(id = CommonStrings.common_no_room_name),
|
||||||
fontStyle = FontStyle.Italic.takeIf { name == null },
|
fontStyle = FontStyle.Italic.takeIf { name == null },
|
||||||
color = ElementTheme.colors.roomListRoomName,
|
color = ElementTheme.colors.roomListRoomName,
|
||||||
maxLines = 1,
|
maxLines = 1,
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,8 @@ fun String.containsRtLOverride() = contains(RTL_OVERRIDE_CHAR)
|
||||||
|
|
||||||
fun String.filterDirectionOverrides() = filterNot { it == RTL_OVERRIDE_CHAR || it == LTR_OVERRIDE_CHAR }
|
fun String.filterDirectionOverrides() = filterNot { it == RTL_OVERRIDE_CHAR || it == LTR_OVERRIDE_CHAR }
|
||||||
|
|
||||||
|
const val DEFAULT_SAFE_LENGTH = 500
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This works around https://github.com/element-hq/element-x-android/issues/2105.
|
* This works around https://github.com/element-hq/element-x-android/issues/2105.
|
||||||
* @param maxLength Max characters to retrieve. Defaults to `500`.
|
* @param maxLength Max characters to retrieve. Defaults to `500`.
|
||||||
|
|
@ -107,7 +109,7 @@ fun String.filterDirectionOverrides() = filterNot { it == RTL_OVERRIDE_CHAR || i
|
||||||
* @return The string truncated to [maxLength] characters, with an optional ellipsis if larger.
|
* @return The string truncated to [maxLength] characters, with an optional ellipsis if larger.
|
||||||
*/
|
*/
|
||||||
fun String.toSafeLength(
|
fun String.toSafeLength(
|
||||||
maxLength: Int = 500,
|
maxLength: Int = DEFAULT_SAFE_LENGTH,
|
||||||
ellipsize: Boolean = false,
|
ellipsize: Boolean = false,
|
||||||
): String {
|
): String {
|
||||||
return if (ellipsize) {
|
return if (ellipsize) {
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
package io.element.android.libraries.eventformatter.impl
|
package io.element.android.libraries.eventformatter.impl
|
||||||
|
|
||||||
import dev.zacsweers.metro.ContributesBinding
|
import dev.zacsweers.metro.ContributesBinding
|
||||||
|
import io.element.android.libraries.core.extensions.DEFAULT_SAFE_LENGTH
|
||||||
import io.element.android.libraries.di.SessionScope
|
import io.element.android.libraries.di.SessionScope
|
||||||
import io.element.android.libraries.eventformatter.api.RoomLatestEventFormatter
|
import io.element.android.libraries.eventformatter.api.RoomLatestEventFormatter
|
||||||
import io.element.android.libraries.eventformatter.impl.mode.RenderingMode
|
import io.element.android.libraries.eventformatter.impl.mode.RenderingMode
|
||||||
|
|
@ -54,11 +55,6 @@ class DefaultRoomLatestEventFormatter(
|
||||||
private val stateContentFormatter: StateContentFormatter,
|
private val stateContentFormatter: StateContentFormatter,
|
||||||
private val permalinkParser: PermalinkParser,
|
private val permalinkParser: PermalinkParser,
|
||||||
) : RoomLatestEventFormatter {
|
) : RoomLatestEventFormatter {
|
||||||
companion object {
|
|
||||||
// Max characters to display in the last message. This works around https://github.com/element-hq/element-x-android/issues/2105
|
|
||||||
private const val MAX_SAFE_LENGTH = 500
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun format(
|
override fun format(
|
||||||
latestEvent: LatestEventValue.Local,
|
latestEvent: LatestEventValue.Local,
|
||||||
isDmRoom: Boolean,
|
isDmRoom: Boolean,
|
||||||
|
|
@ -121,7 +117,7 @@ class DefaultRoomLatestEventFormatter(
|
||||||
}
|
}
|
||||||
is LegacyCallInviteContent -> sp.getString(CommonStrings.common_unsupported_call)
|
is LegacyCallInviteContent -> sp.getString(CommonStrings.common_unsupported_call)
|
||||||
is CallNotifyContent -> sp.getString(CommonStrings.common_call_started)
|
is CallNotifyContent -> sp.getString(CommonStrings.common_call_started)
|
||||||
}?.take(MAX_SAFE_LENGTH)
|
}?.take(DEFAULT_SAFE_LENGTH)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun MessageContent.process(
|
private fun MessageContent.process(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue