Adding live location summary data into MessageInformationData

This commit is contained in:
Maxime NATUREL 2022-04-29 16:28:34 +02:00
parent 0b00f97879
commit 90aad44edf
2 changed files with 25 additions and 4 deletions

View File

@ -21,6 +21,7 @@ import im.vector.app.core.date.VectorDateFormatter
import im.vector.app.core.extensions.localDateTime 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.factory.TimelineItemFactoryParams
import im.vector.app.features.home.room.detail.timeline.item.E2EDecoration 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.MessageInformationData
import im.vector.app.features.home.room.detail.timeline.item.PollResponseData import im.vector.app.features.home.room.detail.timeline.item.PollResponseData
import im.vector.app.features.home.room.detail.timeline.item.PollVoteSummaryData import im.vector.app.features.home.room.detail.timeline.item.PollVoteSummaryData
@ -44,8 +45,7 @@ import org.matrix.android.sdk.api.session.room.timeline.hasBeenEdited
import javax.inject.Inject import javax.inject.Inject
/** /**
* TODO Update this comment * This class is responsible of building extra information data associated to a given event.
* This class compute if data of an event (such has avatar, display name, ...) should be displayed, depending on the previous event in the timeline
*/ */
class MessageInformationDataFactory @Inject constructor(private val session: Session, class MessageInformationDataFactory @Inject constructor(private val session: Session,
private val dateFormatter: VectorDateFormatter, private val dateFormatter: VectorDateFormatter,
@ -119,7 +119,8 @@ class MessageInformationDataFactory @Inject constructor(private val session: Ses
isFirstFromThisSender = isFirstFromThisSender, isFirstFromThisSender = isFirstFromThisSender,
isLastFromThisSender = isLastFromThisSender, isLastFromThisSender = isLastFromThisSender,
e2eDecoration = e2eDecoration, e2eDecoration = e2eDecoration,
sendStateDecoration = sendStateDecoration sendStateDecoration = sendStateDecoration,
liveLocationShareSummaryData = getLiveLocationShareSummaryData(event)
) )
} }
@ -188,6 +189,16 @@ class MessageInformationDataFactory @Inject constructor(private val session: Ses
} }
} }
private fun getLiveLocationShareSummaryData(event: TimelineEvent): LiveLocationShareSummaryData? {
return event.annotations?.liveLocationShareAggregatedSummary?.let { summary ->
LiveLocationShareSummaryData(
isActive = summary.isActive,
endOfLiveTimestampAsMilliseconds = summary.endOfLiveTimestampAsMilliseconds,
lastGeoUri = summary.lastLocationDataContent?.getBestLocationInfo()?.geoUri
)
}
}
/** /**
* Tiles type message never show the sender information (like verification request), so we should repeat it for next message * Tiles type message never show the sender information (like verification request), so we should repeat it for next message
* even if same sender * even if same sender

View File

@ -20,6 +20,8 @@ import android.os.Parcelable
import im.vector.app.features.home.room.detail.timeline.style.TimelineMessageLayout import im.vector.app.features.home.room.detail.timeline.style.TimelineMessageLayout
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import org.matrix.android.sdk.api.session.crypto.verification.VerificationState import org.matrix.android.sdk.api.session.crypto.verification.VerificationState
import org.matrix.android.sdk.api.session.room.model.message.LocationInfo
import org.matrix.android.sdk.api.session.room.model.message.MessageBeaconLocationDataContent
import org.matrix.android.sdk.api.session.room.send.SendState import org.matrix.android.sdk.api.session.room.send.SendState
import org.matrix.android.sdk.api.util.MatrixItem import org.matrix.android.sdk.api.util.MatrixItem
@ -42,7 +44,8 @@ data class MessageInformationData(
val e2eDecoration: E2EDecoration = E2EDecoration.NONE, val e2eDecoration: E2EDecoration = E2EDecoration.NONE,
val sendStateDecoration: SendStateDecoration = SendStateDecoration.NONE, val sendStateDecoration: SendStateDecoration = SendStateDecoration.NONE,
val isFirstFromThisSender: Boolean = false, val isFirstFromThisSender: Boolean = false,
val isLastFromThisSender: Boolean = false val isLastFromThisSender: Boolean = false,
val liveLocationShareSummaryData: LiveLocationShareSummaryData? = null,
) : Parcelable { ) : Parcelable {
val matrixItem: MatrixItem val matrixItem: MatrixItem
@ -98,6 +101,13 @@ data class PollVoteSummaryData(
val percentage: Double = 0.0 val percentage: Double = 0.0
) : Parcelable ) : Parcelable
@Parcelize
data class LiveLocationShareSummaryData(
val isActive: Boolean?,
val endOfLiveTimestampAsMilliseconds: Long?,
val lastGeoUri: String?,
) : Parcelable
enum class E2EDecoration { enum class E2EDecoration {
NONE, NONE,
WARN_IN_CLEAR, WARN_IN_CLEAR,