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.