From b64f0c99f7c465e262123052c4c26c09129b0bfe Mon Sep 17 00:00:00 2001 From: Tommy DI LUNA Date: Thu, 23 May 2024 11:16:56 +0200 Subject: [PATCH 1/3] Fix wrong snackbar being displayed when importing files on low memory --- .../drive/ui/addFiles/ImportFilesDialog.kt | 47 +++++++++---------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/com/infomaniak/drive/ui/addFiles/ImportFilesDialog.kt b/app/src/main/java/com/infomaniak/drive/ui/addFiles/ImportFilesDialog.kt index 585a48ece8..4725b47811 100644 --- a/app/src/main/java/com/infomaniak/drive/ui/addFiles/ImportFilesDialog.kt +++ b/app/src/main/java/com/infomaniak/drive/ui/addFiles/ImportFilesDialog.kt @@ -74,8 +74,12 @@ class ImportFilesDialog : DialogFragment() { val errorCount = importCount - successCount if (errorCount > 0) { - val errorMessage = resources.getQuantityString(R.plurals.snackBarUploadError, errorCount, errorCount) - showSnackbar(errorMessage, showAboveFab = true) + if (isLowMemory()) { + showSnackbar(R.string.uploadOutOfMemoryError, showAboveFab = true) + } else { + val errorMessage = resources.getQuantityString(R.plurals.snackBarUploadError, errorCount, errorCount) + showSnackbar(errorMessage, showAboveFab = true) + } } if (successCount > 0) mainViewModel.refreshActivities.value = true @@ -113,32 +117,27 @@ class ImportFilesDialog : DialogFragment() { private suspend fun initUpload(uri: Uri) = withContext(Dispatchers.IO) { requireContext().contentResolver.query(uri, null, null, null, null)?.use { cursor -> + if (isLowMemory()) return@withContext + if (cursor.moveToFirst()) { val fileName = cursor.getFileName(uri) val (fileCreatedAt, fileModifiedAt) = getFileDates(cursor) - when { - isLowMemory() -> withContext(Dispatchers.Main) { - showSnackbar(R.string.uploadOutOfMemoryError, showAboveFab = true) - } - else -> { - val outputFile = getOutputFile(uri, fileModifiedAt) - ensureActive() - UploadFile( - uri = outputFile.toUri().toString(), - driveId = navArgs.driveId, - fileCreatedAt = fileCreatedAt, - fileModifiedAt = fileModifiedAt, - fileName = fileName, - fileSize = outputFile.length(), - remoteFolder = navArgs.folderId, - type = UploadFile.Type.UPLOAD.name, - userId = AccountUtils.currentUserId, - ).store() - successCount++ - currentImportFile = null - } - } + val outputFile = getOutputFile(uri, fileModifiedAt) + ensureActive() + UploadFile( + uri = outputFile.toUri().toString(), + driveId = navArgs.driveId, + fileCreatedAt = fileCreatedAt, + fileModifiedAt = fileModifiedAt, + fileName = fileName, + fileSize = outputFile.length(), + remoteFolder = navArgs.folderId, + type = UploadFile.Type.UPLOAD.name, + userId = AccountUtils.currentUserId, + ).store() + successCount++ + currentImportFile = null } } } From 2fbd6d4fc8ac92c113a77b4fc6de44296ded33cb Mon Sep 17 00:00:00 2001 From: Tommy DI LUNA Date: Thu, 23 May 2024 14:14:07 +0200 Subject: [PATCH 2/3] Remove useless snackbar in importFiles --- .../drive/ui/addFiles/ImportFilesDialog.kt | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/infomaniak/drive/ui/addFiles/ImportFilesDialog.kt b/app/src/main/java/com/infomaniak/drive/ui/addFiles/ImportFilesDialog.kt index 4725b47811..f4fb83c252 100644 --- a/app/src/main/java/com/infomaniak/drive/ui/addFiles/ImportFilesDialog.kt +++ b/app/src/main/java/com/infomaniak/drive/ui/addFiles/ImportFilesDialog.kt @@ -74,12 +74,13 @@ class ImportFilesDialog : DialogFragment() { val errorCount = importCount - successCount if (errorCount > 0) { - if (isLowMemory()) { - showSnackbar(R.string.uploadOutOfMemoryError, showAboveFab = true) + val errorMessage = if (isLowMemory()) { + getString(R.string.uploadOutOfMemoryError) } else { - val errorMessage = resources.getQuantityString(R.plurals.snackBarUploadError, errorCount, errorCount) - showSnackbar(errorMessage, showAboveFab = true) + resources.getQuantityString(R.plurals.snackBarUploadError, errorCount, errorCount) } + + showSnackbar(errorMessage, showAboveFab = true) } if (successCount > 0) mainViewModel.refreshActivities.value = true @@ -100,15 +101,6 @@ class ImportFilesDialog : DialogFragment() { } } - if (errorCount > 0) { - withContext(Dispatchers.Main) { - showSnackbar( - title = resources.getQuantityString(R.plurals.snackBarUploadError, errorCount, errorCount), - showAboveFab = true, - ) - } - } - lifecycle.withResumed { dismiss() } @@ -118,7 +110,7 @@ class ImportFilesDialog : DialogFragment() { private suspend fun initUpload(uri: Uri) = withContext(Dispatchers.IO) { requireContext().contentResolver.query(uri, null, null, null, null)?.use { cursor -> if (isLowMemory()) return@withContext - + if (cursor.moveToFirst()) { val fileName = cursor.getFileName(uri) val (fileCreatedAt, fileModifiedAt) = getFileDates(cursor) From 3f9c57a138a387d28526320e93d932bbf8221a64 Mon Sep 17 00:00:00 2001 From: Tommy DI LUNA Date: Thu, 23 May 2024 15:18:43 +0200 Subject: [PATCH 3/3] Improve RAM error snackbar during file import --- .../drive/ui/addFiles/ImportFilesDialog.kt | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/infomaniak/drive/ui/addFiles/ImportFilesDialog.kt b/app/src/main/java/com/infomaniak/drive/ui/addFiles/ImportFilesDialog.kt index f4fb83c252..69b81dac9e 100644 --- a/app/src/main/java/com/infomaniak/drive/ui/addFiles/ImportFilesDialog.kt +++ b/app/src/main/java/com/infomaniak/drive/ui/addFiles/ImportFilesDialog.kt @@ -58,6 +58,8 @@ class ImportFilesDialog : DialogFragment() { private var currentImportFile: IOFile? = null private var successCount = 0 + private var isMemoryError: Boolean = false + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val countMessage = requireContext().resources.getQuantityString(R.plurals.preparingToUpload, importCount, importCount) dialogBinding.description.text = countMessage @@ -74,7 +76,7 @@ class ImportFilesDialog : DialogFragment() { val errorCount = importCount - successCount if (errorCount > 0) { - val errorMessage = if (isLowMemory()) { + val errorMessage = if (isMemoryError) { getString(R.string.uploadOutOfMemoryError) } else { resources.getQuantityString(R.plurals.snackBarUploadError, errorCount, errorCount) @@ -95,7 +97,12 @@ class ImportFilesDialog : DialogFragment() { initUpload(uri) }.onFailure { exception -> exception.printStackTrace() - Sentry.captureException(exception) + + if (exception is NotEnoughRamException) { + isMemoryError = true + } else { + Sentry.captureException(exception) + } errorCount++ } @@ -109,7 +116,7 @@ class ImportFilesDialog : DialogFragment() { private suspend fun initUpload(uri: Uri) = withContext(Dispatchers.IO) { requireContext().contentResolver.query(uri, null, null, null, null)?.use { cursor -> - if (isLowMemory()) return@withContext + if (isLowMemory()) throw NotEnoughRamException() if (cursor.moveToFirst()) { val fileName = cursor.getFileName(uri) @@ -150,4 +157,6 @@ class ImportFilesDialog : DialogFragment() { } } } + + private class NotEnoughRamException : Exception("Low device memory.") }