Fix formatting

This commit is contained in:
ganfra 2026-04-16 16:18:53 +02:00
parent fa447fcba3
commit f2b563763f
14 changed files with 31 additions and 52 deletions

View file

@ -28,7 +28,6 @@ import io.element.android.compound.tokens.generated.CompoundIcons
import io.element.android.features.location.api.R import io.element.android.features.location.api.R
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings

View file

@ -93,7 +93,7 @@ fun LocationShareRow(
Text( Text(
text = if (item.isLive) stringResource(CommonStrings.screen_room_live_location_banner) else item.formattedTimestamp, text = if (item.isLive) stringResource(CommonStrings.screen_room_live_location_banner) else item.formattedTimestamp,
style = ElementTheme.typography.fontBodySmRegular, style = ElementTheme.typography.fontBodySmRegular,
color = if(item.isLive) ElementTheme.colors.textPrimary else ElementTheme.colors.textSecondary, color = if (item.isLive) ElementTheme.colors.textPrimary else ElementTheme.colors.textSecondary,
maxLines = 1, maxLines = 1,
overflow = TextOverflow.Ellipsis, overflow = TextOverflow.Ellipsis,
) )

View file

@ -43,7 +43,7 @@ import io.element.android.libraries.matrix.api.room.joinedRoomMembers
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
import io.element.android.services.toolbox.api.strings.StringProvider import io.element.android.services.toolbox.api.strings.StringProvider
import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toPersistentList import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combine
@AssistedInject @AssistedInject
@ -161,7 +161,7 @@ class ShowLocationPresenter(
isLive = true, isLive = true,
assetType = lastLocation.assetType, assetType = lastLocation.assetType,
) )
}.toPersistentList() }.toImmutableList()
}.collect { value = it } }.collect { value = it }
}.value }.value
} }

View file

@ -434,7 +434,7 @@ class ShowLocationPresenterTest {
senderName = senderName, senderName = senderName,
senderId = senderId, senderId = senderId,
senderAvatarUrl = avatarUrl, senderAvatarUrl = avatarUrl,
timestamp = 1234567890L, timestamp = 0L,
assetType = AssetType.SENDER, assetType = AssetType.SENDER,
) )
@ -468,7 +468,7 @@ class ShowLocationPresenterTest {
private fun aLiveLocationShare( private fun aLiveLocationShare(
userId: UserId, userId: UserId,
geoUri: String = "geo:48.8584,2.2945", geoUri: String = "geo:48.8584,2.2945",
timestamp: Long = 1234567890L, timestamp: Long = 0L,
endTimestamp: Long = Long.MAX_VALUE, endTimestamp: Long = Long.MAX_VALUE,
assetType: AssetType = AssetType.SENDER, assetType: AssetType = AssetType.SENDER,
): LiveLocationShare { ): LiveLocationShare {

View file

@ -570,7 +570,7 @@ class MessagesFlowNode(
) )
} }
is TimelineItemLocationContent -> { is TimelineItemLocationContent -> {
val mode = when(event.content.mode){ val mode = when (event.content.mode) {
is TimelineItemLocationContent.Mode.Live -> ShowLocationMode.Live(event.senderId) is TimelineItemLocationContent.Mode.Live -> ShowLocationMode.Live(event.senderId)
is TimelineItemLocationContent.Mode.Static -> ShowLocationMode.Static( is TimelineItemLocationContent.Mode.Static -> ShowLocationMode.Static(
location = event.content.mode.location, location = event.content.mode.location,

View file

@ -289,7 +289,7 @@ private fun MessageSummary(
is TimelineItemRedactedContent, is TimelineItemRedactedContent,
is TimelineItemUnknownContent -> content = { ContentForBody(textContent) } is TimelineItemUnknownContent -> content = { ContentForBody(textContent) }
is TimelineItemLocationContent -> { is TimelineItemLocationContent -> {
val body = when(event.content.mode) { val body = when (event.content.mode) {
is TimelineItemLocationContent.Mode.Live -> stringResource(CommonStrings.common_shared_live_location) is TimelineItemLocationContent.Mode.Live -> stringResource(CommonStrings.common_shared_live_location)
is TimelineItemLocationContent.Mode.Static -> stringResource(CommonStrings.common_shared_location) is TimelineItemLocationContent.Mode.Static -> stringResource(CommonStrings.common_shared_location)
} }

View file

@ -33,7 +33,6 @@ import io.element.android.compound.tokens.generated.CompoundIcons
import io.element.android.features.location.api.StaticMapView import io.element.android.features.location.api.StaticMapView
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemLocationContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemLocationContent
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemLocationContentProvider import io.element.android.features.messages.impl.timeline.model.event.TimelineItemLocationContentProvider
import io.element.android.features.messages.impl.timeline.model.event.ensureActiveLiveLocation
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator
@ -129,7 +128,6 @@ private fun LiveLocationOverlay(
} else { } else {
stringResource(CommonStrings.common_live_location_ended) stringResource(CommonStrings.common_live_location_ended)
}, },
style = ElementTheme.typography.fontBodySmMedium, style = ElementTheme.typography.fontBodySmMedium,
color = ElementTheme.colors.textPrimary, color = ElementTheme.colors.textPrimary,
) )

View file

@ -88,7 +88,7 @@ data class TimelineItemLocationContent(
internal fun TimelineItemLocationContent.ensureActiveLiveLocation( internal fun TimelineItemLocationContent.ensureActiveLiveLocation(
currentTimeMillis: () -> Long = System::currentTimeMillis, currentTimeMillis: () -> Long = System::currentTimeMillis,
): TimelineItemLocationContent { ): TimelineItemLocationContent {
return when (val mode = mode) { return when (mode) {
is TimelineItemLocationContent.Mode.Live -> { is TimelineItemLocationContent.Mode.Live -> {
val isActive = rememberIsLiveLocationActive(mode, currentTimeMillis) val isActive = rememberIsLiveLocationActive(mode, currentTimeMillis)
copy(mode = mode.copy(isActive = isActive)) copy(mode = mode.copy(isActive = isActive))
@ -102,7 +102,6 @@ private fun rememberIsLiveLocationActive(
mode: TimelineItemLocationContent.Mode.Live, mode: TimelineItemLocationContent.Mode.Live,
currentTimeMillis: () -> Long, currentTimeMillis: () -> Long,
): Boolean { ): Boolean {
fun TimelineItemLocationContent.Mode.Live.isActive(): Boolean { fun TimelineItemLocationContent.Mode.Live.isActive(): Boolean {
return isActive && endTimestamp > currentTimeMillis() return isActive && endTimestamp > currentTimeMillis()
} }

View file

@ -41,7 +41,7 @@ class DefaultMessageSummaryFormatter(
is TimelineItemTextBasedContent -> content.plainText is TimelineItemTextBasedContent -> content.plainText
is TimelineItemProfileChangeContent -> content.body is TimelineItemProfileChangeContent -> content.body
is TimelineItemStateContent -> content.body is TimelineItemStateContent -> content.body
is TimelineItemLocationContent -> when(content.mode) { is TimelineItemLocationContent -> when (content.mode) {
is TimelineItemLocationContent.Mode.Live -> context.getString(CommonStrings.common_shared_live_location) is TimelineItemLocationContent.Mode.Live -> context.getString(CommonStrings.common_shared_live_location)
is TimelineItemLocationContent.Mode.Static -> context.getString(CommonStrings.common_shared_location) is TimelineItemLocationContent.Mode.Static -> context.getString(CommonStrings.common_shared_location)
} }

View file

@ -78,9 +78,7 @@ import org.robolectric.RobolectricTestRunner
import kotlin.time.Duration import kotlin.time.Duration
import kotlin.time.Duration.Companion.minutes import kotlin.time.Duration.Companion.minutes
@Suppress("LargeClass") @Suppress("LargeClass") @RunWith(RobolectricTestRunner::class) class TimelineItemContentMessageFactoryTest {
@RunWith(RobolectricTestRunner::class)
class TimelineItemContentMessageFactoryTest {
@Test @Test
fun `test create OtherMessageType`() = runTest { fun `test create OtherMessageType`() = runTest {
val sut = createTimelineItemContentMessageFactory() val sut = createTimelineItemContentMessageFactory()
@ -164,16 +162,11 @@ class TimelineItemContentMessageFactoryTest {
senderProfile = aProfileDetails(), senderProfile = aProfileDetails(),
eventId = AN_EVENT_ID, eventId = AN_EVENT_ID,
) as TimelineItemTextContent ) as TimelineItemTextContent
val expected = TimelineItemTextContent( val expected = TimelineItemTextContent(body = "https://www.example.org", htmlDocument = null, isEdited = false, formattedBody = buildSpannedString {
body = "https://www.example.org", inSpans(URLSpan("https://www.example.org")) {
htmlDocument = null, append("https://www.example.org")
isEdited = false,
formattedBody = buildSpannedString {
inSpans(URLSpan("https://www.example.org")) {
append("https://www.example.org")
}
} }
) })
assertThat(result.body).isEqualTo(expected.body) assertThat(result.body).isEqualTo(expected.body)
assertThat(result.htmlDocument).isEqualTo(expected.htmlDocument) assertThat(result.htmlDocument).isEqualTo(expected.htmlDocument)
assertThat(result.plainText).isEqualTo(expected.plainText) assertThat(result.plainText).isEqualTo(expected.plainText)
@ -198,9 +191,7 @@ class TimelineItemContentMessageFactoryTest {
append("and manually added link") append("and manually added link")
} }
}.toSpannable() }.toSpannable()
val sut = createTimelineItemContentMessageFactory( val sut = createTimelineItemContentMessageFactory(domConverterTransform = { expected })
domConverterTransform = { expected }
)
val result = sut.create( val result = sut.create(
content = createMessageContent( content = createMessageContent(
type = TextMessageType( type = TextMessageType(
@ -217,9 +208,7 @@ class TimelineItemContentMessageFactoryTest {
@Test @Test
fun `test create TextMessageType with unknown formatted body does nothing`() = runTest { fun `test create TextMessageType with unknown formatted body does nothing`() = runTest {
val sut = createTimelineItemContentMessageFactory( val sut = createTimelineItemContentMessageFactory(htmlConverterTransform = { it })
htmlConverterTransform = { it }
)
val result = sut.create( val result = sut.create(
content = createMessageContent( content = createMessageContent(
type = TextMessageType( type = TextMessageType(
@ -354,10 +343,10 @@ class TimelineItemContentMessageFactoryTest {
formattedCaption = null, formattedCaption = null,
source = MediaSource("url"), source = MediaSource("url"),
info = AudioInfo( info = AudioInfo(
duration = 1.minutes, duration = 1.minutes,
size = 123L, size = 123L,
mimetype = MimeTypes.Mp3, mimetype = MimeTypes.Mp3,
) )
), ),
isEdited = true, isEdited = true,
), ),
@ -595,16 +584,16 @@ class TimelineItemContentMessageFactoryTest {
formattedCaption = null, formattedCaption = null,
source = MediaSource("url"), source = MediaSource("url"),
info = FileInfo( info = FileInfo(
mimetype = MimeTypes.Pdf, mimetype = MimeTypes.Pdf,
size = 123L, size = 123L,
thumbnailInfo = ThumbnailInfo( thumbnailInfo = ThumbnailInfo(
height = 10L, height = 10L,
width = 5L, width = 5L,
mimetype = MimeTypes.Jpeg, mimetype = MimeTypes.Jpeg,
size = 111L, size = 111L,
), ),
thumbnailSource = MediaSource("url_thumbnail"), thumbnailSource = MediaSource("url_thumbnail"),
) )
), ),
isEdited = true, isEdited = true,
), ),

View file

@ -71,4 +71,3 @@ private fun RustLiveLocationShare.into(): LiveLocationShare {
endTimestamp = (startTs + timeout).toLong() endTimestamp = (startTs + timeout).toLong()
) )
} }

View file

@ -52,5 +52,4 @@ internal fun Flow<List<LiveLocationShare>>.timedByExpiry(
send(liveShares) send(liveShares)
reschedule(liveShares) reschedule(liveShares)
} }
} }

View file

@ -12,9 +12,8 @@ import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.room.location.LiveLocationShare import io.element.android.libraries.matrix.api.room.location.LiveLocationShare
import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.emptyFlow
import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.emptyFlow
import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.test.advanceTimeBy import kotlinx.coroutines.test.advanceTimeBy
import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.runTest
@ -22,7 +21,6 @@ import org.junit.Test
@OptIn(ExperimentalCoroutinesApi::class) @OptIn(ExperimentalCoroutinesApi::class)
class TimedLiveLocationSharesFlowTest { class TimedLiveLocationSharesFlowTest {
@Test @Test
fun `it keeps emitting shares for subsequent expiries without upstream changes`() = runTest { fun `it keeps emitting shares for subsequent expiries without upstream changes`() = runTest {
val shares = listOf( val shares = listOf(

View file

@ -66,5 +66,3 @@ fun <R : TestRule> AndroidComposeTestRule<R, ComponentActivity>.assertNodeWithTe
val text = activity.getString(res) val text = activity.getString(res)
onNodeWithText(text).assertIsDisplayed() onNodeWithText(text).assertIsDisplayed()
} }