From ed98613b2d9c82d6dd36b705456043f078ea2712 Mon Sep 17 00:00:00 2001 From: Tobias Preuss Date: Wed, 19 Aug 2020 22:59:57 +0200 Subject: [PATCH] Use File extension functions to make code more concise. + This change replaces a few usages of ByteArrayInputStream, FileInputStream, FileOutputStream with their equivalent Kotlin extension functions. --- CHANGES.md | 2 +- .../sdk/internal/crypto/AttachmentEncryptionTest.kt | 3 +-- .../crypto/attachments/MXEncryptedAttachments.kt | 3 +-- .../android/sdk/internal/crypto/store/db/Helper.kt | 3 +-- .../sdk/internal/session/content/UploadContentWorker.kt | 9 +++------ .../internal/session/securestorage/SecretStoringUtils.kt | 2 +- .../org/matrix/android/sdk/internal/util/FileSaver.kt | 3 +-- .../im/vector/app/core/glide/VectorGlideModelLoader.kt | 3 +-- .../im/vector/app/core/utils/ExternalApplicationsUtil.kt | 4 ++-- .../features/notifications/NotificationDrawerManager.kt | 3 +-- 10 files changed, 13 insertions(+), 22 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index d3a16c9b29..a9f2e896aa 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -20,7 +20,7 @@ Build 🧱: - Some dependencies have been upgraded (coroutine, recyclerView, appCompat, core-ktx, firebase-messaging) Other changes: - - + - Use File extension functions to make code more concise (#1996) Changes in Element 1.0.5 (2020-08-21) =================================================== diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/AttachmentEncryptionTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/AttachmentEncryptionTest.kt index 05dbc40e1e..cb24cbb242 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/AttachmentEncryptionTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/AttachmentEncryptionTest.kt @@ -29,7 +29,6 @@ import org.junit.FixMethodOrder import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.MethodSorters -import java.io.ByteArrayInputStream import java.io.InputStream /** @@ -46,7 +45,7 @@ class AttachmentEncryptionTest { val inputStream: InputStream inputStream = if (`in`.isEmpty()) { - ByteArrayInputStream(`in`) + `in`.inputStream() } else { val memoryFile = MemoryFile("file" + System.currentTimeMillis(), `in`.size) memoryFile.outputStream.write(`in`) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/attachments/MXEncryptedAttachments.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/attachments/MXEncryptedAttachments.kt index cec1480d7b..a6d95cc87a 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/attachments/MXEncryptedAttachments.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/attachments/MXEncryptedAttachments.kt @@ -21,7 +21,6 @@ import android.util.Base64 import org.matrix.android.sdk.internal.crypto.model.rest.EncryptedFileInfo import org.matrix.android.sdk.internal.crypto.model.rest.EncryptedFileKey import timber.log.Timber -import java.io.ByteArrayInputStream import java.io.ByteArrayOutputStream import java.io.InputStream import java.security.MessageDigest @@ -179,7 +178,7 @@ internal object MXEncryptedAttachments { return null } - return ByteArrayInputStream(outputStream.toByteArray()) + return outputStream.toByteArray().inputStream() .also { Timber.v("Decrypt in ${System.currentTimeMillis() - t0}ms") } } catch (oom: OutOfMemoryError) { Timber.e(oom, "## decryptAttachment() failed: OOM") diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/Helper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/Helper.kt index 978c82303e..67e06b5455 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/Helper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/Helper.kt @@ -21,7 +21,6 @@ import android.util.Base64 import io.realm.Realm import io.realm.RealmConfiguration import io.realm.RealmObject -import java.io.ByteArrayInputStream import java.io.ByteArrayOutputStream import java.io.ObjectOutputStream import java.util.zip.GZIPInputStream @@ -96,7 +95,7 @@ fun deserializeFromRealm(string: String?): T? { } val decodedB64 = Base64.decode(string.toByteArray(), Base64.DEFAULT) - val bais = ByteArrayInputStream(decodedB64) + val bais = decodedB64.inputStream() val gzis = GZIPInputStream(bais) val ois = SafeObjectInputStream(gzis) return ois.use { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt index 6d354cdcbe..720269404f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt @@ -42,10 +42,7 @@ import org.matrix.android.sdk.internal.worker.SessionWorkerParams import org.matrix.android.sdk.internal.worker.WorkerParamsFactory import org.matrix.android.sdk.internal.worker.getSessionComponent import timber.log.Timber -import java.io.ByteArrayInputStream import java.io.File -import java.io.FileInputStream -import java.io.FileOutputStream import java.util.UUID import javax.inject.Inject @@ -130,7 +127,7 @@ internal class UploadContentWorker(val context: Context, params: WorkerParameter val contentUploadResponse = if (params.isEncrypted) { Timber.v("Encrypt thumbnail") notifyTracker(params) { contentUploadStateTracker.setEncryptingThumbnail(it) } - val encryptionResult = MXEncryptedAttachments.encryptAttachment(ByteArrayInputStream(thumbnailData.bytes), thumbnailData.mimeType) + val encryptionResult = MXEncryptedAttachments.encryptAttachment(thumbnailData.bytes.inputStream(), thumbnailData.mimeType) uploadedThumbnailEncryptedFileInfo = encryptionResult.encryptedFileInfo fileUploader.uploadByteArray(encryptionResult.encryptedByteArray, "thumb_${attachment.name}", @@ -176,7 +173,7 @@ internal class UploadContentWorker(val context: Context, params: WorkerParameter cacheFile.createNewFile() cacheFile.deleteOnExit() - val outputStream = FileOutputStream(cacheFile) + val outputStream = cacheFile.outputStream() outputStream.use { inputStream.copyTo(outputStream) } @@ -203,7 +200,7 @@ internal class UploadContentWorker(val context: Context, params: WorkerParameter Timber.v("Encrypt file") notifyTracker(params) { contentUploadStateTracker.setEncrypting(it) } - val encryptionResult = MXEncryptedAttachments.encryptAttachment(FileInputStream(cacheFile), attachment.getSafeMimeType()) + val encryptionResult = MXEncryptedAttachments.encryptAttachment(cacheFile.inputStream(), attachment.getSafeMimeType()) uploadedFileEncryptedFileInfo = encryptionResult.encryptedFileInfo fileUploader diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/securestorage/SecretStoringUtils.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/securestorage/SecretStoringUtils.kt index 2ae115f325..8eab44366c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/securestorage/SecretStoringUtils.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/securestorage/SecretStoringUtils.kt @@ -219,7 +219,7 @@ internal class SecretStoringUtils @Inject constructor(private val context: Conte @RequiresApi(Build.VERSION_CODES.M) private fun decryptStringM(encryptedChunk: ByteArray, keyAlias: String): String { - val (iv, encryptedText) = formatMExtract(ByteArrayInputStream(encryptedChunk)) + val (iv, encryptedText) = formatMExtract(encryptedChunk.inputStream()) val secretKey = getOrGenerateSymmetricKeyForAliasM(keyAlias) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/FileSaver.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/FileSaver.kt index 27625d90bc..da524cc1b2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/FileSaver.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/FileSaver.kt @@ -19,7 +19,6 @@ package org.matrix.android.sdk.internal.util import androidx.annotation.WorkerThread import java.io.File -import java.io.FileOutputStream import java.io.InputStream /** @@ -27,7 +26,7 @@ import java.io.InputStream */ @WorkerThread fun writeToFile(inputStream: InputStream, outputFile: File) { - FileOutputStream(outputFile).use { + outputFile.outputStream().use { inputStream.copyTo(it) } } diff --git a/vector/src/main/java/im/vector/app/core/glide/VectorGlideModelLoader.kt b/vector/src/main/java/im/vector/app/core/glide/VectorGlideModelLoader.kt index 295609548f..9ac8a4d3bc 100644 --- a/vector/src/main/java/im/vector/app/core/glide/VectorGlideModelLoader.kt +++ b/vector/src/main/java/im/vector/app/core/glide/VectorGlideModelLoader.kt @@ -31,7 +31,6 @@ import okhttp3.OkHttpClient import okhttp3.Request import timber.log.Timber import java.io.File -import java.io.FileInputStream import java.io.IOException import java.io.InputStream @@ -97,7 +96,7 @@ class VectorGlideDataFetcher(private val activeSessionHolder: ActiveSessionHolde Timber.v("Load data: $data") if (data.isLocalFile() && data.url != null) { val initialFile = File(data.url) - callback.onDataReady(FileInputStream(initialFile)) + callback.onDataReady(initialFile.inputStream()) return } val contentUrlResolver = activeSessionHolder.getActiveSession().contentUrlResolver() diff --git a/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt b/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt index b314401138..b1c63a406a 100644 --- a/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt +++ b/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt @@ -518,8 +518,8 @@ fun saveFileIntoLegacy(sourceFile: File, dstDirPath: File, outputFilename: Strin var outputStream: FileOutputStream? = null try { dstFile.createNewFile() - inputStream = FileInputStream(sourceFile) - outputStream = FileOutputStream(dstFile) + inputStream = sourceFile.inputStream() + outputStream = dstFile.outputStream() val buffer = ByteArray(1024 * 10) var len: Int while (inputStream.read(buffer).also { len = it } != -1) { diff --git a/vector/src/main/java/im/vector/app/features/notifications/NotificationDrawerManager.kt b/vector/src/main/java/im/vector/app/features/notifications/NotificationDrawerManager.kt index 98d35dc764..e689f9df3f 100644 --- a/vector/src/main/java/im/vector/app/features/notifications/NotificationDrawerManager.kt +++ b/vector/src/main/java/im/vector/app/features/notifications/NotificationDrawerManager.kt @@ -32,7 +32,6 @@ import org.matrix.android.sdk.api.session.content.ContentUrlResolver import me.gujun.android.span.span import timber.log.Timber import java.io.File -import java.io.FileInputStream import java.io.FileOutputStream import javax.inject.Inject import javax.inject.Singleton @@ -494,7 +493,7 @@ class NotificationDrawerManager @Inject constructor(private val context: Context try { val file = File(context.applicationContext.cacheDir, ROOMS_NOTIFICATIONS_FILE_NAME) if (file.exists()) { - FileInputStream(file).use { + file.inputStream().use { val events: ArrayList? = currentSession?.loadSecureSecret(it, KEY_ALIAS_SECRET_STORAGE) if (events != null) { return events.toMutableList()