diff --git a/app/src/main/java/fr/free/nrw/commons/filepicker/Costants.kt b/app/src/main/java/fr/free/nrw/commons/filepicker/Costants.kt index e405a6d52c..85c3095773 100644 --- a/app/src/main/java/fr/free/nrw/commons/filepicker/Costants.kt +++ b/app/src/main/java/fr/free/nrw/commons/filepicker/Costants.kt @@ -3,6 +3,8 @@ package fr.free.nrw.commons.filepicker interface Constants { companion object { const val DEFAULT_FOLDER_NAME = "CommonsContributions" + // this is used for truncation logic to cap the selection at 20 files. + const val MAX_EXTERNAL_UPLOAD_COUNT: Int = 20 } /** diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt index e83ea2c5f9..0315f5ee53 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt @@ -28,6 +28,7 @@ import fr.free.nrw.commons.auth.LoginActivity import fr.free.nrw.commons.auth.SessionManager import fr.free.nrw.commons.contributions.ContributionController import fr.free.nrw.commons.databinding.ActivityUploadBinding +import fr.free.nrw.commons.filepicker.Constants.Companion.MAX_EXTERNAL_UPLOAD_COUNT import fr.free.nrw.commons.filepicker.Constants.RequestCodes import fr.free.nrw.commons.filepicker.UploadableFile import fr.free.nrw.commons.kvstore.BasicKvStore @@ -723,7 +724,28 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C } private fun receiveExternalSharedItems() { - uploadableFiles = contributionController!!.handleExternalImagesPicked(this, intent).toMutableList() + var filesToProcess = contributionController!!.handleExternalImagesPicked(this, intent).toMutableList() + + if (intent.action == Intent.ACTION_SEND_MULTIPLE) { + val fileCount = filesToProcess.size + + if (fileCount > MAX_EXTERNAL_UPLOAD_COUNT) { + //truncates the list to the maximum allowed limit (20) Issue #3101 + filesToProcess = filesToProcess.subList(0, MAX_EXTERNAL_UPLOAD_COUNT) + + // informs the the user that the list was truncated + showLongToast( + this, + getString( + R.string.multiple_upload_limit_truncated_message, + fileCount, + MAX_EXTERNAL_UPLOAD_COUNT + ) + ) + } + } + + uploadableFiles = filesToProcess } private fun receiveInternalSharedItems() { @@ -1039,3 +1061,4 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C } } } + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 950ffd0754..3c8b5e525f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -887,6 +887,8 @@ Upload your first media by tapping on the add button. Created and uploaded by: %1$s Created by %1$s and uploaded by %2$s Nominated for Deletion + + You selected %1$d files. Only the first %2$d files will be processed for upload. You can only select a maximum of %d images.