diff options
author | Stefan Niedermann <info@niedermann.it> | 2020-11-04 19:20:21 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2020-11-04 19:20:21 +0300 |
commit | a78b0f8935d90870527b3e75ed27c4f35349972f (patch) | |
tree | 10ae160c54cecf15c2cd954e61bf7254f977e238 /app/src/main/java/it/niedermann/nextcloud/deck/ui | |
parent | 660b9b28978fe5cd373dffaf6ccf682228625174 (diff) |
Small refactorings
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/ui')
9 files changed, 82 insertions, 90 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 32634ad66..1518b5913 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 @@ -3,6 +3,7 @@ package it.niedermann.nextcloud.deck.ui.card.attachments.picker; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; +import android.graphics.Bitmap; import android.net.Uri; import androidx.annotation.NonNull; @@ -10,6 +11,8 @@ import androidx.recyclerview.widget.RecyclerView; import java.util.Arrays; 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_BLOB; @@ -19,10 +22,15 @@ import static android.database.Cursor.FIELD_TYPE_NULL; import static android.database.Cursor.FIELD_TYPE_STRING; import static androidx.recyclerview.widget.RecyclerView.NO_ID; +/** + * An {@link RecyclerView.Adapter} which provides previews of one type of files and also an option to open a native dialog. + * <p> + * Example: Previews for images of the gallery as well a one option to take a photo + */ public abstract class AbstractPickerAdapter<T extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<T> { protected static final int VIEW_TYPE_ITEM = 0; - protected static final int VIEW_TYPE_ITEM_PICKER = 1; + protected static final int VIEW_TYPE_ITEM_NATIVE = 1; private final int count; protected final int columnIndex; @@ -36,6 +44,12 @@ public abstract class AbstractPickerAdapter<T extends RecyclerView.ViewHolder> e @NonNull protected final ContentResolver contentResolver; + /** + * Should be used to bind heavy operations like when dealing with {@link Bitmap} + */ + @NonNull + protected final ExecutorService bindExecutor = Executors.newCachedThreadPool(); + public AbstractPickerAdapter(@NonNull Context context, @NonNull Consumer<Uri> onSelect, @NonNull Runnable openNativePicker, Uri subject, String idColumn, String sortOrder) { this(context, onSelect, openNativePicker, subject, idColumn, new String[]{idColumn}, sortOrder); } @@ -85,12 +99,12 @@ public abstract class AbstractPickerAdapter<T extends RecyclerView.ViewHolder> e @Override public int getItemViewType(int position) { return position == 0 - ? VIEW_TYPE_ITEM_PICKER + ? VIEW_TYPE_ITEM_NATIVE : VIEW_TYPE_ITEM; } /** - * Call this method when the {@link AbstractPickerAdapter} is no longe need to free resources. + * Call this method when the {@link AbstractPickerAdapter} is no longer need to free resources. */ public void onDestroy() { cursor.close(); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/ContactAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/ContactAdapter.java index 9207362a3..e1cefcd59 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/ContactAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/ContactAdapter.java @@ -16,11 +16,9 @@ import androidx.recyclerview.widget.RecyclerView; import java.io.IOException; import java.io.InputStream; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import java.util.function.Consumer; -import it.niedermann.nextcloud.deck.databinding.ItemFilterUserBinding; +import it.niedermann.nextcloud.deck.databinding.ItemPickerNativeBinding; import it.niedermann.nextcloud.deck.databinding.ItemPickerUserBinding; import static android.provider.ContactsContract.Contacts.CONTENT_LOOKUP_URI; @@ -33,8 +31,6 @@ public class ContactAdapter extends AbstractPickerAdapter<RecyclerView.ViewHolde private final int displayNameColumnIndex; - @NonNull - private final ExecutorService bitmapExecutor = Executors.newCachedThreadPool(); public ContactAdapter(@NonNull Context context, @NonNull Consumer<Uri> onSelect, @NonNull Runnable onSelectPicker) { super(context, onSelect, onSelectPicker, CONTENT_URI, LOOKUP_KEY, new String[]{LOOKUP_KEY, DISPLAY_NAME}, SORT_KEY_PRIMARY); @@ -46,8 +42,8 @@ public class ContactAdapter extends AbstractPickerAdapter<RecyclerView.ViewHolde @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { switch (viewType) { - case VIEW_TYPE_ITEM_PICKER: - return new ContactPickerItemViewHolder(ItemFilterUserBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); + case VIEW_TYPE_ITEM_NATIVE: + return new ContactNativeItemViewHolder(ItemPickerNativeBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); case VIEW_TYPE_ITEM: return new ContactItemViewHolder(ItemPickerUserBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); default: @@ -58,12 +54,12 @@ public class ContactAdapter extends AbstractPickerAdapter<RecyclerView.ViewHolde @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { switch (getItemViewType(position)) { - case VIEW_TYPE_ITEM_PICKER: { - ((ContactPickerItemViewHolder) holder).bind(openNativePicker); + case VIEW_TYPE_ITEM_NATIVE: { + ((ContactNativeItemViewHolder) holder).bind(openNativePicker); break; } case VIEW_TYPE_ITEM: { - bitmapExecutor.execute(() -> { + bindExecutor.execute(() -> { final ContactItemViewHolder viewHolder = (ContactItemViewHolder) holder; final long id = getItemId(position); final String name = cursor.getString(displayNameColumnIndex); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/ContactNativeItemViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/ContactNativeItemViewHolder.java new file mode 100644 index 000000000..e4d1a0a2e --- /dev/null +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/ContactNativeItemViewHolder.java @@ -0,0 +1,22 @@ +package it.niedermann.nextcloud.deck.ui.card.attachments.picker; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import it.niedermann.nextcloud.deck.R; +import it.niedermann.nextcloud.deck.databinding.ItemPickerNativeBinding; + +public class ContactNativeItemViewHolder extends RecyclerView.ViewHolder { + + private final ItemPickerNativeBinding binding; + + public ContactNativeItemViewHolder(@NonNull ItemPickerNativeBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + + public void bind(@NonNull Runnable onOpenMajorPicker) { + binding.title.setText(R.string.show_all_contacts); + itemView.setOnClickListener((v) -> onOpenMajorPicker.run()); + } +} diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/ContactPickerItemViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/ContactPickerItemViewHolder.java deleted file mode 100644 index 7978dde93..000000000 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/ContactPickerItemViewHolder.java +++ /dev/null @@ -1,27 +0,0 @@ -package it.niedermann.nextcloud.deck.ui.card.attachments.picker; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; - -import it.niedermann.nextcloud.deck.R; -import it.niedermann.nextcloud.deck.databinding.ItemFilterUserBinding; - -public class ContactPickerItemViewHolder extends RecyclerView.ViewHolder { - - private final ItemFilterUserBinding binding; - - public ContactPickerItemViewHolder(@NonNull ItemFilterUserBinding binding) { - super(binding.getRoot()); - this.binding = binding; - } - - public void bind(Runnable onOpenMajorPicker) { - Glide.with(itemView.getContext()) - .load(R.drawable.ic_baseline_account_circle_24) - .into(binding.avatar); - binding.displayName.setText("Show all contacts"); - itemView.setOnClickListener((v) -> onOpenMajorPicker.run()); - } -} 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 addf4979b..8f8c45d1e 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 @@ -12,11 +12,9 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import java.util.function.Consumer; -import it.niedermann.nextcloud.deck.databinding.ItemFilterUserBinding; +import it.niedermann.nextcloud.deck.databinding.ItemPickerNativeBinding; import it.niedermann.nextcloud.deck.databinding.ItemPickerUserBinding; import static android.provider.BaseColumns._ID; @@ -28,8 +26,6 @@ public class FileAdapter extends AbstractPickerAdapter<RecyclerView.ViewHolder> private final int displayNameColumnIndex; private final int sizeColumnIndex; - @NonNull - private final ExecutorService bitmapExecutor = Executors.newCachedThreadPool(); 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"); @@ -42,8 +38,8 @@ public class FileAdapter extends AbstractPickerAdapter<RecyclerView.ViewHolder> @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { switch (viewType) { - case VIEW_TYPE_ITEM_PICKER: - return new FilePickerItemViewHolder(ItemFilterUserBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); + case VIEW_TYPE_ITEM_NATIVE: + return new FileNativeItemViewHolder(ItemPickerNativeBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); case VIEW_TYPE_ITEM: return new FileItemViewHolder(ItemPickerUserBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); default: @@ -54,12 +50,12 @@ public class FileAdapter extends AbstractPickerAdapter<RecyclerView.ViewHolder> @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { switch (getItemViewType(position)) { - case VIEW_TYPE_ITEM_PICKER: { - ((FilePickerItemViewHolder) holder).bind(openNativePicker); + case VIEW_TYPE_ITEM_NATIVE: { + ((FileNativeItemViewHolder) holder).bind(openNativePicker); break; } case VIEW_TYPE_ITEM: { - bitmapExecutor.execute(() -> { + bindExecutor.execute(() -> { final long id = getItemId(position); final String name = cursor.getString(displayNameColumnIndex); final long size = cursor.getLong(sizeColumnIndex); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/FileNativeItemViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/FileNativeItemViewHolder.java new file mode 100644 index 000000000..e7adc968a --- /dev/null +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/FileNativeItemViewHolder.java @@ -0,0 +1,22 @@ +package it.niedermann.nextcloud.deck.ui.card.attachments.picker; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import it.niedermann.nextcloud.deck.R; +import it.niedermann.nextcloud.deck.databinding.ItemPickerNativeBinding; + +public class FileNativeItemViewHolder extends RecyclerView.ViewHolder { + + private final ItemPickerNativeBinding binding; + + public FileNativeItemViewHolder(@NonNull ItemPickerNativeBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + + public void bind(Runnable onOpenMajorPicker) { + binding.title.setText(R.string.show_all_files); + itemView.setOnClickListener((v) -> onOpenMajorPicker.run()); + } +} diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/FilePickerItemViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/FilePickerItemViewHolder.java deleted file mode 100644 index 2cf012acb..000000000 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/FilePickerItemViewHolder.java +++ /dev/null @@ -1,27 +0,0 @@ -package it.niedermann.nextcloud.deck.ui.card.attachments.picker; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; - -import it.niedermann.nextcloud.deck.R; -import it.niedermann.nextcloud.deck.databinding.ItemFilterUserBinding; - -public class FilePickerItemViewHolder extends RecyclerView.ViewHolder { - - private final ItemFilterUserBinding binding; - - public FilePickerItemViewHolder(@NonNull ItemFilterUserBinding binding) { - super(binding.getRoot()); - this.binding = binding; - } - - public void bind(Runnable onOpenMajorPicker) { - Glide.with(itemView.getContext()) - .load(R.drawable.ic_attach_file_grey600_24dp) - .into(binding.avatar); - binding.displayName.setText("Show all files"); - itemView.setOnClickListener((v) -> onOpenMajorPicker.run()); - } -} diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/GalleryAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/GalleryAdapter.java index b7f76f3d3..fddd87f51 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/GalleryAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/GalleryAdapter.java @@ -17,8 +17,6 @@ import androidx.lifecycle.LifecycleOwner; import androidx.recyclerview.widget.RecyclerView; import java.io.IOException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import java.util.function.Consumer; import it.niedermann.nextcloud.deck.databinding.ItemAttachmentImageBinding; @@ -32,8 +30,6 @@ import static android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI; public class GalleryAdapter extends AbstractPickerAdapter<RecyclerView.ViewHolder> { @NonNull - private final ExecutorService bitmapExecutor = Executors.newCachedThreadPool(); - @NonNull private final LifecycleOwner lifecycleOwner; @SuppressLint("InlinedApi") @@ -51,8 +47,8 @@ public class GalleryAdapter extends AbstractPickerAdapter<RecyclerView.ViewHolde @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { switch (viewType) { - case VIEW_TYPE_ITEM_PICKER: - return new GalleryPickerItemViewHolder(ItemPhotoPreviewBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); + case VIEW_TYPE_ITEM_NATIVE: + return new GalleryPhotoPreviewItemViewHolder(ItemPhotoPreviewBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); case VIEW_TYPE_ITEM: return new GalleryItemViewHolder(ItemAttachmentImageBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); default: @@ -64,12 +60,12 @@ public class GalleryAdapter extends AbstractPickerAdapter<RecyclerView.ViewHolde @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { switch (getItemViewType(position)) { - case VIEW_TYPE_ITEM_PICKER: { - ((GalleryPickerItemViewHolder) holder).bind(openNativePicker, lifecycleOwner); + case VIEW_TYPE_ITEM_NATIVE: { + ((GalleryPhotoPreviewItemViewHolder) holder).bind(openNativePicker, lifecycleOwner); break; } case VIEW_TYPE_ITEM: { - bitmapExecutor.execute(() -> { + bindExecutor.execute(() -> { final long id = getItemId(position); try { final Bitmap thumbnail; @@ -94,8 +90,8 @@ public class GalleryAdapter extends AbstractPickerAdapter<RecyclerView.ViewHolde @Override public void onViewDetachedFromWindow(@NonNull RecyclerView.ViewHolder holder) { super.onViewDetachedFromWindow(holder); - if(holder instanceof GalleryPickerItemViewHolder) { - ((GalleryPickerItemViewHolder) holder).unbind(); + if(holder instanceof GalleryPhotoPreviewItemViewHolder) { + ((GalleryPhotoPreviewItemViewHolder) holder).unbind(); } } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/GalleryPickerItemViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/GalleryPhotoPreviewItemViewHolder.java index 6aecfb373..e77503d02 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/GalleryPickerItemViewHolder.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/picker/GalleryPhotoPreviewItemViewHolder.java @@ -16,12 +16,12 @@ import it.niedermann.nextcloud.deck.databinding.ItemPhotoPreviewBinding; import static androidx.camera.core.CameraSelector.DEFAULT_BACK_CAMERA; -public class GalleryPickerItemViewHolder extends RecyclerView.ViewHolder { +public class GalleryPhotoPreviewItemViewHolder extends RecyclerView.ViewHolder { private final ItemPhotoPreviewBinding binding; private ProcessCameraProvider cameraProvider; - public GalleryPickerItemViewHolder(@NonNull ItemPhotoPreviewBinding binding) { + public GalleryPhotoPreviewItemViewHolder(@NonNull ItemPhotoPreviewBinding binding) { super(binding.getRoot()); this.binding = binding; } |