mirror of
https://github.com/element-hq/element-android
synced 2024-11-24 10:25:35 +03:00
Show start event of live without conditions
This commit is contained in:
parent
e93e51d03c
commit
aabfc81816
5 changed files with 341 additions and 305 deletions
|
@ -18,12 +18,27 @@ package org.matrix.android.sdk.api.session.room.model.livelocation
|
||||||
|
|
||||||
import com.squareup.moshi.Json
|
import com.squareup.moshi.Json
|
||||||
import com.squareup.moshi.JsonClass
|
import com.squareup.moshi.JsonClass
|
||||||
|
import org.matrix.android.sdk.api.session.events.model.Content
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.LocationAsset
|
import org.matrix.android.sdk.api.session.room.model.message.LocationAsset
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.LocationAssetType
|
import org.matrix.android.sdk.api.session.room.model.message.LocationAssetType
|
||||||
import org.matrix.android.sdk.api.session.room.model.message.MessageLiveLocationContent
|
import org.matrix.android.sdk.api.session.room.model.message.MessageLiveLocationContent
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.message.MessageContent
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.message.MessageType
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.relation.RelationDefaultContent
|
||||||
|
|
||||||
@JsonClass(generateAdapter = true)
|
@JsonClass(generateAdapter = true)
|
||||||
data class LiveLocationBeaconContent(
|
data class LiveLocationBeaconContent(
|
||||||
|
// TODO check if there is a better way than implementing MessageContent
|
||||||
|
/**
|
||||||
|
* Local message type, not from server
|
||||||
|
*/
|
||||||
|
@Transient
|
||||||
|
override val msgType: String = MessageType.MSGTYPE_LIVE_LOCATION_STATE,
|
||||||
|
|
||||||
|
@Json(name = "body") override val body: String = "",
|
||||||
|
@Json(name = "m.relates_to") override val relatesTo: RelationDefaultContent? = null,
|
||||||
|
@Json(name = "m.new_content") override val newContent: Content? = null,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates user's intent to share ephemeral location.
|
* Indicates user's intent to share ephemeral location.
|
||||||
*/
|
*/
|
||||||
|
@ -44,7 +59,7 @@ data class LiveLocationBeaconContent(
|
||||||
* Client side tracking of the last location
|
* Client side tracking of the last location
|
||||||
*/
|
*/
|
||||||
var lastLocationContent: MessageLiveLocationContent? = null
|
var lastLocationContent: MessageLiveLocationContent? = null
|
||||||
) {
|
) : MessageContent {
|
||||||
|
|
||||||
fun getBestBeaconInfo() = beaconInfo ?: unstableBeaconInfo
|
fun getBestBeaconInfo() = beaconInfo ?: unstableBeaconInfo
|
||||||
|
|
||||||
|
|
|
@ -41,5 +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_LIVE_LOCATION = "org.matrix.android.sdk.livelocation"
|
const val MSGTYPE_LIVE_LOCATION = "org.matrix.android.sdk.livelocation"
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +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.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
|
||||||
|
@ -138,6 +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>()
|
||||||
else -> (annotations?.editSummary?.latestContent ?: root.getClearContent()).toModel()
|
else -> (annotations?.editSummary?.latestContent ?: root.getClearContent()).toModel()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,6 +50,7 @@ import im.vector.app.features.home.room.detail.timeline.item.MessageFileItem_
|
||||||
import im.vector.app.features.home.room.detail.timeline.item.MessageImageVideoItem
|
import im.vector.app.features.home.room.detail.timeline.item.MessageImageVideoItem
|
||||||
import im.vector.app.features.home.room.detail.timeline.item.MessageImageVideoItem_
|
import im.vector.app.features.home.room.detail.timeline.item.MessageImageVideoItem_
|
||||||
import im.vector.app.features.home.room.detail.timeline.item.MessageInformationData
|
import im.vector.app.features.home.room.detail.timeline.item.MessageInformationData
|
||||||
|
import im.vector.app.features.home.room.detail.timeline.item.MessageLiveLocationStartItem_
|
||||||
import im.vector.app.features.home.room.detail.timeline.item.MessageLocationItem
|
import im.vector.app.features.home.room.detail.timeline.item.MessageLocationItem
|
||||||
import im.vector.app.features.home.room.detail.timeline.item.MessageLocationItem_
|
import im.vector.app.features.home.room.detail.timeline.item.MessageLocationItem_
|
||||||
import im.vector.app.features.home.room.detail.timeline.item.MessageTextItem
|
import im.vector.app.features.home.room.detail.timeline.item.MessageTextItem
|
||||||
|
@ -96,6 +97,7 @@ import org.matrix.android.sdk.api.session.Session
|
||||||
import org.matrix.android.sdk.api.session.events.model.RelationType
|
import org.matrix.android.sdk.api.session.events.model.RelationType
|
||||||
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.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
|
||||||
|
@ -212,6 +214,19 @@ class MessageItemFactory @Inject constructor(
|
||||||
buildMessageTextItem(messageContent.body, false, informationData, highlight, callback, attributes)
|
buildMessageTextItem(messageContent.body, false, informationData, highlight, callback, attributes)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
is LiveLocationBeaconContent -> {
|
||||||
|
// TODO extract in method and in a dedicated factory class
|
||||||
|
// TODO check if it is still live and that the timeout has not elapsed
|
||||||
|
val width = timelineMediaSizeProvider.getMaxSize().first
|
||||||
|
val height = dimensionConverter.dpToPx(200)
|
||||||
|
|
||||||
|
return MessageLiveLocationStartItem_()
|
||||||
|
.attributes(attributes)
|
||||||
|
.mapWidth(width)
|
||||||
|
.mapHeight(height)
|
||||||
|
.highlighted(highlight)
|
||||||
|
.leftGuideline(avatarSizeProvider.leftGuideline)
|
||||||
|
}
|
||||||
else -> buildNotHandledMessageItem(messageContent, informationData, highlight, callback, attributes)
|
else -> buildNotHandledMessageItem(messageContent, informationData, highlight, callback, attributes)
|
||||||
}
|
}
|
||||||
return messageItem?.apply {
|
return messageItem?.apply {
|
||||||
|
|
|
@ -26,7 +26,8 @@ import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class TimelineItemFactory @Inject constructor(private val messageItemFactory: MessageItemFactory,
|
class TimelineItemFactory @Inject constructor(
|
||||||
|
private val messageItemFactory: MessageItemFactory,
|
||||||
private val encryptedItemFactory: EncryptedItemFactory,
|
private val encryptedItemFactory: EncryptedItemFactory,
|
||||||
private val noticeItemFactory: NoticeItemFactory,
|
private val noticeItemFactory: NoticeItemFactory,
|
||||||
private val defaultItemFactory: DefaultItemFactory,
|
private val defaultItemFactory: DefaultItemFactory,
|
||||||
|
@ -36,7 +37,8 @@ class TimelineItemFactory @Inject constructor(private val messageItemFactory: Me
|
||||||
private val verificationConclusionItemFactory: VerificationItemFactory,
|
private val verificationConclusionItemFactory: VerificationItemFactory,
|
||||||
private val callItemFactory: CallItemFactory,
|
private val callItemFactory: CallItemFactory,
|
||||||
private val decryptionFailureTracker: DecryptionFailureTracker,
|
private val decryptionFailureTracker: DecryptionFailureTracker,
|
||||||
private val timelineEventVisibilityHelper: TimelineEventVisibilityHelper) {
|
private val timelineEventVisibilityHelper: TimelineEventVisibilityHelper,
|
||||||
|
) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reminder: nextEvent is older and prevEvent is newer.
|
* Reminder: nextEvent is older and prevEvent is newer.
|
||||||
|
@ -83,6 +85,7 @@ class TimelineItemFactory @Inject constructor(private val messageItemFactory: Me
|
||||||
EventType.STATE_ROOM_ENCRYPTION -> encryptionItemFactory.create(params)
|
EventType.STATE_ROOM_ENCRYPTION -> encryptionItemFactory.create(params)
|
||||||
// State room create
|
// State room create
|
||||||
EventType.STATE_ROOM_CREATE -> roomCreateItemFactory.create(params)
|
EventType.STATE_ROOM_CREATE -> roomCreateItemFactory.create(params)
|
||||||
|
in EventType.STATE_ROOM_BEACON_INFO -> messageItemFactory.create(params)
|
||||||
// Unhandled state event types
|
// Unhandled state event types
|
||||||
else -> {
|
else -> {
|
||||||
// Should only happen when shouldShowHiddenEvents() settings is ON
|
// Should only happen when shouldShowHiddenEvents() settings is ON
|
||||||
|
|
Loading…
Reference in a new issue