Create toState() fun and use the enum
This commit is contained in:
parent
53410789c0
commit
c6b231c0b1
@ -17,6 +17,7 @@ package im.vector.matrix.android.api.session.room.model
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
import com.squareup.moshi.JsonClass
|
||||
import im.vector.matrix.android.internal.session.room.VerificationState
|
||||
|
||||
/**
|
||||
* Contains an aggregated summary info of the references.
|
||||
@ -26,6 +27,6 @@ import com.squareup.moshi.JsonClass
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class ReferencesAggregatedContent(
|
||||
// Verification status info for m.key.verification.request msgType events
|
||||
@Json(name = "verif_sum") val verificationSummary: String
|
||||
@Json(name = "verif_sum") val verificationState: VerificationState
|
||||
// Add more fields for future summary info.
|
||||
)
|
||||
|
@ -73,6 +73,21 @@ fun VerificationState.isCanceled(): Boolean {
|
||||
return this == VerificationState.CANCELED_BY_ME || this == VerificationState.CANCELED_BY_OTHER
|
||||
}
|
||||
|
||||
// State transition with control
|
||||
private fun VerificationState?.toState(newState: VerificationState): VerificationState {
|
||||
// Cancel is always prioritary ?
|
||||
// Eg id i found that mac or keys mismatch and send a cancel and the other send a done, i have to
|
||||
// consider as canceled
|
||||
if (newState.isCanceled()) {
|
||||
return newState
|
||||
}
|
||||
// never move out of cancel
|
||||
if (this?.isCanceled() == true) {
|
||||
return this
|
||||
}
|
||||
return newState
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by EventRelationAggregationUpdater, when new events that can affect relations are inserted in base.
|
||||
*/
|
||||
@ -550,26 +565,26 @@ internal class DefaultEventRelationsAggregationTask @Inject constructor(
|
||||
} else {
|
||||
ContentMapper.map(verifSummary.content)?.toModel<ReferencesAggregatedContent>()
|
||||
var data = ContentMapper.map(verifSummary.content)?.toModel<ReferencesAggregatedContent>()
|
||||
?: ReferencesAggregatedContent(VerificationState.REQUEST.name)
|
||||
?: ReferencesAggregatedContent(VerificationState.REQUEST)
|
||||
// TODO ignore invalid messages? e.g a START after a CANCEL?
|
||||
// i.e. never change state if already canceled/done
|
||||
val currentState = VerificationState.values().firstOrNull { data.verificationSummary == it.name }
|
||||
val currentState = data.verificationState
|
||||
val newState = when (event.getClearType()) {
|
||||
EventType.KEY_VERIFICATION_START,
|
||||
EventType.KEY_VERIFICATION_ACCEPT,
|
||||
EventType.KEY_VERIFICATION_READY,
|
||||
EventType.KEY_VERIFICATION_KEY,
|
||||
EventType.KEY_VERIFICATION_MAC -> updateVerificationState(currentState, VerificationState.WAITING)
|
||||
EventType.KEY_VERIFICATION_CANCEL -> updateVerificationState(currentState, if (event.senderId == userId) {
|
||||
EventType.KEY_VERIFICATION_MAC -> currentState.toState(VerificationState.WAITING)
|
||||
EventType.KEY_VERIFICATION_CANCEL -> currentState.toState(if (event.senderId == userId) {
|
||||
VerificationState.CANCELED_BY_ME
|
||||
} else {
|
||||
VerificationState.CANCELED_BY_OTHER
|
||||
})
|
||||
EventType.KEY_VERIFICATION_DONE -> updateVerificationState(currentState, VerificationState.DONE)
|
||||
EventType.KEY_VERIFICATION_DONE -> currentState.toState(VerificationState.DONE)
|
||||
else -> VerificationState.REQUEST
|
||||
}
|
||||
|
||||
data = data.copy(verificationSummary = newState.name)
|
||||
data = data.copy(verificationState = newState)
|
||||
verifSummary.content = ContentMapper.map(data.toContent())
|
||||
}
|
||||
|
||||
@ -580,19 +595,4 @@ internal class DefaultEventRelationsAggregationTask @Inject constructor(
|
||||
verifSummary.sourceEvents.add(event.eventId)
|
||||
}
|
||||
}
|
||||
|
||||
// TODO Ben refacto -> fun VerifcationState?.toState(state): State
|
||||
private fun updateVerificationState(oldState: VerificationState?, newState: VerificationState): VerificationState {
|
||||
// Cancel is always prioritary ?
|
||||
// Eg id i found that mac or keys mismatch and send a cancel and the other send a done, i have to
|
||||
// consider as canceled
|
||||
if (newState.isCanceled()) {
|
||||
return newState
|
||||
}
|
||||
// never move out of cancel
|
||||
if (oldState?.isCanceled() == true) {
|
||||
return oldState
|
||||
}
|
||||
return newState
|
||||
}
|
||||
}
|
||||
|
@ -104,11 +104,9 @@ class MessageInformationDataFactory @Inject constructor(private val session: Ses
|
||||
}
|
||||
.toList(),
|
||||
referencesInfoData = event.annotations?.referencesAggregatedSummary?.let { referencesAggregatedSummary ->
|
||||
val stateStr = referencesAggregatedSummary.content.toModel<ReferencesAggregatedContent>()?.verificationSummary
|
||||
ReferencesInfoData(
|
||||
VerificationState.values().firstOrNull { stateStr == it.name }
|
||||
?: VerificationState.REQUEST
|
||||
)
|
||||
val verificationState = referencesAggregatedSummary.content.toModel<ReferencesAggregatedContent>()?.verificationState
|
||||
?: VerificationState.REQUEST
|
||||
ReferencesInfoData(verificationState)
|
||||
},
|
||||
sentByMe = event.root.senderId == session.myUserId
|
||||
)
|
||||
|
@ -31,6 +31,7 @@ import com.airbnb.epoxy.EpoxyModelClass
|
||||
import im.vector.matrix.android.api.session.crypto.sas.VerificationService
|
||||
import im.vector.matrix.android.internal.session.room.VerificationState
|
||||
import im.vector.riotx.R
|
||||
import im.vector.riotx.core.extensions.exhaustive
|
||||
import im.vector.riotx.core.resources.ColorProvider
|
||||
import im.vector.riotx.core.utils.DebouncedClickListener
|
||||
import im.vector.riotx.features.home.AvatarRenderer
|
||||
@ -102,12 +103,7 @@ abstract class VerificationRequestItem : AbsBaseMessageItem<VerificationRequestI
|
||||
}
|
||||
holder.statusTextView.isVisible = true
|
||||
}
|
||||
else -> {
|
||||
holder.buttonBar.isVisible = false
|
||||
holder.statusTextView.text = null
|
||||
holder.statusTextView.isVisible = false
|
||||
}
|
||||
}
|
||||
}.exhaustive
|
||||
|
||||
// Always hide buttons if request is too old
|
||||
if (!VerificationService.isValidRequest(attributes.informationData.ageLocalTS)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user