This commit is contained in:
Valere 2020-06-03 18:55:07 +02:00 committed by Benoit Marty
parent 63499c2f48
commit a9191b8fad
23 changed files with 32 additions and 73 deletions

View File

@ -22,16 +22,13 @@ import androidx.work.Configuration
import androidx.work.WorkManager import androidx.work.WorkManager
import com.zhuinden.monarchy.Monarchy import com.zhuinden.monarchy.Monarchy
import im.vector.matrix.android.BuildConfig import im.vector.matrix.android.BuildConfig
import im.vector.matrix.android.api.MatrixConfiguration
import im.vector.matrix.android.api.auth.AuthenticationService import im.vector.matrix.android.api.auth.AuthenticationService
import im.vector.matrix.android.common.DaggerTestMatrixComponent import im.vector.matrix.android.common.DaggerTestMatrixComponent
import im.vector.matrix.android.internal.SessionManager import im.vector.matrix.android.internal.SessionManager
import im.vector.matrix.android.internal.crypto.attachments.ElementToDecrypt import im.vector.matrix.android.internal.crypto.attachments.ElementToDecrypt
import im.vector.matrix.android.internal.crypto.attachments.MXEncryptedAttachments import im.vector.matrix.android.internal.crypto.attachments.MXEncryptedAttachments
import im.vector.matrix.android.internal.di.MockHttpInterceptor
import im.vector.matrix.android.internal.network.UserAgentHolder import im.vector.matrix.android.internal.network.UserAgentHolder
import im.vector.matrix.android.internal.util.BackgroundDetectionObserver import im.vector.matrix.android.internal.util.BackgroundDetectionObserver
import okhttp3.Interceptor
import org.matrix.olm.OlmManager import org.matrix.olm.OlmManager
import java.io.InputStream import java.io.InputStream
import java.util.concurrent.Executors import java.util.concurrent.Executors
@ -50,7 +47,6 @@ class Matrix private constructor(context: Context, matrixConfiguration: MatrixCo
@Inject internal lateinit var olmManager: OlmManager @Inject internal lateinit var olmManager: OlmManager
@Inject internal lateinit var sessionManager: SessionManager @Inject internal lateinit var sessionManager: SessionManager
init { init {
Monarchy.init(context) Monarchy.init(context)
DaggerTestMatrixComponent.factory().create(context, matrixConfiguration).inject(this) DaggerTestMatrixComponent.factory().create(context, matrixConfiguration).inject(this)

View File

@ -36,7 +36,6 @@ import im.vector.matrix.android.api.session.room.timeline.Timeline
import im.vector.matrix.android.api.session.room.timeline.TimelineEvent import im.vector.matrix.android.api.session.room.timeline.TimelineEvent
import im.vector.matrix.android.api.session.room.timeline.TimelineSettings import im.vector.matrix.android.api.session.room.timeline.TimelineSettings
import im.vector.matrix.android.api.session.sync.SyncState import im.vector.matrix.android.api.session.sync.SyncState
import im.vector.matrix.android.internal.session.TestInterceptor
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
@ -152,7 +151,7 @@ class CommonTestHelper(context: Context) {
timeline.dispose() timeline.dispose()
// Check that all events has been created // Check that all events has been created
assertEquals("Message number do not match ${sentEvents}", nbOfMessages.toLong(), sentEvents.size.toLong()) assertEquals("Message number do not match $sentEvents", nbOfMessages.toLong(), sentEvents.size.toLong())
return sentEvents return sentEvents
} }

View File

@ -22,7 +22,6 @@ import androidx.lifecycle.Observer
import im.vector.matrix.android.api.session.Session import im.vector.matrix.android.api.session.Session
import im.vector.matrix.android.api.session.crypto.verification.IncomingSasVerificationTransaction import im.vector.matrix.android.api.session.crypto.verification.IncomingSasVerificationTransaction
import im.vector.matrix.android.api.session.crypto.verification.OutgoingSasVerificationTransaction import im.vector.matrix.android.api.session.crypto.verification.OutgoingSasVerificationTransaction
import im.vector.matrix.android.api.session.crypto.verification.SasVerificationTransaction
import im.vector.matrix.android.api.session.crypto.verification.VerificationMethod import im.vector.matrix.android.api.session.crypto.verification.VerificationMethod
import im.vector.matrix.android.api.session.crypto.verification.VerificationTxState import im.vector.matrix.android.api.session.crypto.verification.VerificationTxState
import im.vector.matrix.android.api.session.events.model.Event import im.vector.matrix.android.api.session.events.model.Event
@ -41,7 +40,6 @@ import im.vector.matrix.android.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM_BACKUP
import im.vector.matrix.android.internal.crypto.keysbackup.model.MegolmBackupAuthData import im.vector.matrix.android.internal.crypto.keysbackup.model.MegolmBackupAuthData
import im.vector.matrix.android.internal.crypto.keysbackup.model.MegolmBackupCreationInfo import im.vector.matrix.android.internal.crypto.keysbackup.model.MegolmBackupCreationInfo
import im.vector.matrix.android.internal.crypto.model.rest.UserPasswordAuth import im.vector.matrix.android.internal.crypto.model.rest.UserPasswordAuth
import im.vector.matrix.android.internal.crypto.verification.SASDefaultVerificationTransaction
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -295,7 +293,6 @@ class CryptoTestHelper(private val mTestHelper: CommonTestHelper) {
) )
} }
mTestHelper.waitWithLatch { latch -> mTestHelper.waitWithLatch { latch ->
val bobRoomSummariesLive = runBlocking(Dispatchers.Main) { val bobRoomSummariesLive = runBlocking(Dispatchers.Main) {
bob.getRoomSummariesLive(roomSummaryQueryParams { }) bob.getRoomSummariesLive(roomSummaryQueryParams { })
@ -314,10 +311,8 @@ class CryptoTestHelper(private val mTestHelper: CommonTestHelper) {
GlobalScope.launch(Dispatchers.Main) { GlobalScope.launch(Dispatchers.Main) {
bobRoomSummariesLive.observeForever(newRoomObserver) bobRoomSummariesLive.observeForever(newRoomObserver)
} }
} }
mTestHelper.waitWithLatch { latch -> mTestHelper.waitWithLatch { latch ->
val bobRoomSummariesLive = runBlocking(Dispatchers.Main) { val bobRoomSummariesLive = runBlocking(Dispatchers.Main) {
bob.getRoomSummariesLive(roomSummaryQueryParams { }) bob.getRoomSummariesLive(roomSummaryQueryParams { })
@ -339,10 +334,8 @@ class CryptoTestHelper(private val mTestHelper: CommonTestHelper) {
} }
mTestHelper.doSync<Unit> { bob.joinRoom(roomId, callback = it) } mTestHelper.doSync<Unit> { bob.joinRoom(roomId, callback = it) }
} }
return roomId return roomId
} }
@ -357,7 +350,6 @@ class CryptoTestHelper(private val mTestHelper: CommonTestHelper) {
} }
fun verifySASCrossSign(alice: Session, bob: Session, roomId: String) { fun verifySASCrossSign(alice: Session, bob: Session, roomId: String) {
assertTrue(alice.cryptoService().crossSigningService().canCrossSign()) assertTrue(alice.cryptoService().crossSigningService().canCrossSign())
assertTrue(bob.cryptoService().crossSigningService().canCrossSign()) assertTrue(bob.cryptoService().crossSigningService().canCrossSign())
@ -373,7 +365,6 @@ class CryptoTestHelper(private val mTestHelper: CommonTestHelper) {
bob.sessionParams.credentials.deviceId!!, bob.sessionParams.credentials.deviceId!!,
null) null)
// we should reach SHOW SAS on both // we should reach SHOW SAS on both
var alicePovTx: OutgoingSasVerificationTransaction? = null var alicePovTx: OutgoingSasVerificationTransaction? = null
var bobPovTx: IncomingSasVerificationTransaction? = null var bobPovTx: IncomingSasVerificationTransaction? = null
@ -427,6 +418,5 @@ class CryptoTestHelper(private val mTestHelper: CommonTestHelper) {
alice.cryptoService().crossSigningService().isUserTrusted(bob.myUserId) alice.cryptoService().crossSigningService().isUserTrusted(bob.myUserId)
} }
} }
} }
} }

View File

@ -22,10 +22,8 @@ import im.vector.matrix.android.internal.crypto.model.OlmSessionWrapper
import im.vector.matrix.android.internal.crypto.store.IMXCryptoStore import im.vector.matrix.android.internal.crypto.store.IMXCryptoStore
import io.realm.Realm import io.realm.Realm
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNotEquals import org.junit.Assert.assertNotEquals
import org.junit.Assert.assertNull import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
@ -45,22 +43,22 @@ class CryptoStoreTest : InstrumentedTest {
Realm.init(context()) Realm.init(context())
} }
@Test // @Test
fun test_metadata_realm_ok() { // fun test_metadata_realm_ok() {
val cryptoStore: IMXCryptoStore = cryptoStoreHelper.createStore() // val cryptoStore: IMXCryptoStore = cryptoStoreHelper.createStore()
//
assertFalse(cryptoStore.hasData()) // assertFalse(cryptoStore.hasData())
//
cryptoStore.open() // cryptoStore.open()
//
assertEquals("deviceId_sample", cryptoStore.getDeviceId()) // assertEquals("deviceId_sample", cryptoStore.getDeviceId())
//
assertTrue(cryptoStore.hasData()) // assertTrue(cryptoStore.hasData())
//
// Cleanup // // Cleanup
cryptoStore.close() // cryptoStore.close()
cryptoStore.deleteStore() // cryptoStore.deleteStore()
} // }
@Test @Test
fun test_lastSessionUsed() { fun test_lastSessionUsed() {

View File

@ -30,7 +30,6 @@ import im.vector.matrix.android.api.session.room.model.RoomDirectoryVisibility
import im.vector.matrix.android.api.session.room.model.create.CreateRoomParams import im.vector.matrix.android.api.session.room.model.create.CreateRoomParams
import im.vector.matrix.android.common.CommonTestHelper import im.vector.matrix.android.common.CommonTestHelper
import im.vector.matrix.android.common.CryptoTestHelper import im.vector.matrix.android.common.CryptoTestHelper
import im.vector.matrix.android.common.MockOkHttpInterceptor
import im.vector.matrix.android.common.SessionTestParams import im.vector.matrix.android.common.SessionTestParams
import im.vector.matrix.android.common.TestConstants import im.vector.matrix.android.common.TestConstants
import im.vector.matrix.android.internal.crypto.GossipingRequestState import im.vector.matrix.android.internal.crypto.GossipingRequestState
@ -46,8 +45,6 @@ import junit.framework.TestCase.assertEquals
import junit.framework.TestCase.assertNotNull import junit.framework.TestCase.assertNotNull
import junit.framework.TestCase.assertTrue import junit.framework.TestCase.assertTrue
import junit.framework.TestCase.fail import junit.framework.TestCase.fail
import kotlinx.coroutines.delay
import okhttp3.internal.waitMillis
import org.junit.Assert import org.junit.Assert
import org.junit.FixMethodOrder import org.junit.FixMethodOrder
import org.junit.Test import org.junit.Test
@ -293,7 +290,6 @@ class KeyShareTests : InstrumentedTest {
} }
} }
mTestHelper.signOutAndClose(aliceSession1) mTestHelper.signOutAndClose(aliceSession1)
mTestHelper.signOutAndClose(aliceSession2) mTestHelper.signOutAndClose(aliceSession2)
} }

View File

@ -46,10 +46,9 @@ class WithHeldTests : InstrumentedTest {
@Test @Test
fun test_WithHeldUnverifiedReason() { fun test_WithHeldUnverifiedReason() {
// =============================
//=============================
// ARRANGE // ARRANGE
//============================= // =============================
val aliceSession = mTestHelper.createAccount(TestConstants.USER_ALICE, SessionTestParams(true)) val aliceSession = mTestHelper.createAccount(TestConstants.USER_ALICE, SessionTestParams(true))
val bobSession = mTestHelper.createAccount(TestConstants.USER_ALICE, SessionTestParams(true)) val bobSession = mTestHelper.createAccount(TestConstants.USER_ALICE, SessionTestParams(true))
@ -65,9 +64,9 @@ class WithHeldTests : InstrumentedTest {
val bobUnverifiedSession = mTestHelper.logIntoAccount(bobSession.myUserId, SessionTestParams(true)) val bobUnverifiedSession = mTestHelper.logIntoAccount(bobSession.myUserId, SessionTestParams(true))
//============================= // =============================
// ACT // ACT
//============================= // =============================
// Alice decide to not send to unverified sessions // Alice decide to not send to unverified sessions
aliceSession.cryptoService().setGlobalBlacklistUnverifiedDevices(true) aliceSession.cryptoService().setGlobalBlacklistUnverifiedDevices(true)
@ -83,9 +82,9 @@ class WithHeldTests : InstrumentedTest {
val eventBobPOV = bobUnverifiedSession.getRoom(roomId)?.getTimeLineEvent(timelineEvent.eventId)!! val eventBobPOV = bobUnverifiedSession.getRoom(roomId)?.getTimeLineEvent(timelineEvent.eventId)!!
//============================= // =============================
// ASSERT // ASSERT
//============================= // =============================
// Bob should not be able to decrypt because the keys is withheld // Bob should not be able to decrypt because the keys is withheld
try { try {
@ -124,7 +123,6 @@ class WithHeldTests : InstrumentedTest {
Assert.assertEquals("Cause should be unverified", WithHeldCode.UNVERIFIED.value, technicalMessage) Assert.assertEquals("Cause should be unverified", WithHeldCode.UNVERIFIED.value, technicalMessage)
} }
mTestHelper.signOutAndClose(aliceSession) mTestHelper.signOutAndClose(aliceSession)
mTestHelper.signOutAndClose(bobSession) mTestHelper.signOutAndClose(bobSession)
mTestHelper.signOutAndClose(bobUnverifiedSession) mTestHelper.signOutAndClose(bobUnverifiedSession)
@ -236,7 +234,7 @@ class WithHeldTests : InstrumentedTest {
} }
} }
//Check that bob second session requested the key // Check that bob second session requested the key
mTestHelper.waitWithLatch { latch -> mTestHelper.waitWithLatch { latch ->
mTestHelper.retryPeriodicallyWithLatch(latch) { mTestHelper.retryPeriodicallyWithLatch(latch) {
val wc = bobSecondSession.cryptoService().getWithHeldMegolmSession(roomAlicePov.roomId, sessionId!!) val wc = bobSecondSession.cryptoService().getWithHeldMegolmSession(roomAlicePov.roomId, sessionId!!)

View File

@ -147,7 +147,7 @@ interface CryptoService {
fun getGossipingEventsTrail(): List<Event> fun getGossipingEventsTrail(): List<Event>
//For testing shared session // For testing shared session
fun getSharedWithInfo(roomId: String?, sessionId: String) : MXUsersDevicesMap<Int> fun getSharedWithInfo(roomId: String?, sessionId: String) : MXUsersDevicesMap<Int>
fun getWithHeldMegolmSession(roomId: String, sessionId: String) : RoomKeyWithHeldContent? fun getWithHeldMegolmSession(roomId: String, sessionId: String) : RoomKeyWithHeldContent?
} }

View File

@ -20,7 +20,6 @@ package im.vector.matrix.android.api.session.crypto
import im.vector.matrix.android.internal.crypto.model.CryptoDeviceInfo import im.vector.matrix.android.internal.crypto.model.CryptoDeviceInfo
import im.vector.matrix.android.internal.crypto.model.MXUsersDevicesMap import im.vector.matrix.android.internal.crypto.model.MXUsersDevicesMap
import im.vector.matrix.android.internal.crypto.model.event.WithHeldCode
import org.matrix.olm.OlmException import org.matrix.olm.OlmException
/** /**

View File

@ -843,7 +843,7 @@ internal class DefaultCryptoService @Inject constructor(
val withHeldContent = event.getClearContent().toModel<RoomKeyWithHeldContent>() ?: return Unit.also { val withHeldContent = event.getClearContent().toModel<RoomKeyWithHeldContent>() ?: return Unit.also {
Timber.e("## CRYPTO | Malformed onKeyWithHeldReceived() : missing fields") Timber.e("## CRYPTO | Malformed onKeyWithHeldReceived() : missing fields")
} }
Timber.d("## CRYPTO | onKeyWithHeldReceived() received : content <${withHeldContent}>") Timber.d("## CRYPTO | onKeyWithHeldReceived() received : content <$withHeldContent>")
val alg = roomDecryptorProvider.getOrCreateRoomDecryptor(withHeldContent.roomId, withHeldContent.algorithm) val alg = roomDecryptorProvider.getOrCreateRoomDecryptor(withHeldContent.roomId, withHeldContent.algorithm)
if (alg is IMXWithHeldExtension) { if (alg is IMXWithHeldExtension) {
alg.onRoomKeyWithHeldEvent(withHeldContent) alg.onRoomKeyWithHeldEvent(withHeldContent)

View File

@ -21,4 +21,3 @@ import im.vector.matrix.android.internal.crypto.model.event.RoomKeyWithHeldConte
internal interface IMXWithHeldExtension { internal interface IMXWithHeldExtension {
fun onRoomKeyWithHeldEvent(withHeldInfo: RoomKeyWithHeldContent) fun onRoomKeyWithHeldEvent(withHeldInfo: RoomKeyWithHeldContent)
} }

View File

@ -115,7 +115,7 @@ internal class MXMegolmDecryption(private val userId: String,
if (throwable is MXCryptoError.OlmError) { if (throwable is MXCryptoError.OlmError) {
// TODO Check the value of .message // TODO Check the value of .message
if (throwable.olmException.message == "UNKNOWN_MESSAGE_INDEX") { if (throwable.olmException.message == "UNKNOWN_MESSAGE_INDEX") {
//addEventToPendingList(event, timeline) // addEventToPendingList(event, timeline)
// The session might has been partially withheld (and only pass ratcheted) // The session might has been partially withheld (and only pass ratcheted)
val withHeldInfo = cryptoStore.getWithHeldMegolmSession(event.roomId, encryptedEventContent.sessionId) val withHeldInfo = cryptoStore.getWithHeldMegolmSession(event.roomId, encryptedEventContent.sessionId)
if (withHeldInfo != null) { if (withHeldInfo != null) {
@ -157,7 +157,7 @@ internal class MXMegolmDecryption(private val userId: String,
withHeldInfo.reason) withHeldInfo.reason)
} else { } else {
// This is un-used in riotX SDK, not sure if needed // This is un-used in riotX SDK, not sure if needed
//addEventToPendingList(event, timeline) // addEventToPendingList(event, timeline)
if (requestKeysOnFail) { if (requestKeysOnFail) {
requestKeysForEvent(event, false) requestKeysForEvent(event, false)
} }

View File

@ -86,7 +86,7 @@ internal class MXMegolmEncryption(
} }
private fun notifyWithheldForSession(devices: MXUsersDevicesMap<WithHeldCode>, outboundSession: MXOutboundSessionInfo) { private fun notifyWithheldForSession(devices: MXUsersDevicesMap<WithHeldCode>, outboundSession: MXOutboundSessionInfo) {
ArrayList<Pair<UserDevice, WithHeldCode>>().apply { mutableListOf<Pair<UserDevice, WithHeldCode>>().apply {
devices.forEach { userId, deviceId, withheldCode -> devices.forEach { userId, deviceId, withheldCode ->
this.add(UserDevice(userId, deviceId) to withheldCode) this.add(UserDevice(userId, deviceId) to withheldCode)
} }
@ -339,7 +339,6 @@ internal class MXMegolmEncryption(
val devicesInRoom = DeviceInRoomInfo() val devicesInRoom = DeviceInRoomInfo()
val unknownDevices = MXUsersDevicesMap<CryptoDeviceInfo>() val unknownDevices = MXUsersDevicesMap<CryptoDeviceInfo>()
for (userId in keys.userIds) { for (userId in keys.userIds) {
val deviceIds = keys.getUserDeviceIds(userId) ?: continue val deviceIds = keys.getUserDeviceIds(userId) ?: continue
for (deviceId in deviceIds) { for (deviceId in deviceIds) {
@ -383,7 +382,7 @@ internal class MXMegolmEncryption(
.also { Timber.w("Device not found") } .also { Timber.w("Device not found") }
// Get the chain index of the key we previously sent this device // Get the chain index of the key we previously sent this device
val chainIndex = outboundSession?.sharedWithHelper?.wasSharedWith(userId,deviceId) ?: return false val chainIndex = outboundSession?.sharedWithHelper?.wasSharedWith(userId, deviceId) ?: return false
.also { .also {
// Send a room key with held // Send a room key with held
notifyKeyWithHeld(listOf(UserDevice(userId, deviceId)), sessionId, senderKey, WithHeldCode.UNAUTHORISED) notifyKeyWithHeld(listOf(UserDevice(userId, deviceId)), sessionId, senderKey, WithHeldCode.UNAUTHORISED)

View File

@ -17,7 +17,6 @@ package im.vector.matrix.android.internal.crypto.model.event
import com.squareup.moshi.Json import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass import com.squareup.moshi.JsonClass
import im.vector.matrix.android.api.extensions.tryThis
/** /**
* Class representing an sharekey content * Class representing an sharekey content
@ -99,5 +98,3 @@ enum class WithHeldCode(val value: String) {
} }
} }
} }

View File

@ -433,7 +433,6 @@ internal class RealmCryptoStoreMigration @Inject constructor(private val crossSi
.addField(WithHeldSessionEntityFields.CODE_STRING, String::class.java) .addField(WithHeldSessionEntityFields.CODE_STRING, String::class.java)
.addField(WithHeldSessionEntityFields.REASON, String::class.java) .addField(WithHeldSessionEntityFields.REASON, String::class.java)
realm.schema.create("SharedSessionEntity") realm.schema.create("SharedSessionEntity")
.addField(SharedSessionEntityFields.ROOM_ID, String::class.java) .addField(SharedSessionEntityFields.ROOM_ID, String::class.java)
.addField(SharedSessionEntityFields.ALGORITHM, String::class.java) .addField(SharedSessionEntityFields.ALGORITHM, String::class.java)

View File

@ -55,4 +55,3 @@ internal fun SharedSessionEntity.Companion.create(realm: Realm, roomId: String?,
this.chainIndex = chainIndex this.chainIndex = chainIndex
} }
} }

View File

@ -39,4 +39,3 @@ internal fun WithHeldSessionEntity.Companion.getOrCreate(realm: Realm, roomId: S
this.sessionId = sessionId this.sessionId = sessionId
} }
} }

View File

@ -31,7 +31,6 @@ import im.vector.matrix.android.internal.session.TestInterceptor
import im.vector.matrix.android.internal.task.TaskExecutor import im.vector.matrix.android.internal.task.TaskExecutor
import im.vector.matrix.android.internal.util.BackgroundDetectionObserver import im.vector.matrix.android.internal.util.BackgroundDetectionObserver
import im.vector.matrix.android.internal.util.MatrixCoroutineDispatchers import im.vector.matrix.android.internal.util.MatrixCoroutineDispatchers
import okhttp3.Interceptor
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import org.matrix.olm.OlmManager import org.matrix.olm.OlmManager
import java.io.File import java.io.File

View File

@ -777,7 +777,8 @@ internal class DefaultTimeline(
`in`(TimelineEventEntityFields.ROOT.TYPE, settings.allowedTypes.toTypedArray()) `in`(TimelineEventEntityFields.ROOT.TYPE, settings.allowedTypes.toTypedArray())
} }
if (settings.filterUseless) { if (settings.filterUseless) {
not().equalTo(TimelineEventEntityFields.ROOT.IS_USELESS, true) not()
.equalTo(TimelineEventEntityFields.ROOT.IS_USELESS, true)
} }
if (settings.filterEdits) { if (settings.filterEdits) {
not().like(TimelineEventEntityFields.ROOT.CONTENT, TimelineEventFilter.Content.EDIT) not().like(TimelineEventEntityFields.ROOT.CONTENT, TimelineEventFilter.Content.EDIT)

View File

@ -18,9 +18,6 @@ package im.vector.riotx.features.home.room.detail.timeline.action
import android.view.View import android.view.View
import com.airbnb.epoxy.TypedEpoxyController import com.airbnb.epoxy.TypedEpoxyController
import com.airbnb.mvrx.Success import com.airbnb.mvrx.Success
import im.vector.matrix.android.api.session.crypto.MXCryptoError
import im.vector.matrix.android.api.session.events.model.EventType
import im.vector.matrix.android.internal.crypto.model.event.WithHeldCode
import im.vector.riotx.EmojiCompatFontProvider import im.vector.riotx.EmojiCompatFontProvider
import im.vector.riotx.R import im.vector.riotx.R
import im.vector.riotx.core.epoxy.bottomsheet.BottomSheetQuickReactionsItem import im.vector.riotx.core.epoxy.bottomsheet.BottomSheetQuickReactionsItem

View File

@ -15,7 +15,6 @@
*/ */
package im.vector.riotx.features.home.room.detail.timeline.action package im.vector.riotx.features.home.room.detail.timeline.action
import androidx.lifecycle.viewModelScope
import com.airbnb.mvrx.Async import com.airbnb.mvrx.Async
import com.airbnb.mvrx.FragmentViewModelContext import com.airbnb.mvrx.FragmentViewModelContext
import com.airbnb.mvrx.MvRxViewModelFactory import com.airbnb.mvrx.MvRxViewModelFactory

View File

@ -57,7 +57,6 @@ class EncryptedItemFactory @Inject constructor(private val messageInformationDat
val cryptoError = event.root.mCryptoError val cryptoError = event.root.mCryptoError
val spannableStr = if (vectorPreferences.hideE2ETechnicalErrors()) { val spannableStr = if (vectorPreferences.hideE2ETechnicalErrors()) {
val colorFromAttribute = colorProvider.getColorFromAttribute(R.attr.riotx_text_secondary) val colorFromAttribute = colorProvider.getColorFromAttribute(R.attr.riotx_text_secondary)
if (cryptoError == null) { if (cryptoError == null) {
span(stringProvider.getString(R.string.encrypted_message)) { span(stringProvider.getString(R.string.encrypted_message)) {
@ -111,7 +110,6 @@ class EncryptedItemFactory @Inject constructor(private val messageInformationDat
} }
} }
val informationData = messageInformationDataFactory.create(event, nextEvent) val informationData = messageInformationDataFactory.create(event, nextEvent)
val attributes = attributesFactory.create(event.root.content.toModel<EncryptedEventContent>(), informationData, callback) val attributes = attributesFactory.create(event.root.content.toModel<EncryptedEventContent>(), informationData, callback)
return MessageTextItem_() return MessageTextItem_()

View File

@ -148,14 +148,12 @@ class MergedHeaderItemFactory @Inject constructor(private val activeSessionHolde
return nextEvent == null || nextEvent.root.getClearType() != EventType.ENCRYPTED return nextEvent == null || nextEvent.root.getClearType() != EventType.ENCRYPTED
} }
private fun buildUTDMergedSummary(currentPosition: Int, private fun buildUTDMergedSummary(currentPosition: Int,
items: List<TimelineEvent>, items: List<TimelineEvent>,
event: TimelineEvent, event: TimelineEvent,
eventIdToHighlight: String?, eventIdToHighlight: String?,
requestModelBuild: () -> Unit, requestModelBuild: () -> Unit,
callback: TimelineEventController.Callback?): MergedUTDItem_? { callback: TimelineEventController.Callback?): MergedUTDItem_? {
var prevEvent = if (currentPosition > 0) items[currentPosition - 1] else null var prevEvent = if (currentPosition > 0) items[currentPosition - 1] else null
var tmpPos = currentPosition - 1 var tmpPos = currentPosition - 1
val mergedEvents = ArrayList<TimelineEvent>().also { it.add(event) } val mergedEvents = ArrayList<TimelineEvent>().also { it.add(event) }

View File

@ -385,7 +385,6 @@ class VectorSettingsSecurityPrivacyFragment @Inject constructor(
// } // }
// } // }
sendToUnverifiedDevicesPref.isChecked = session.cryptoService().getGlobalBlacklistUnverifiedDevices() sendToUnverifiedDevicesPref.isChecked = session.cryptoService().getGlobalBlacklistUnverifiedDevices()
sendToUnverifiedDevicesPref.onPreferenceClickListener = Preference.OnPreferenceClickListener { sendToUnverifiedDevicesPref.onPreferenceClickListener = Preference.OnPreferenceClickListener {