diff options
author | Stefan Niedermann <info@niedermann.it> | 2020-11-04 21:48:11 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2020-11-04 21:48:11 +0300 |
commit | 3df7b1a573b7ea53370be505ca3047334fb4b9f5 (patch) | |
tree | 79a728979b8edddd691215adefd11f438069c6ec /app/src/main/java/it/niedermann/nextcloud/deck/ui | |
parent | cb30da2e5031180f63d4380864b07085671c04d2 (diff) |
Prevent crash when no files are present
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/ui')
2 files changed, 17 insertions, 5 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/AbstractPickerAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/AbstractPickerAdapter.java index c3cb21f6d..f4eca487b 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/AbstractPickerAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/AbstractPickerAdapter.java @@ -9,13 +9,14 @@ import android.net.Uri; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; -import java.util.Objects; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.function.Consumer; import static android.database.Cursor.FIELD_TYPE_INTEGER; +import static android.database.Cursor.FIELD_TYPE_NULL; import static androidx.recyclerview.widget.RecyclerView.NO_ID; +import static java.util.Objects.requireNonNull; /** * An {@link RecyclerView.Adapter} which provides previews of one type of files and also an option to open a native dialog. @@ -51,14 +52,18 @@ public abstract class AbstractPickerAdapter<T extends RecyclerView.ViewHolder> e } public AbstractPickerAdapter(@NonNull Context context, @NonNull Consumer<Uri> onSelect, @NonNull Runnable openNativePicker, Uri subject, String idColumn, String[] requestedColumns, String sortOrder) { + this(context, onSelect, openNativePicker, idColumn, requireNonNull(context.getContentResolver().query(subject, requestedColumns, null, null, sortOrder))); + } + + public AbstractPickerAdapter(@NonNull Context context, @NonNull Consumer<Uri> onSelect, @NonNull Runnable openNativePicker, String idColumn, @NonNull Cursor cursor) { + this.contentResolver = context.getContentResolver(); this.onSelect = onSelect; this.openNativePicker = openNativePicker; - this.contentResolver = context.getContentResolver(); - this.cursor = Objects.requireNonNull(contentResolver.query(subject, requestedColumns, null, null, sortOrder)); + this.cursor = cursor; this.cursor.moveToFirst(); this.columnIndex = this.cursor.getColumnIndex(idColumn); - this.columnIndexType = this.cursor.getType(columnIndex); this.count = cursor.getCount(); + this.columnIndexType = (this.count > 0) ? this.cursor.getType(columnIndex) : FIELD_TYPE_NULL; setHasStableIds(true); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/FileAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/FileAdapter.java index 8f8c45d1e..c5287bf9c 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/FileAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/FileAdapter.java @@ -6,6 +6,7 @@ import android.net.Uri; import android.os.Handler; import android.os.Looper; import android.provider.MediaStore; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.ViewGroup; @@ -18,17 +19,23 @@ import it.niedermann.nextcloud.deck.databinding.ItemPickerNativeBinding; import it.niedermann.nextcloud.deck.databinding.ItemPickerUserBinding; import static android.provider.BaseColumns._ID; +import static android.provider.MediaStore.Files.FileColumns.MEDIA_TYPE; +import static android.provider.MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE; import static android.provider.MediaStore.Files.FileColumns.TITLE; import static android.provider.MediaStore.MediaColumns.DATE_ADDED; import static android.provider.MediaStore.MediaColumns.SIZE; +import static java.util.Objects.requireNonNull; public class FileAdapter extends AbstractPickerAdapter<RecyclerView.ViewHolder> { private final int displayNameColumnIndex; private final int sizeColumnIndex; + private final static String[] excludedMediaTypes = new String[]{ + String.valueOf(MEDIA_TYPE_IMAGE) + }; public FileAdapter(@NonNull Context context, @NonNull Consumer<Uri> onSelect, @NonNull Runnable onSelectPicker) { - super(context, onSelect, onSelectPicker, MediaStore.Files.getContentUri("external"), _ID, new String[]{_ID, TITLE, SIZE}, DATE_ADDED + " DESC"); + super(context, onSelect, onSelectPicker, _ID, requireNonNull(context.getContentResolver().query(MediaStore.Files.getContentUri("external"), new String[]{_ID, TITLE, SIZE}, MEDIA_TYPE + " NOT IN (" + TextUtils.join(",", excludedMediaTypes) + ") ", null, DATE_ADDED + " DESC"))); displayNameColumnIndex = cursor.getColumnIndex(TITLE); sizeColumnIndex = cursor.getColumnIndex(SIZE); notifyItemRangeInserted(0, getItemCount()); |