diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/CryptoService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/CryptoService.kt index 638da11804..99fb41b10d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/CryptoService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/CryptoService.kt @@ -176,4 +176,9 @@ interface CryptoService { * send, in order to speed up sending of the message. */ fun prepareToEncrypt(roomId: String, callback: MatrixCallback) + + /** + * Share existing inbound sessions with the provided userId devices + */ + fun sendSharedHistoryKeys(roomId: String, userId: String) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt index e0bcde2296..689c49f33b 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt @@ -1334,7 +1334,23 @@ internal class DefaultCryptoService @Inject constructor( ) } } - + override fun sendSharedHistoryKeys(roomId: String, userId: String) { + cryptoCoroutineScope.launch(coroutineDispatchers.crypto) { + val userDevices = cryptoStore.getUserDevices(userId) + userDevices?.forEach { + // Lets share our existing inbound sessions for every user device + val deviceId = it.key + val inboundSessions = cryptoStore.getInboundGroupSessions(roomId) + inboundSessions.forEach { inboundGroupSession -> + // Share the session with the to userId with deviceId + val exportedKeys = inboundGroupSession.exportKeys() + val algorithm = exportedKeys?.algorithm + val decryptor = roomDecryptorProvider.getRoomDecryptor(roomId, algorithm) + decryptor?.shareKeysWithDevice(exportedKeys, deviceId, userId) + } + } + } + } /* ========================================================================================== * For test only * ========================================================================================== */