Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2020-11-04 21:48:11 +0300
committerStefan Niedermann <info@niedermann.it>2020-11-04 21:48:11 +0300
commit3df7b1a573b7ea53370be505ca3047334fb4b9f5 (patch)
tree79a728979b8edddd691215adefd11f438069c6ec /app/src/main/java/it
parentcb30da2e5031180f63d4380864b07085671c04d2 (diff)
Prevent crash when no files are present
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src/main/java/it')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/AbstractPickerAdapter.java13
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/FileAdapter.java9
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());