Renaming message contents
This commit is contained in:
parent
3460df7ac8
commit
444d2c6491
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
package org.matrix.android.sdk.api.session.room.model.livelocation
|
package org.matrix.android.sdk.api.session.room.model.livelocation
|
||||||
|
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageLiveLocationContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageBeaconLocationDataContent
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Aggregation info concerning a live location share.
|
* Aggregation info concerning a live location share.
|
||||||
|
@ -29,5 +29,5 @@ data class LiveLocationAggregatedSummary(
|
||||||
val roomId: String,
|
val roomId: String,
|
||||||
val isActive: Boolean?,
|
val isActive: Boolean?,
|
||||||
val endOfLiveTimestampAsMilliseconds: Long?,
|
val endOfLiveTimestampAsMilliseconds: Long?,
|
||||||
val lastLocationContent: MessageLiveLocationContent?,
|
val lastLocationDataContent: MessageBeaconLocationDataContent?,
|
||||||
)
|
)
|
||||||
|
|
|
@ -26,12 +26,12 @@ import org.matrix.android.sdk.api.session.room.model.message.MessageType
|
||||||
import org.matrix.android.sdk.api.session.room.model.relation.RelationDefaultContent
|
import org.matrix.android.sdk.api.session.room.model.relation.RelationDefaultContent
|
||||||
|
|
||||||
@JsonClass(generateAdapter = true)
|
@JsonClass(generateAdapter = true)
|
||||||
data class LiveLocationBeaconContent(
|
data class MessageBeaconInfoContent(
|
||||||
/**
|
/**
|
||||||
* Local message type, not from server
|
* Local message type, not from server
|
||||||
*/
|
*/
|
||||||
@Transient
|
@Transient
|
||||||
override val msgType: String = MessageType.MSGTYPE_LIVE_LOCATION_STATE,
|
override val msgType: String = MessageType.MSGTYPE_BEACON_INFO,
|
||||||
|
|
||||||
@Json(name = "body") override val body: String = "",
|
@Json(name = "body") override val body: String = "",
|
||||||
@Json(name = "m.relates_to") override val relatesTo: RelationDefaultContent? = null,
|
@Json(name = "m.relates_to") override val relatesTo: RelationDefaultContent? = null,
|
|
@ -22,12 +22,12 @@ import org.matrix.android.sdk.api.session.events.model.Content
|
||||||
import org.matrix.android.sdk.api.session.room.model.relation.RelationDefaultContent
|
import org.matrix.android.sdk.api.session.room.model.relation.RelationDefaultContent
|
||||||
|
|
||||||
@JsonClass(generateAdapter = true)
|
@JsonClass(generateAdapter = true)
|
||||||
data class MessageLiveLocationContent(
|
data class MessageBeaconLocationDataContent(
|
||||||
/**
|
/**
|
||||||
* Local message type, not from server
|
* Local message type, not from server
|
||||||
*/
|
*/
|
||||||
@Transient
|
@Transient
|
||||||
override val msgType: String = MessageType.MSGTYPE_LIVE_LOCATION,
|
override val msgType: String = MessageType.MSGTYPE_BEACON_LOCATION_DATA,
|
||||||
|
|
||||||
@Json(name = "body") override val body: String = "",
|
@Json(name = "body") override val body: String = "",
|
||||||
@Json(name = "m.relates_to") override val relatesTo: RelationDefaultContent? = null,
|
@Json(name = "m.relates_to") override val relatesTo: RelationDefaultContent? = null,
|
|
@ -41,6 +41,6 @@ object MessageType {
|
||||||
const val MSGTYPE_SNOWFALL = "io.element.effect.snowfall"
|
const val MSGTYPE_SNOWFALL = "io.element.effect.snowfall"
|
||||||
|
|
||||||
// Fake message types for live location events to be able to inherit them from MessageContent
|
// Fake message types for live location events to be able to inherit them from MessageContent
|
||||||
const val MSGTYPE_LIVE_LOCATION_STATE = "org.matrix.android.sdk.livelocation.state"
|
const val MSGTYPE_BEACON_INFO = "org.matrix.android.sdk.beacon.info"
|
||||||
const val MSGTYPE_LIVE_LOCATION = "org.matrix.android.sdk.livelocation"
|
const val MSGTYPE_BEACON_LOCATION_DATA = "org.matrix.android.sdk.beacon.location.data"
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ import org.matrix.android.sdk.api.session.events.model.isSticker
|
||||||
import org.matrix.android.sdk.api.session.events.model.toModel
|
import org.matrix.android.sdk.api.session.events.model.toModel
|
||||||
import org.matrix.android.sdk.api.session.room.model.EventAnnotationsSummary
|
import org.matrix.android.sdk.api.session.room.model.EventAnnotationsSummary
|
||||||
import org.matrix.android.sdk.api.session.room.model.ReadReceipt
|
import org.matrix.android.sdk.api.session.room.model.ReadReceipt
|
||||||
import org.matrix.android.sdk.api.session.room.model.livelocation.LiveLocationBeaconContent
|
import org.matrix.android.sdk.api.session.room.model.livelocation.MessageBeaconInfoContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessagePollContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessagePollContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageStickerContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageStickerContent
|
||||||
|
@ -139,7 +139,7 @@ fun TimelineEvent.getLastMessageContent(): MessageContent? {
|
||||||
return when (root.getClearType()) {
|
return when (root.getClearType()) {
|
||||||
EventType.STICKER -> root.getClearContent().toModel<MessageStickerContent>()
|
EventType.STICKER -> root.getClearContent().toModel<MessageStickerContent>()
|
||||||
in EventType.POLL_START -> (annotations?.editSummary?.latestContent ?: root.getClearContent()).toModel<MessagePollContent>()
|
in EventType.POLL_START -> (annotations?.editSummary?.latestContent ?: root.getClearContent()).toModel<MessagePollContent>()
|
||||||
in EventType.STATE_ROOM_BEACON_INFO -> (annotations?.editSummary?.latestContent ?: root.getClearContent()).toModel<LiveLocationBeaconContent>()
|
in EventType.STATE_ROOM_BEACON_INFO -> (annotations?.editSummary?.latestContent ?: root.getClearContent()).toModel<MessageBeaconInfoContent>()
|
||||||
else -> (annotations?.editSummary?.latestContent ?: root.getClearContent()).toModel()
|
else -> (annotations?.editSummary?.latestContent ?: root.getClearContent()).toModel()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ package org.matrix.android.sdk.internal.database.mapper
|
||||||
import org.matrix.android.sdk.api.session.events.model.toContent
|
import org.matrix.android.sdk.api.session.events.model.toContent
|
||||||
import org.matrix.android.sdk.api.session.events.model.toModel
|
import org.matrix.android.sdk.api.session.events.model.toModel
|
||||||
import org.matrix.android.sdk.api.session.room.model.livelocation.LiveLocationAggregatedSummary
|
import org.matrix.android.sdk.api.session.room.model.livelocation.LiveLocationAggregatedSummary
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageLiveLocationContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageBeaconLocationDataContent
|
||||||
import org.matrix.android.sdk.internal.database.model.livelocation.LiveLocationAggregatedSummaryEntity
|
import org.matrix.android.sdk.internal.database.model.livelocation.LiveLocationAggregatedSummaryEntity
|
||||||
|
|
||||||
internal object LiveLocationAggregatedSummaryMapper {
|
internal object LiveLocationAggregatedSummaryMapper {
|
||||||
|
@ -30,7 +30,7 @@ internal object LiveLocationAggregatedSummaryMapper {
|
||||||
roomId = entity.roomId,
|
roomId = entity.roomId,
|
||||||
isActive = entity.isActive,
|
isActive = entity.isActive,
|
||||||
endOfLiveTimestampAsMilliseconds = entity.endOfLiveTimestampAsMilliseconds,
|
endOfLiveTimestampAsMilliseconds = entity.endOfLiveTimestampAsMilliseconds,
|
||||||
lastLocationContent = ContentMapper.map(entity.lastLocationContent).toModel<MessageLiveLocationContent>()
|
lastLocationDataContent = ContentMapper.map(entity.lastLocationContent).toModel<MessageBeaconLocationDataContent>()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ internal object LiveLocationAggregatedSummaryMapper {
|
||||||
roomId = model.roomId,
|
roomId = model.roomId,
|
||||||
isActive = model.isActive,
|
isActive = model.isActive,
|
||||||
endOfLiveTimestampAsMilliseconds = model.endOfLiveTimestampAsMilliseconds,
|
endOfLiveTimestampAsMilliseconds = model.endOfLiveTimestampAsMilliseconds,
|
||||||
lastLocationContent = ContentMapper.map(model.lastLocationContent.toContent())
|
lastLocationContent = ContentMapper.map(model.lastLocationDataContent.toContent())
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ internal open class LiveLocationAggregatedSummaryEntity(
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* For now we persist this as a JSON for greater flexibility
|
* For now we persist this as a JSON for greater flexibility
|
||||||
* @see [org.matrix.android.sdk.api.session.room.model.message.MessageLiveLocationContent]
|
* @see [org.matrix.android.sdk.api.session.room.model.message.MessageBeaconLocationDataContent]
|
||||||
*/
|
*/
|
||||||
var lastLocationContent: String? = null,
|
var lastLocationContent: String? = null,
|
||||||
) : RealmObject() {
|
) : RealmObject() {
|
||||||
|
|
|
@ -33,10 +33,10 @@ import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.ReferencesAggregatedContent
|
import org.matrix.android.sdk.api.session.room.model.ReferencesAggregatedContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.VoteInfo
|
import org.matrix.android.sdk.api.session.room.model.VoteInfo
|
||||||
import org.matrix.android.sdk.api.session.room.model.VoteSummary
|
import org.matrix.android.sdk.api.session.room.model.VoteSummary
|
||||||
import org.matrix.android.sdk.api.session.room.model.livelocation.LiveLocationBeaconContent
|
import org.matrix.android.sdk.api.session.room.model.livelocation.MessageBeaconInfoContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageEndPollContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageEndPollContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageLiveLocationContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageBeaconLocationDataContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessagePollContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessagePollContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessagePollResponseContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessagePollResponseContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageRelationContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageRelationContent
|
||||||
|
@ -190,13 +190,13 @@ internal class EventRelationsAggregationProcessor @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
in EventType.STATE_ROOM_BEACON_INFO -> {
|
in EventType.STATE_ROOM_BEACON_INFO -> {
|
||||||
event.content.toModel<LiveLocationBeaconContent>(catchError = true)?.let {
|
event.content.toModel<MessageBeaconInfoContent>(catchError = true)?.let {
|
||||||
liveLocationAggregationProcessor.handleBeaconInfo(realm, event, it, roomId, isLocalEcho)
|
liveLocationAggregationProcessor.handleBeaconInfo(realm, event, it, roomId, isLocalEcho)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
in EventType.BEACON_LOCATION_DATA -> {
|
in EventType.BEACON_LOCATION_DATA -> {
|
||||||
event.content.toModel<MessageLiveLocationContent>(catchError = true)?.let {
|
event.content.toModel<MessageBeaconLocationDataContent>(catchError = true)?.let {
|
||||||
liveLocationAggregationProcessor.handleLiveLocation(realm, event, it, roomId, isLocalEcho)
|
liveLocationAggregationProcessor.handleBeaconLocationData(realm, event, it, roomId, isLocalEcho)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -258,13 +258,13 @@ internal class EventRelationsAggregationProcessor @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
in EventType.STATE_ROOM_BEACON_INFO -> {
|
in EventType.STATE_ROOM_BEACON_INFO -> {
|
||||||
event.content.toModel<LiveLocationBeaconContent>(catchError = true)?.let {
|
event.content.toModel<MessageBeaconInfoContent>(catchError = true)?.let {
|
||||||
liveLocationAggregationProcessor.handleBeaconInfo(realm, event, it, roomId, isLocalEcho)
|
liveLocationAggregationProcessor.handleBeaconInfo(realm, event, it, roomId, isLocalEcho)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
in EventType.BEACON_LOCATION_DATA -> {
|
in EventType.BEACON_LOCATION_DATA -> {
|
||||||
event.content.toModel<MessageLiveLocationContent>(catchError = true)?.let {
|
event.content.toModel<MessageBeaconLocationDataContent>(catchError = true)?.let {
|
||||||
liveLocationAggregationProcessor.handleLiveLocation(realm, event, it, roomId, isLocalEcho)
|
liveLocationAggregationProcessor.handleBeaconLocationData(realm, event, it, roomId, isLocalEcho)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> Timber.v("UnHandled event ${event.eventId}")
|
else -> Timber.v("UnHandled event ${event.eventId}")
|
||||||
|
|
|
@ -21,8 +21,8 @@ import org.matrix.android.sdk.api.extensions.orTrue
|
||||||
import org.matrix.android.sdk.api.session.events.model.Event
|
import org.matrix.android.sdk.api.session.events.model.Event
|
||||||
import org.matrix.android.sdk.api.session.events.model.toContent
|
import org.matrix.android.sdk.api.session.events.model.toContent
|
||||||
import org.matrix.android.sdk.api.session.events.model.toModel
|
import org.matrix.android.sdk.api.session.events.model.toModel
|
||||||
import org.matrix.android.sdk.api.session.room.model.livelocation.LiveLocationBeaconContent
|
import org.matrix.android.sdk.api.session.room.model.livelocation.MessageBeaconInfoContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageLiveLocationContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageBeaconLocationDataContent
|
||||||
import org.matrix.android.sdk.internal.database.mapper.ContentMapper
|
import org.matrix.android.sdk.internal.database.mapper.ContentMapper
|
||||||
import org.matrix.android.sdk.internal.database.model.livelocation.LiveLocationAggregatedSummaryEntity
|
import org.matrix.android.sdk.internal.database.model.livelocation.LiveLocationAggregatedSummaryEntity
|
||||||
import org.matrix.android.sdk.internal.database.query.getOrCreate
|
import org.matrix.android.sdk.internal.database.query.getOrCreate
|
||||||
|
@ -31,7 +31,7 @@ import javax.inject.Inject
|
||||||
|
|
||||||
internal class DefaultLiveLocationAggregationProcessor @Inject constructor() : LiveLocationAggregationProcessor {
|
internal class DefaultLiveLocationAggregationProcessor @Inject constructor() : LiveLocationAggregationProcessor {
|
||||||
|
|
||||||
override fun handleBeaconInfo(realm: Realm, event: Event, content: LiveLocationBeaconContent, roomId: String, isLocalEcho: Boolean) {
|
override fun handleBeaconInfo(realm: Realm, event: Event, content: MessageBeaconInfoContent, roomId: String, isLocalEcho: Boolean) {
|
||||||
if (event.senderId.isNullOrEmpty() || isLocalEcho) {
|
if (event.senderId.isNullOrEmpty() || isLocalEcho) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -58,7 +58,7 @@ internal class DefaultLiveLocationAggregationProcessor @Inject constructor() : L
|
||||||
aggregatedSummary.isActive = content.isLive
|
aggregatedSummary.isActive = content.isLive
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun handleLiveLocation(realm: Realm, event: Event, content: MessageLiveLocationContent, roomId: String, isLocalEcho: Boolean) {
|
override fun handleBeaconLocationData(realm: Realm, event: Event, content: MessageBeaconLocationDataContent, roomId: String, isLocalEcho: Boolean) {
|
||||||
if (event.senderId.isNullOrEmpty() || isLocalEcho) {
|
if (event.senderId.isNullOrEmpty() || isLocalEcho) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -78,7 +78,7 @@ internal class DefaultLiveLocationAggregationProcessor @Inject constructor() : L
|
||||||
val updatedLocationTimestamp = content.getBestTimestampAsMilliseconds() ?: 0
|
val updatedLocationTimestamp = content.getBestTimestampAsMilliseconds() ?: 0
|
||||||
val currentLocationTimestamp = ContentMapper
|
val currentLocationTimestamp = ContentMapper
|
||||||
.map(aggregatedSummary.lastLocationContent)
|
.map(aggregatedSummary.lastLocationContent)
|
||||||
.toModel<MessageLiveLocationContent>()
|
.toModel<MessageBeaconLocationDataContent>()
|
||||||
?.getBestTimestampAsMilliseconds()
|
?.getBestTimestampAsMilliseconds()
|
||||||
?: 0
|
?: 0
|
||||||
|
|
||||||
|
|
|
@ -18,22 +18,22 @@ package org.matrix.android.sdk.internal.session.room.aggregation.livelocation
|
||||||
|
|
||||||
import io.realm.Realm
|
import io.realm.Realm
|
||||||
import org.matrix.android.sdk.api.session.events.model.Event
|
import org.matrix.android.sdk.api.session.events.model.Event
|
||||||
import org.matrix.android.sdk.api.session.room.model.livelocation.LiveLocationBeaconContent
|
import org.matrix.android.sdk.api.session.room.model.livelocation.MessageBeaconInfoContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageLiveLocationContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageBeaconLocationDataContent
|
||||||
|
|
||||||
internal interface LiveLocationAggregationProcessor {
|
internal interface LiveLocationAggregationProcessor {
|
||||||
fun handleBeaconInfo(
|
fun handleBeaconInfo(
|
||||||
realm: Realm,
|
realm: Realm,
|
||||||
event: Event,
|
event: Event,
|
||||||
content: LiveLocationBeaconContent,
|
content: MessageBeaconInfoContent,
|
||||||
roomId: String,
|
roomId: String,
|
||||||
isLocalEcho: Boolean,
|
isLocalEcho: Boolean,
|
||||||
)
|
)
|
||||||
|
|
||||||
fun handleLiveLocation(
|
fun handleBeaconLocationData(
|
||||||
realm: Realm,
|
realm: Realm,
|
||||||
event: Event,
|
event: Event,
|
||||||
content: MessageLiveLocationContent,
|
content: MessageBeaconLocationDataContent,
|
||||||
roomId: String,
|
roomId: String,
|
||||||
isLocalEcho: Boolean,
|
isLocalEcho: Boolean,
|
||||||
)
|
)
|
||||||
|
|
|
@ -43,7 +43,7 @@ import org.matrix.android.sdk.api.session.room.model.message.MessageEndPollConte
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageFileContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageFileContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageFormat
|
import org.matrix.android.sdk.api.session.room.model.message.MessageFormat
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageImageContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageImageContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageLiveLocationContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageBeaconLocationDataContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageLocationContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageLocationContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessagePollContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessagePollContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessagePollResponseContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessagePollResponseContent
|
||||||
|
@ -249,7 +249,7 @@ internal class LocalEchoEventFactory @Inject constructor(
|
||||||
longitude: Double,
|
longitude: Double,
|
||||||
uncertainty: Double?): Event {
|
uncertainty: Double?): Event {
|
||||||
val geoUri = buildGeoUri(latitude, longitude, uncertainty)
|
val geoUri = buildGeoUri(latitude, longitude, uncertainty)
|
||||||
val content = MessageLiveLocationContent(
|
val content = MessageBeaconLocationDataContent(
|
||||||
body = geoUri,
|
body = geoUri,
|
||||||
relatesTo = RelationDefaultContent(
|
relatesTo = RelationDefaultContent(
|
||||||
type = RelationType.REFERENCE,
|
type = RelationType.REFERENCE,
|
||||||
|
|
|
@ -33,7 +33,7 @@ import org.matrix.android.sdk.api.session.room.model.RoomHistoryVisibility
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomJoinRules
|
import org.matrix.android.sdk.api.session.room.model.RoomJoinRules
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomJoinRulesAllowEntry
|
import org.matrix.android.sdk.api.session.room.model.RoomJoinRulesAllowEntry
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomJoinRulesContent
|
import org.matrix.android.sdk.api.session.room.model.RoomJoinRulesContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.livelocation.LiveLocationBeaconContent
|
import org.matrix.android.sdk.api.session.room.model.livelocation.MessageBeaconInfoContent
|
||||||
import org.matrix.android.sdk.api.session.room.state.StateService
|
import org.matrix.android.sdk.api.session.room.state.StateService
|
||||||
import org.matrix.android.sdk.api.util.JsonDict
|
import org.matrix.android.sdk.api.util.JsonDict
|
||||||
import org.matrix.android.sdk.api.util.MimeTypes
|
import org.matrix.android.sdk.api.util.MimeTypes
|
||||||
|
@ -192,7 +192,7 @@ internal class DefaultStateService @AssistedInject constructor(@Assisted private
|
||||||
|
|
||||||
override suspend fun stopLiveLocation(userId: String) {
|
override suspend fun stopLiveLocation(userId: String) {
|
||||||
getLiveLocationBeaconInfo(userId, true)?.let { beaconInfoStateEvent ->
|
getLiveLocationBeaconInfo(userId, true)?.let { beaconInfoStateEvent ->
|
||||||
beaconInfoStateEvent.getClearContent()?.toModel<LiveLocationBeaconContent>()?.let { content ->
|
beaconInfoStateEvent.getClearContent()?.toModel<MessageBeaconInfoContent>()?.let { content ->
|
||||||
val updatedContent = content.copy(isLive = false).toContent()
|
val updatedContent = content.copy(isLive = false).toContent()
|
||||||
|
|
||||||
beaconInfoStateEvent.stateKey?.let {
|
beaconInfoStateEvent.stateKey?.let {
|
||||||
|
@ -217,7 +217,7 @@ internal class DefaultStateService @AssistedInject constructor(@Assisted private
|
||||||
}
|
}
|
||||||
.firstOrNull { beaconInfoEvent ->
|
.firstOrNull { beaconInfoEvent ->
|
||||||
!filterOnlyLive ||
|
!filterOnlyLive ||
|
||||||
beaconInfoEvent.getClearContent()?.toModel<LiveLocationBeaconContent>()?.isLive.orFalse()
|
beaconInfoEvent.getClearContent()?.toModel<MessageBeaconInfoContent>()?.isLive.orFalse()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@ import im.vector.app.features.home.room.detail.timeline.item.AbsMessageItem
|
||||||
import im.vector.app.features.home.room.detail.timeline.item.MessageLiveLocationStartItem
|
import im.vector.app.features.home.room.detail.timeline.item.MessageLiveLocationStartItem
|
||||||
import im.vector.app.features.home.room.detail.timeline.item.MessageLiveLocationStartItem_
|
import im.vector.app.features.home.room.detail.timeline.item.MessageLiveLocationStartItem_
|
||||||
import org.matrix.android.sdk.api.extensions.orFalse
|
import org.matrix.android.sdk.api.extensions.orFalse
|
||||||
import org.matrix.android.sdk.api.session.room.model.livelocation.LiveLocationBeaconContent
|
import org.matrix.android.sdk.api.session.room.model.livelocation.MessageBeaconInfoContent
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class LiveLocationMessageItemFactory @Inject constructor(
|
class LiveLocationMessageItemFactory @Inject constructor(
|
||||||
|
@ -34,20 +34,20 @@ class LiveLocationMessageItemFactory @Inject constructor(
|
||||||
) {
|
) {
|
||||||
|
|
||||||
fun create(
|
fun create(
|
||||||
liveLocationContent: LiveLocationBeaconContent,
|
beaconInfoContent: MessageBeaconInfoContent,
|
||||||
highlight: Boolean,
|
highlight: Boolean,
|
||||||
attributes: AbsMessageItem.Attributes,
|
attributes: AbsMessageItem.Attributes,
|
||||||
): VectorEpoxyModel<*>? {
|
): VectorEpoxyModel<*>? {
|
||||||
// TODO handle location received and stopped states
|
// TODO handle location received and stopped states
|
||||||
return when {
|
return when {
|
||||||
isLiveRunning(liveLocationContent) -> buildStartLiveItem(highlight, attributes)
|
isLiveRunning(beaconInfoContent) -> buildStartLiveItem(highlight, attributes)
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isLiveRunning(liveLocationContent: LiveLocationBeaconContent): Boolean {
|
private fun isLiveRunning(beaconInfoContent: MessageBeaconInfoContent): Boolean {
|
||||||
// TODO when we will use aggregatedSummary, check if the live has timed out as well
|
// TODO when we will use aggregatedSummary, check if the live has timed out as well
|
||||||
return liveLocationContent.isLive.orFalse()
|
return beaconInfoContent.isLive.orFalse()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun buildStartLiveItem(
|
private fun buildStartLiveItem(
|
||||||
|
|
|
@ -98,7 +98,7 @@ import org.matrix.android.sdk.api.session.events.model.RelationType
|
||||||
import org.matrix.android.sdk.api.session.events.model.content.EncryptedEventContent
|
import org.matrix.android.sdk.api.session.events.model.content.EncryptedEventContent
|
||||||
import org.matrix.android.sdk.api.session.events.model.isThread
|
import org.matrix.android.sdk.api.session.events.model.isThread
|
||||||
import org.matrix.android.sdk.api.session.events.model.toModel
|
import org.matrix.android.sdk.api.session.events.model.toModel
|
||||||
import org.matrix.android.sdk.api.session.room.model.livelocation.LiveLocationBeaconContent
|
import org.matrix.android.sdk.api.session.room.model.livelocation.MessageBeaconInfoContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageAudioContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageAudioContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageContentWithFormattedBody
|
import org.matrix.android.sdk.api.session.room.model.message.MessageContentWithFormattedBody
|
||||||
|
@ -207,15 +207,15 @@ class MessageItemFactory @Inject constructor(
|
||||||
is MessageAudioContent -> buildAudioContent(params, messageContent, informationData, highlight, attributes)
|
is MessageAudioContent -> buildAudioContent(params, messageContent, informationData, highlight, attributes)
|
||||||
is MessageVerificationRequestContent -> buildVerificationRequestMessageItem(messageContent, informationData, highlight, callback, attributes)
|
is MessageVerificationRequestContent -> buildVerificationRequestMessageItem(messageContent, informationData, highlight, callback, attributes)
|
||||||
is MessagePollContent -> buildPollItem(messageContent, informationData, highlight, callback, attributes)
|
is MessagePollContent -> buildPollItem(messageContent, informationData, highlight, callback, attributes)
|
||||||
is MessageLocationContent -> {
|
is MessageLocationContent -> {
|
||||||
if (vectorPreferences.labsRenderLocationsInTimeline()) {
|
if (vectorPreferences.labsRenderLocationsInTimeline()) {
|
||||||
buildLocationItem(messageContent, informationData, highlight, attributes)
|
buildLocationItem(messageContent, informationData, highlight, attributes)
|
||||||
} else {
|
} else {
|
||||||
buildMessageTextItem(messageContent.body, false, informationData, highlight, callback, attributes)
|
buildMessageTextItem(messageContent.body, false, informationData, highlight, callback, attributes)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
is LiveLocationBeaconContent -> liveLocationMessageItemFactory.create(messageContent, highlight, attributes)
|
is MessageBeaconInfoContent -> liveLocationMessageItemFactory.create(messageContent, highlight, attributes)
|
||||||
else -> buildNotHandledMessageItem(messageContent, informationData, highlight, callback, attributes)
|
else -> buildNotHandledMessageItem(messageContent, informationData, highlight, callback, attributes)
|
||||||
}
|
}
|
||||||
return messageItem?.apply {
|
return messageItem?.apply {
|
||||||
layout(informationData.messageLayout.layoutRes)
|
layout(informationData.messageLayout.layoutRes)
|
||||||
|
|
|
@ -59,12 +59,12 @@ class TimelineMessageLayoutFactory @Inject constructor(private val session: Sess
|
||||||
MessageType.MSGTYPE_VIDEO,
|
MessageType.MSGTYPE_VIDEO,
|
||||||
MessageType.MSGTYPE_STICKER_LOCAL,
|
MessageType.MSGTYPE_STICKER_LOCAL,
|
||||||
MessageType.MSGTYPE_EMOTE,
|
MessageType.MSGTYPE_EMOTE,
|
||||||
MessageType.MSGTYPE_LIVE_LOCATION_STATE,
|
MessageType.MSGTYPE_BEACON_INFO,
|
||||||
)
|
)
|
||||||
private val MSG_TYPES_WITH_TIMESTAMP_INSIDE_MESSAGE = setOf(
|
private val MSG_TYPES_WITH_TIMESTAMP_INSIDE_MESSAGE = setOf(
|
||||||
MessageType.MSGTYPE_IMAGE,
|
MessageType.MSGTYPE_IMAGE,
|
||||||
MessageType.MSGTYPE_VIDEO,
|
MessageType.MSGTYPE_VIDEO,
|
||||||
MessageType.MSGTYPE_LIVE_LOCATION_STATE,
|
MessageType.MSGTYPE_BEACON_INFO,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,8 +151,8 @@ class TimelineMessageLayoutFactory @Inject constructor(private val session: Sess
|
||||||
|
|
||||||
private fun MessageContent?.shouldAddMessageOverlay(): Boolean {
|
private fun MessageContent?.shouldAddMessageOverlay(): Boolean {
|
||||||
return when {
|
return when {
|
||||||
this == null || msgType == MessageType.MSGTYPE_LIVE_LOCATION_STATE -> false
|
this == null || msgType == MessageType.MSGTYPE_BEACON_INFO -> false
|
||||||
msgType == MessageType.MSGTYPE_LOCATION -> vectorPreferences.labsRenderLocationsInTimeline()
|
msgType == MessageType.MSGTYPE_LOCATION -> vectorPreferences.labsRenderLocationsInTimeline()
|
||||||
else -> msgType in MSG_TYPES_WITH_TIMESTAMP_INSIDE_MESSAGE
|
else -> msgType in MSG_TYPES_WITH_TIMESTAMP_INSIDE_MESSAGE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@ import org.matrix.android.sdk.api.session.Session
|
||||||
import org.matrix.android.sdk.api.session.events.model.EventType
|
import org.matrix.android.sdk.api.session.events.model.EventType
|
||||||
import org.matrix.android.sdk.api.session.events.model.toContent
|
import org.matrix.android.sdk.api.session.events.model.toContent
|
||||||
import org.matrix.android.sdk.api.session.getRoom
|
import org.matrix.android.sdk.api.session.getRoom
|
||||||
import org.matrix.android.sdk.api.session.room.model.livelocation.LiveLocationBeaconContent
|
import org.matrix.android.sdk.api.session.room.model.livelocation.MessageBeaconInfoContent
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.util.Timer
|
import java.util.Timer
|
||||||
import java.util.TimerTask
|
import java.util.TimerTask
|
||||||
|
@ -96,7 +96,7 @@ class LocationSharingService : VectorService(), LocationTracker.Callback {
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun sendLiveBeaconInfo(session: Session, roomArgs: RoomArgs) {
|
private suspend fun sendLiveBeaconInfo(session: Session, roomArgs: RoomArgs) {
|
||||||
val beaconContent = LiveLocationBeaconContent(
|
val beaconContent = MessageBeaconInfoContent(
|
||||||
timeout = roomArgs.durationMillis,
|
timeout = roomArgs.durationMillis,
|
||||||
isLive = true,
|
isLive = true,
|
||||||
unstableTimestampAsMilliseconds = clock.epochMillis()
|
unstableTimestampAsMilliseconds = clock.epochMillis()
|
||||||
|
|
Loading…
Reference in New Issue