diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/LiveLocationShareMessageItemFactory.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/LiveLocationShareMessageItemFactory.kt index f993676958..479a742369 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/LiveLocationShareMessageItemFactory.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/LiveLocationShareMessageItemFactory.kt @@ -24,7 +24,6 @@ import im.vector.app.features.home.room.detail.timeline.helper.AvatarSizeProvide import im.vector.app.features.home.room.detail.timeline.helper.LocationPinProvider import im.vector.app.features.home.room.detail.timeline.helper.TimelineMediaSizeProvider import im.vector.app.features.home.room.detail.timeline.item.AbsMessageItem -import im.vector.app.features.home.room.detail.timeline.item.LiveLocationShareSummaryData import im.vector.app.features.home.room.detail.timeline.item.MessageLiveLocationInactiveItem import im.vector.app.features.home.room.detail.timeline.item.MessageLiveLocationInactiveItem_ import im.vector.app.features.home.room.detail.timeline.item.MessageLiveLocationItem @@ -36,6 +35,7 @@ import im.vector.app.features.location.UrlMapProvider import im.vector.app.features.location.toLocationData import org.matrix.android.sdk.api.extensions.orFalse import org.matrix.android.sdk.api.session.Session +import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent import org.threeten.bp.LocalDateTime import timber.log.Timber import javax.inject.Inject @@ -51,10 +51,11 @@ class LiveLocationShareMessageItemFactory @Inject constructor( ) { fun create( - liveLocationShareSummaryData: LiveLocationShareSummaryData?, + event: TimelineEvent, highlight: Boolean, attributes: AbsMessageItem.Attributes, ): VectorEpoxyModel<*>? { + val liveLocationShareSummaryData = getLiveLocationShareSummaryData(event) val item = when (val currentState = getViewState(liveLocationShareSummaryData)) { LiveLocationShareViewState.Inactive -> buildInactiveItem(highlight, attributes) LiveLocationShareViewState.Loading -> buildLoadingItem(highlight, attributes) @@ -150,6 +151,22 @@ class LiveLocationShareMessageItemFactory @Inject constructor( return liveLocationShareSummaryData.endOfLiveTimestampMillis?.let { DateProvider.toLocalDateTime(timestamp = it) } } + private fun getLiveLocationShareSummaryData(event: TimelineEvent): LiveLocationShareSummaryData? { + return event.annotations?.liveLocationShareAggregatedSummary?.let { summary -> + LiveLocationShareSummaryData( + isActive = summary.isActive, + endOfLiveTimestampMillis = summary.endOfLiveTimestampMillis, + lastGeoUri = summary.lastLocationDataContent?.getBestLocationInfo()?.geoUri + ) + } + } + + private data class LiveLocationShareSummaryData( + val isActive: Boolean?, + val endOfLiveTimestampMillis: Long?, + val lastGeoUri: String?, + ) + private sealed class LiveLocationShareViewState { object Loading : LiveLocationShareViewState() data class Running(val lastGeoUri: String, val endOfLiveDateTime: LocalDateTime?) : LiveLocationShareViewState() diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/MessageItemFactory.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/MessageItemFactory.kt index ea703a0d11..13f783cded 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/MessageItemFactory.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/MessageItemFactory.kt @@ -216,12 +216,7 @@ class MessageItemFactory @Inject constructor( buildMessageTextItem(messageContent.body, false, informationData, highlight, callback, attributes) } } - is MessageBeaconInfoContent -> - liveLocationShareMessageItemFactory.create( - informationData.liveLocationShareSummaryData, - highlight, - attributes - ) + is MessageBeaconInfoContent -> liveLocationShareMessageItemFactory.create(params.event, highlight, attributes) else -> buildNotHandledMessageItem(messageContent, informationData, highlight, callback, attributes) } return messageItem?.apply { diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt index e06a983ab3..7874f843e1 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt @@ -21,7 +21,6 @@ import im.vector.app.core.date.VectorDateFormatter import im.vector.app.core.extensions.localDateTime import im.vector.app.features.home.room.detail.timeline.factory.TimelineItemFactoryParams import im.vector.app.features.home.room.detail.timeline.item.E2EDecoration -import im.vector.app.features.home.room.detail.timeline.item.LiveLocationShareSummaryData import im.vector.app.features.home.room.detail.timeline.item.MessageInformationData import im.vector.app.features.home.room.detail.timeline.item.PollResponseData import im.vector.app.features.home.room.detail.timeline.item.PollVoteSummaryData @@ -120,7 +119,6 @@ class MessageInformationDataFactory @Inject constructor(private val session: Ses isLastFromThisSender = isLastFromThisSender, e2eDecoration = e2eDecoration, sendStateDecoration = sendStateDecoration, - liveLocationShareSummaryData = getLiveLocationShareSummaryData(event) ) } @@ -189,16 +187,6 @@ class MessageInformationDataFactory @Inject constructor(private val session: Ses } } - private fun getLiveLocationShareSummaryData(event: TimelineEvent): LiveLocationShareSummaryData? { - return event.annotations?.liveLocationShareAggregatedSummary?.let { summary -> - LiveLocationShareSummaryData( - isActive = summary.isActive, - endOfLiveTimestampMillis = summary.endOfLiveTimestampMillis, - lastGeoUri = summary.lastLocationDataContent?.getBestLocationInfo()?.geoUri - ) - } - } - /** * Tiles type message never show the sender information (like verification request), so we should repeat it for next message * even if same sender. diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageInformationData.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageInformationData.kt index be0f2d55ca..258424c7de 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageInformationData.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessageInformationData.kt @@ -43,7 +43,6 @@ data class MessageInformationData( val sendStateDecoration: SendStateDecoration = SendStateDecoration.NONE, val isFirstFromThisSender: Boolean = false, val isLastFromThisSender: Boolean = false, - val liveLocationShareSummaryData: LiveLocationShareSummaryData? = null, ) : Parcelable { val matrixItem: MatrixItem @@ -99,13 +98,6 @@ data class PollVoteSummaryData( val percentage: Double = 0.0 ) : Parcelable -@Parcelize -data class LiveLocationShareSummaryData( - val isActive: Boolean?, - val endOfLiveTimestampMillis: Long?, - val lastGeoUri: String?, -) : Parcelable - enum class E2EDecoration { NONE, WARN_IN_CLEAR,