diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/ContactPicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/ContactPicker.kt index 315fe6cbf2..a32c977140 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/ContactPicker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/ContactPicker.kt @@ -21,6 +21,7 @@ import android.content.Context import android.content.Intent import android.provider.ContactsContract import im.vector.lib.multipicker.entity.MultiPickerContactType +import im.vector.lib.multipicker.utils.getColumnIndexOrNull /** * Contact Picker implementation @@ -49,9 +50,9 @@ class ContactPicker : Picker() { null )?.use { cursor -> if (cursor.moveToFirst()) { - val idColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID) - val nameColumn = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME) - val photoUriColumn = cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_URI) + val idColumn = cursor.getColumnIndexOrNull(ContactsContract.Contacts._ID) ?: return@use + val nameColumn = cursor.getColumnIndexOrNull(ContactsContract.Contacts.DISPLAY_NAME) ?: return@use + val photoUriColumn = cursor.getColumnIndexOrNull(ContactsContract.Contacts.PHOTO_URI) ?: return@use val contactId = cursor.getInt(idColumn) var name = cursor.getString(nameColumn) @@ -72,10 +73,13 @@ class ContactPicker : Picker() { selection, selectionArgs, null - )?.use { cursor -> - while (cursor.moveToNext()) { - val mimeType = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.MIMETYPE)) - val contactData = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.DATA1)) + )?.use inner@ { innerCursor -> + val mimeTypeColumnIndex = innerCursor.getColumnIndexOrNull(ContactsContract.Data.MIMETYPE) ?: return@inner + val data1ColumnIndex = innerCursor.getColumnIndexOrNull(ContactsContract.Data.DATA1) ?: return@inner + + while (innerCursor.moveToNext()) { + val mimeType = innerCursor.getString(mimeTypeColumnIndex) + val contactData = innerCursor.getString(data1ColumnIndex) if (mimeType == ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) { name = contactData @@ -115,7 +119,10 @@ class ContactPicker : Picker() { selectionArgs, null )?.use { cursor -> - return if (cursor.moveToFirst()) cursor.getInt(cursor.getColumnIndex(ContactsContract.RawContacts._ID)) else null + return if (cursor.moveToFirst()) { + cursor.getColumnIndexOrNull(ContactsContract.RawContacts._ID) + ?.let { cursor.getInt(it) } + } else null } } diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/FilePicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/FilePicker.kt index ec98152aa7..8e6c97f2f8 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/FilePicker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/FilePicker.kt @@ -21,6 +21,7 @@ import android.content.Intent import android.provider.OpenableColumns import im.vector.lib.multipicker.entity.MultiPickerBaseType import im.vector.lib.multipicker.entity.MultiPickerFileType +import im.vector.lib.multipicker.utils.getColumnIndexOrNull import im.vector.lib.multipicker.utils.isMimeTypeAudio import im.vector.lib.multipicker.utils.isMimeTypeImage import im.vector.lib.multipicker.utils.isMimeTypeVideo @@ -49,8 +50,8 @@ class FilePicker : Picker() { // Other files context.contentResolver.query(selectedUri, null, null, null, null) ?.use { cursor -> - val nameColumn = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME) - val sizeColumn = cursor.getColumnIndex(OpenableColumns.SIZE) + val nameColumn = cursor.getColumnIndexOrNull(OpenableColumns.DISPLAY_NAME) ?: return@use null + val sizeColumn = cursor.getColumnIndexOrNull(OpenableColumns.SIZE) ?: return@use null if (cursor.moveToFirst()) { val name = cursor.getString(nameColumn) val size = cursor.getLong(sizeColumn) diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/utils/ContentResolverUtil.kt b/multipicker/src/main/java/im/vector/lib/multipicker/utils/ContentResolverUtil.kt index 78136c274a..55c0010afd 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/utils/ContentResolverUtil.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/utils/ContentResolverUtil.kt @@ -37,8 +37,8 @@ internal fun Uri.toMultiPickerImageType(context: Context): MultiPickerImageType? null, null )?.use { cursor -> - val nameColumn = cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME) - val sizeColumn = cursor.getColumnIndex(MediaStore.Images.Media.SIZE) + val nameColumn = cursor.getColumnIndexOrNull(MediaStore.Images.Media.DISPLAY_NAME) ?: return@use null + val sizeColumn = cursor.getColumnIndexOrNull(MediaStore.Images.Media.SIZE) ?: return@use null if (cursor.moveToNext()) { val name = cursor.getString(nameColumn) @@ -75,8 +75,8 @@ internal fun Uri.toMultiPickerVideoType(context: Context): MultiPickerVideoType? null, null )?.use { cursor -> - val nameColumn = cursor.getColumnIndex(MediaStore.Video.Media.DISPLAY_NAME) - val sizeColumn = cursor.getColumnIndex(MediaStore.Video.Media.SIZE) + val nameColumn = cursor.getColumnIndexOrNull(MediaStore.Video.Media.DISPLAY_NAME) ?: return@use null + val sizeColumn = cursor.getColumnIndexOrNull(MediaStore.Video.Media.SIZE) ?: return@use null if (cursor.moveToNext()) { val name = cursor.getString(nameColumn) @@ -124,8 +124,8 @@ fun Uri.toMultiPickerAudioType(context: Context): MultiPickerAudioType? { null, null )?.use { cursor -> - val nameColumn = cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME) - val sizeColumn = cursor.getColumnIndex(MediaStore.Audio.Media.SIZE) + val nameColumn = cursor.getColumnIndexOrNull(MediaStore.Audio.Media.DISPLAY_NAME) ?: return@use null + val sizeColumn = cursor.getColumnIndexOrNull(MediaStore.Audio.Media.SIZE) ?: return@use null if (cursor.moveToNext()) { val name = cursor.getString(nameColumn) diff --git a/vector/src/main/java/im/vector/app/core/intent/Filename.kt b/vector/src/main/java/im/vector/app/core/intent/Filename.kt index 5d118c19a1..a38602e4a5 100644 --- a/vector/src/main/java/im/vector/app/core/intent/Filename.kt +++ b/vector/src/main/java/im/vector/app/core/intent/Filename.kt @@ -19,15 +19,17 @@ package im.vector.app.core.intent import android.content.Context import android.net.Uri import android.provider.OpenableColumns +import im.vector.lib.multipicker.utils.getColumnIndexOrNull fun getFilenameFromUri(context: Context?, uri: Uri): String? { if (context != null && uri.scheme == "content") { - val cursor = context.contentResolver.query(uri, null, null, null, null) - cursor?.use { - if (it.moveToFirst()) { - return it.getString(it.getColumnIndex(OpenableColumns.DISPLAY_NAME)) - } - } + context.contentResolver.query(uri, null, null, null, null) + ?.use { cursor -> + if (cursor.moveToFirst()) { + return cursor.getColumnIndexOrNull(OpenableColumns.DISPLAY_NAME) + ?.let { cursor.getString(it) } + } + } } return uri.path?.substringAfterLast('/') }