Browse Source

IntentUtil: fix sending multiple files

 - Use `ACTION_SEND_MULTIPLE`
 - Set type to `*/*` if not all files share a type
 - Use use a `ParcelableArrayListExtra` for `EXTRA_STREAM`

Signed-off-by: Álvaro Brey Vilas <alvaro.brey@nextcloud.com>
Álvaro Brey Vilas 3 years ago
parent
commit
93d7c7f9f7
1 changed files with 7 additions and 5 deletions
  1. 7 5
      src/main/java/com/nextcloud/client/utils/IntentUtil.kt

+ 7 - 5
src/main/java/com/nextcloud/client/utils/IntentUtil.kt

@@ -30,6 +30,7 @@ object IntentUtil {
     @JvmStatic
     public fun createSendIntent(context: Context, file: OCFile): Intent =
         createBaseSendFileIntent().apply {
+            action = Intent.ACTION_SEND
             type = file.mimeType
             putExtra(Intent.EXTRA_STREAM, file.getExposedFileUri(context))
         }
@@ -37,20 +38,21 @@ object IntentUtil {
     @JvmStatic
     public fun createSendIntent(context: Context, files: Array<OCFile>): Intent =
         createBaseSendFileIntent().apply {
+            action = Intent.ACTION_SEND_MULTIPLE
             type = getUniqueMimetype(files)
-            putExtra(Intent.EXTRA_STREAM, getExposedFileUris(context, files))
+            putParcelableArrayListExtra(Intent.EXTRA_STREAM, getExposedFileUris(context, files))
         }
 
     private fun createBaseSendFileIntent(): Intent =
-        Intent(Intent.ACTION_SEND).apply {
+        Intent().apply {
             addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
         }
 
     private fun getUniqueMimetype(files: Array<OCFile>): String? = when {
-        files.distinctBy { it.mimeType }.size > 1 -> null
+        files.distinctBy { it.mimeType }.size > 1 -> "*/*"
         else -> files[0].mimeType
     }
 
-    private fun getExposedFileUris(context: Context, files: Array<OCFile>): Array<Uri> =
-        files.map { it.getExposedFileUri(context) }.toTypedArray()
+    private fun getExposedFileUris(context: Context, files: Array<OCFile>): ArrayList<Uri> =
+        ArrayList(files.map { it.getExposedFileUri(context) })
 }