Map sdk timeline item for LiveLocation
This commit is contained in:
parent
d1a6363a57
commit
a217c1fcdf
7 changed files with 22 additions and 9 deletions
|
|
@ -33,7 +33,7 @@ fun TimelineItemLocationView(
|
||||||
lat = content.location.lat,
|
lat = content.location.lat,
|
||||||
lon = content.location.lon,
|
lon = content.location.lon,
|
||||||
zoom = 15.0,
|
zoom = 15.0,
|
||||||
contentDescription = content.body
|
contentDescription = content.description
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,6 @@ class TimelineItemContentFactory(
|
||||||
}.lastOrNull()
|
}.lastOrNull()
|
||||||
if (lastKnownLocation != null) {
|
if (lastKnownLocation != null) {
|
||||||
TimelineItemLocationContent(
|
TimelineItemLocationContent(
|
||||||
body = itemContent.body.trimEnd(),
|
|
||||||
description = itemContent.description?.trimEnd(),
|
description = itemContent.description?.trimEnd(),
|
||||||
assetType = itemContent.assetType,
|
assetType = itemContent.assetType,
|
||||||
senderId = sender,
|
senderId = sender,
|
||||||
|
|
|
||||||
|
|
@ -150,7 +150,6 @@ class TimelineItemContentMessageFactory(
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
TimelineItemLocationContent(
|
TimelineItemLocationContent(
|
||||||
body = body,
|
|
||||||
location = location,
|
location = location,
|
||||||
description = messageType.description,
|
description = messageType.description,
|
||||||
senderId = senderId,
|
senderId = senderId,
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ import io.element.android.libraries.matrix.api.timeline.item.event.getAvatarUrl
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.getDisplayName
|
import io.element.android.libraries.matrix.api.timeline.item.event.getDisplayName
|
||||||
|
|
||||||
data class TimelineItemLocationContent(
|
data class TimelineItemLocationContent(
|
||||||
val body: String,
|
|
||||||
val senderId: UserId,
|
val senderId: UserId,
|
||||||
val senderProfile: ProfileDetails,
|
val senderProfile: ProfileDetails,
|
||||||
val location: Location,
|
val location: Location,
|
||||||
|
|
|
||||||
|
|
@ -24,12 +24,11 @@ open class TimelineItemLocationContentProvider : PreviewParameterProvider<Timeli
|
||||||
}
|
}
|
||||||
|
|
||||||
fun aTimelineItemLocationContent(
|
fun aTimelineItemLocationContent(
|
||||||
body: String = "",
|
|
||||||
senderId: UserId = UserId("@sender:matrix.org"),
|
senderId: UserId = UserId("@sender:matrix.org"),
|
||||||
senderProfile: ProfileDetails = aProfileDetailsReady(),
|
senderProfile: ProfileDetails = aProfileDetailsReady(),
|
||||||
|
description: String? = null,
|
||||||
mode: TimelineItemLocationContent.Mode = TimelineItemLocationContent.Mode.Static,
|
mode: TimelineItemLocationContent.Mode = TimelineItemLocationContent.Mode.Static,
|
||||||
) = TimelineItemLocationContent(
|
) = TimelineItemLocationContent(
|
||||||
body = body,
|
|
||||||
location = Location(
|
location = Location(
|
||||||
lat = 52.2445,
|
lat = 52.2445,
|
||||||
lon = 0.7186,
|
lon = 0.7186,
|
||||||
|
|
@ -37,5 +36,6 @@ fun aTimelineItemLocationContent(
|
||||||
),
|
),
|
||||||
senderId = senderId,
|
senderId = senderId,
|
||||||
senderProfile = senderProfile,
|
senderProfile = senderProfile,
|
||||||
|
description = description,
|
||||||
mode = mode
|
mode = mode
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,6 @@ data class FailedToParseStateContent(
|
||||||
) : EventContent
|
) : EventContent
|
||||||
|
|
||||||
data class LiveLocationContent(
|
data class LiveLocationContent(
|
||||||
val body: String,
|
|
||||||
val isLive: Boolean,
|
val isLive: Boolean,
|
||||||
val description: String?,
|
val description: String?,
|
||||||
val timeout: Long,
|
val timeout: Long,
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ package io.element.android.libraries.matrix.impl.timeline.item.event
|
||||||
import io.element.android.libraries.architecture.AsyncData
|
import io.element.android.libraries.architecture.AsyncData
|
||||||
import io.element.android.libraries.matrix.api.core.ThreadId
|
import io.element.android.libraries.matrix.api.core.ThreadId
|
||||||
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.LiveLocationInfo
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.EmbeddedEventInfo
|
import io.element.android.libraries.matrix.api.timeline.item.EmbeddedEventInfo
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.EventThreadInfo
|
import io.element.android.libraries.matrix.api.timeline.item.EventThreadInfo
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.ThreadSummary
|
import io.element.android.libraries.matrix.api.timeline.item.ThreadSummary
|
||||||
|
|
@ -19,6 +20,7 @@ import io.element.android.libraries.matrix.api.timeline.item.event.EventContent
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseMessageLikeContent
|
import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseMessageLikeContent
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseStateContent
|
import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseStateContent
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.LegacyCallInviteContent
|
import io.element.android.libraries.matrix.api.timeline.item.event.LegacyCallInviteContent
|
||||||
|
import io.element.android.libraries.matrix.api.timeline.item.event.LiveLocationContent
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.MembershipChange
|
import io.element.android.libraries.matrix.api.timeline.item.event.MembershipChange
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.OtherState
|
import io.element.android.libraries.matrix.api.timeline.item.event.OtherState
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.PollContent
|
import io.element.android.libraries.matrix.api.timeline.item.event.PollContent
|
||||||
|
|
@ -33,8 +35,10 @@ import io.element.android.libraries.matrix.api.timeline.item.event.UtdCause
|
||||||
import io.element.android.libraries.matrix.impl.media.map
|
import io.element.android.libraries.matrix.impl.media.map
|
||||||
import io.element.android.libraries.matrix.impl.poll.map
|
import io.element.android.libraries.matrix.impl.poll.map
|
||||||
import io.element.android.libraries.matrix.impl.room.join.map
|
import io.element.android.libraries.matrix.impl.room.join.map
|
||||||
|
import io.element.android.libraries.matrix.impl.room.location.into
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
import kotlinx.collections.immutable.toImmutableMap
|
import kotlinx.collections.immutable.toImmutableMap
|
||||||
|
import org.matrix.rustcomponents.sdk.BeaconInfo
|
||||||
import org.matrix.rustcomponents.sdk.EmbeddedEventDetails
|
import org.matrix.rustcomponents.sdk.EmbeddedEventDetails
|
||||||
import org.matrix.rustcomponents.sdk.MsgLikeContent
|
import org.matrix.rustcomponents.sdk.MsgLikeContent
|
||||||
import org.matrix.rustcomponents.sdk.MsgLikeKind
|
import org.matrix.rustcomponents.sdk.MsgLikeKind
|
||||||
|
|
@ -108,8 +112,13 @@ class TimelineEventContentMapper(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
is MsgLikeKind.LiveLocation -> {
|
is MsgLikeKind.LiveLocation -> {
|
||||||
// Live location messages are a special kind of message that we want to treat as unknown content for now
|
LiveLocationContent(
|
||||||
UnknownContent
|
isLive = kind.content.isLive,
|
||||||
|
description = kind.content.description,
|
||||||
|
timeout = kind.content.timeoutMs.toLong(),
|
||||||
|
assetType = kind.content.assetType.into(),
|
||||||
|
locations = kind.content.locations.map { location -> location.map() }
|
||||||
|
)
|
||||||
}
|
}
|
||||||
is MsgLikeKind.Other -> UnknownContent
|
is MsgLikeKind.Other -> UnknownContent
|
||||||
}
|
}
|
||||||
|
|
@ -260,3 +269,11 @@ private fun RustEncryptedMessage.map(): UnableToDecryptContent.Data {
|
||||||
RustEncryptedMessage.Unknown -> UnableToDecryptContent.Data.Unknown
|
RustEncryptedMessage.Unknown -> UnableToDecryptContent.Data.Unknown
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun BeaconInfo.map(): LiveLocationInfo {
|
||||||
|
return LiveLocationInfo(
|
||||||
|
description = description,
|
||||||
|
geoUri = geoUri,
|
||||||
|
timestamp = ts.toLong(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue