Fix formatting
This commit is contained in:
parent
fa447fcba3
commit
f2b563763f
14 changed files with 31 additions and 52 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -71,4 +71,3 @@ private fun RustLiveLocationShare.into(): LiveLocationShare {
|
||||||
endTimestamp = (startTs + timeout).toLong()
|
endTimestamp = (startTs + timeout).toLong()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,5 +52,4 @@ internal fun Flow<List<LiveLocationShare>>.timedByExpiry(
|
||||||
send(liveShares)
|
send(liveShares)
|
||||||
reschedule(liveShares)
|
reschedule(liveShares)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue