From 18b38fe21ece50b10a5941405e60ed50df98cf37 Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Mon, 20 Dec 2021 11:52:01 +0000 Subject: [PATCH 1/3] making the file upload file creation all happen on the IO dispatcher --- .../internal/session/content/FileUploader.kt | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/FileUploader.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/FileUploader.kt index 1b0ccbb4895..b988f2253cd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/FileUploader.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/FileUploader.kt @@ -109,18 +109,23 @@ internal class FileUploader @Inject constructor( filename: String?, mimeType: String?, progressListener: ProgressRequestBody.Listener? = null): ContentUploadResponse { - val inputStream = withContext(Dispatchers.IO) { - context.contentResolver.openInputStream(uri) - } ?: throw FileNotFoundException() - val workingFile = temporaryFileCreator.create() - workingFile.outputStream().use { - inputStream.copyTo(it) - } + val workingFile = context.copyUriToTempFile(uri) return uploadFile(workingFile, filename, mimeType, progressListener).also { tryOrNull { workingFile.delete() } } } + private suspend fun Context.copyUriToTempFile(uri: Uri): File { + return withContext(Dispatchers.IO) { + val inputStream = contentResolver.openInputStream(uri) ?: throw FileNotFoundException() + val workingFile = temporaryFileCreator.create() + workingFile.outputStream().use { + inputStream.copyTo(it) + } + workingFile + } + } + private suspend fun upload(uploadBody: RequestBody, filename: String?, progressListener: ProgressRequestBody.Listener?): ContentUploadResponse { From 7714445d243e04aed8935eb419fcb658e8fb3448 Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Tue, 21 Dec 2021 09:23:59 +0000 Subject: [PATCH 2/3] moving the updateAvatar work to the io dispatcher - fixes some devices/OS's from attempting to run okhttp on the main thread --- .../sdk/internal/session/profile/DefaultProfileService.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/DefaultProfileService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/DefaultProfileService.kt index a19832c5230..caf41586579 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/DefaultProfileService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/DefaultProfileService.kt @@ -68,7 +68,7 @@ internal class DefaultProfileService @Inject constructor(private val taskExecuto } override suspend fun updateAvatar(userId: String, newAvatarUri: Uri, fileName: String) { - withContext(coroutineDispatchers.main) { + withContext(coroutineDispatchers.io) { val response = fileUploader.uploadFromUri(newAvatarUri, fileName, MimeTypes.Jpeg) setAvatarUrlTask.execute(SetAvatarUrlTask.Params(userId = userId, newAvatarUrl = response.contentUri)) userStore.updateAvatar(userId, response.contentUri) From a764e02f8a788a5c0c3414194be270a032e0e115 Mon Sep 17 00:00:00 2001 From: Adam Brown Date: Tue, 21 Dec 2021 09:35:56 +0000 Subject: [PATCH 3/3] adding changelog entry --- changelog.d/4767.bugfix | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/4767.bugfix diff --git a/changelog.d/4767.bugfix b/changelog.d/4767.bugfix new file mode 100644 index 00000000000..172e9d80ca7 --- /dev/null +++ b/changelog.d/4767.bugfix @@ -0,0 +1 @@ +Fixing unable to change change avatar in some scenarios \ No newline at end of file