Fix / day separator flicker when adding reaction

When adding a reaction, the tmp local echo force the display of a new 'day separator' at the bottom if there was no new message for this day yet (then disappears just after -flicker-)
This commit is contained in:
Valere 2019-05-19 12:06:09 +02:00
parent 3fa9d7a1d4
commit e3b9031e71

View File

@ -21,11 +21,6 @@ import im.vector.matrix.android.api.MatrixCallback
import im.vector.matrix.android.api.session.events.model.Event import im.vector.matrix.android.api.session.events.model.Event
import im.vector.matrix.android.api.session.room.model.annotation.ReactionService import im.vector.matrix.android.api.session.room.model.annotation.ReactionService
import im.vector.matrix.android.api.util.Cancelable import im.vector.matrix.android.api.util.Cancelable
import im.vector.matrix.android.internal.database.helper.addSendingEvent
import im.vector.matrix.android.internal.database.model.ChunkEntity
import im.vector.matrix.android.internal.database.model.RoomEntity
import im.vector.matrix.android.internal.database.query.findLastLiveChunkFromRoom
import im.vector.matrix.android.internal.database.query.where
import im.vector.matrix.android.internal.session.room.send.LocalEchoEventFactory import im.vector.matrix.android.internal.session.room.send.LocalEchoEventFactory
import im.vector.matrix.android.internal.session.room.send.RedactEventWorker import im.vector.matrix.android.internal.session.room.send.RedactEventWorker
import im.vector.matrix.android.internal.session.room.send.SendEventWorker import im.vector.matrix.android.internal.session.room.send.SendEventWorker
@ -33,7 +28,6 @@ import im.vector.matrix.android.internal.task.TaskExecutor
import im.vector.matrix.android.internal.task.configureWith import im.vector.matrix.android.internal.task.configureWith
import im.vector.matrix.android.internal.util.CancelableWork import im.vector.matrix.android.internal.util.CancelableWork
import im.vector.matrix.android.internal.util.WorkerParamsFactory import im.vector.matrix.android.internal.util.WorkerParamsFactory
import im.vector.matrix.android.internal.util.tryTransactionAsync
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit


private const val REACTION_WORK = "REACTION_WORK" private const val REACTION_WORK = "REACTION_WORK"
@ -52,9 +46,10 @@ internal class DefaultReactionService(private val roomId: String,




override fun sendReaction(reaction: String, targetEventId: String): Cancelable { override fun sendReaction(reaction: String, targetEventId: String): Cancelable {
val event = eventFactory.createReactionEvent(roomId, targetEventId, reaction).also { val event = eventFactory.createReactionEvent(roomId, targetEventId, reaction)
saveLocalEcho(it) // .also {
} // //saveLocalEcho(it)
// }
val sendRelationWork = createSendRelationWork(event) val sendRelationWork = createSendRelationWork(event)
WorkManager.getInstance() WorkManager.getInstance()
.beginUniqueWork(buildWorkIdentifier(REACTION_WORK), ExistingWorkPolicy.APPEND, sendRelationWork) .beginUniqueWork(buildWorkIdentifier(REACTION_WORK), ExistingWorkPolicy.APPEND, sendRelationWork)
@ -104,16 +99,16 @@ internal class DefaultReactionService(private val roomId: String,
return "${roomId}_$identifier" return "${roomId}_$identifier"
} }


private fun saveLocalEcho(event: Event) { // private fun saveLocalEcho(event: Event) {
monarchy.tryTransactionAsync { realm -> // monarchy.tryTransactionAsync { realm ->
val roomEntity = RoomEntity.where(realm, roomId = roomId).findFirst() // val roomEntity = RoomEntity.where(realm, roomId = roomId).findFirst()
?: return@tryTransactionAsync // ?: return@tryTransactionAsync
val liveChunk = ChunkEntity.findLastLiveChunkFromRoom(realm, roomId = roomId) // val liveChunk = ChunkEntity.findLastLiveChunkFromRoom(realm, roomId = roomId)
?: return@tryTransactionAsync // ?: return@tryTransactionAsync

//
roomEntity.addSendingEvent(event, liveChunk.forwardsStateIndex ?: 0) // roomEntity.addSendingEvent(event, liveChunk.forwardsStateIndex ?: 0)
} // }
} // }


//TODO duplicate with send service? //TODO duplicate with send service?
private fun createRedactEventWork(eventId: String, reason: String?): OneTimeWorkRequest { private fun createRedactEventWork(eventId: String, reason: String?): OneTimeWorkRequest {