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:
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AttachmentAdapter.java')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AttachmentAdapter.java113
1 files changed, 79 insertions, 34 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AttachmentAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AttachmentAdapter.java
index 74a00677e..dad498a62 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AttachmentAdapter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AttachmentAdapter.java
@@ -16,6 +16,7 @@ import androidx.appcompat.widget.AppCompatImageView;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.resource.bitmap.CenterCrop;
import java.util.List;
@@ -30,6 +31,9 @@ import it.niedermann.nextcloud.deck.util.DeleteDialogBuilder;
public class AttachmentAdapter extends RecyclerView.Adapter<AttachmentAdapter.AttachmentViewHolder> {
+ public static final int VIEW_TYPE_DEFAULT = 2;
+ public static final int VIEW_TYPE_IMAGE = 1;
+
private final Account account;
private final long cardRemoteId;
@NonNull
@@ -50,56 +54,82 @@ public class AttachmentAdapter extends RecyclerView.Adapter<AttachmentAdapter.At
@Override
public AttachmentViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
this.context = parent.getContext();
- View v = LayoutInflater.from(context).inflate(R.layout.item_attachment, parent, false);
- return new AttachmentViewHolder(v);
+ //noinspection SwitchStatementWithTooFewBranches
+ switch (viewType) {
+ case VIEW_TYPE_IMAGE: {
+ return new ImageAttachmentViewHolder(LayoutInflater.from(context).inflate(R.layout.item_attachment_image, parent, false));
+ }
+ default: {
+ return new DefaultAttachmentViewHolder(LayoutInflater.from(context).inflate(R.layout.item_attachment_default, parent, false));
+ }
+ }
}
@Override
public void onBindViewHolder(@NonNull AttachmentViewHolder holder, int position) {
Attachment attachment = attachments.get(position);
+ int viewType = getItemViewType(position);
holder.notSyncedYet.setVisibility(attachment.getStatusEnum() == DBStatus.UP_TO_DATE ? View.GONE : View.VISIBLE);
- holder.filename.getRootView().setOnClickListener((event) -> {
- Intent openURL = new Intent(android.content.Intent.ACTION_VIEW);
- openURL.setData(Uri.parse(account.getUrl() + "/index.php/apps/deck/cards/" + cardRemoteId + "/attachment/" + attachment.getId()));
- context.startActivity(openURL);
- });
-
if (attachment.getMimetype() != null) {
if (attachment.getMimetype().startsWith("image")) {
// TODO Glide is currently not yet able to use SSO and fails on authentication
String uri = account.getUrl() + "/index.php/apps/deck/cards/" + cardRemoteId + "/attachment/" + attachment.getId();
Glide.with(context)
.load(uri)
+ .transform(new CenterCrop())
.error(R.drawable.ic_image_grey600_24dp)
- .into(holder.filetype);
- holder.filetype.setImageResource(R.drawable.ic_image_grey600_24dp);
- holder.filename.getRootView().setOnClickListener((v) -> AttachmentDialogFragment.newInstance(uri, attachment.getBasename()).show(((AppCompatActivity) context).getSupportFragmentManager(), "asdf"));
+ .into(holder.preview);
+ holder.preview.setImageResource(R.drawable.ic_image_grey600_24dp);
+ holder.preview.getRootView().setOnClickListener((v) -> AttachmentDialogFragment.newInstance(uri, attachment.getBasename()).show(((AppCompatActivity) context).getSupportFragmentManager(), "preview"));
} else if (attachment.getMimetype().startsWith("audio")) {
- holder.filetype.setImageResource(R.drawable.ic_music_note_grey600_24dp);
+ holder.preview.setImageResource(R.drawable.ic_music_note_grey600_24dp);
} else if (attachment.getMimetype().startsWith("video")) {
- holder.filetype.setImageResource(R.drawable.ic_local_movies_grey600_24dp);
+ holder.preview.setImageResource(R.drawable.ic_local_movies_grey600_24dp);
}
}
- holder.filename.setText(attachment.getBasename());
- holder.filesize.setText(Formatter.formatFileSize(context, attachment.getFilesize()));
- if (attachment.getLastModifiedLocal() != null) {
- holder.modified.setText(DateUtil.getRelativeDateTimeString(context, attachment.getLastModifiedLocal().getTime()));
- holder.modified.setVisibility(View.VISIBLE);
- } else if (attachment.getLastModified() != null) {
- holder.modified.setText(DateUtil.getRelativeDateTimeString(context, attachment.getLastModified().getTime()));
- holder.modified.setVisibility(View.VISIBLE);
- } else {
- holder.modified.setVisibility(View.GONE);
+
+ //noinspection SwitchStatementWithTooFewBranches
+ switch (viewType) {
+ case VIEW_TYPE_IMAGE: {
+ ImageAttachmentViewHolder imageHolder = (ImageAttachmentViewHolder) holder;
+ break;
+ }
+ default: {
+ DefaultAttachmentViewHolder defaultHolder = (DefaultAttachmentViewHolder) holder;
+ defaultHolder.filename.getRootView().setOnClickListener((event) -> {
+ Intent openURL = new Intent(android.content.Intent.ACTION_VIEW);
+ openURL.setData(Uri.parse(account.getUrl() + "/index.php/apps/deck/cards/" + cardRemoteId + "/attachment/" + attachment.getId()));
+ context.startActivity(openURL);
+ });
+ defaultHolder.filename.setText(attachment.getBasename());
+ defaultHolder.filesize.setText(Formatter.formatFileSize(context, attachment.getFilesize()));
+ if (attachment.getLastModifiedLocal() != null) {
+ defaultHolder.modified.setText(DateUtil.getRelativeDateTimeString(context, attachment.getLastModifiedLocal().getTime()));
+ defaultHolder.modified.setVisibility(View.VISIBLE);
+ } else if (attachment.getLastModified() != null) {
+ defaultHolder.modified.setText(DateUtil.getRelativeDateTimeString(context, attachment.getLastModified().getTime()));
+ defaultHolder.modified.setVisibility(View.VISIBLE);
+ } else {
+ defaultHolder.modified.setVisibility(View.GONE);
+ }
+ defaultHolder.deleteButton.setOnClickListener((v) -> {
+ new DeleteDialogBuilder(context)
+ .setTitle(context.getString(R.string.delete_something, attachment.getFilename()))
+ .setMessage(R.string.attachment_delete_message)
+ .setNegativeButton(android.R.string.cancel, null)
+ .setPositiveButton(R.string.simple_delete, (dialog, which) -> attachmentDeletedListener.onAttachmentDeleted(attachment))
+ .show();
+ });
+ break;
+ }
}
- holder.deleteButton.setOnClickListener((v) -> {
- new DeleteDialogBuilder(context)
- .setTitle(context.getString(R.string.delete_something, attachment.getFilename()))
- .setMessage(R.string.attachment_delete_message)
- .setNegativeButton(android.R.string.cancel, null)
- .setPositiveButton(R.string.simple_delete, (dialog, which) -> attachmentDeletedListener.onAttachmentDeleted(attachment))
- .show();
- });
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ String mimeType = attachments.get(position).getMimetype();
+ return (mimeType != null && mimeType.startsWith("image")) ? VIEW_TYPE_IMAGE : VIEW_TYPE_DEFAULT;
}
@Override
@@ -108,10 +138,17 @@ public class AttachmentAdapter extends RecyclerView.Adapter<AttachmentAdapter.At
}
static class AttachmentViewHolder extends RecyclerView.ViewHolder {
+ @BindView(R.id.preview)
+ AppCompatImageView preview;
@BindView(R.id.not_synced_yet)
AppCompatImageView notSyncedYet;
- @BindView(R.id.filetype)
- AppCompatImageView filetype;
+
+ AttachmentViewHolder(@NonNull View itemView) {
+ super(itemView);
+ }
+ }
+
+ static class DefaultAttachmentViewHolder extends AttachmentViewHolder {
@BindView(R.id.filename)
TextView filename;
@BindView(R.id.filesize)
@@ -121,7 +158,15 @@ public class AttachmentAdapter extends RecyclerView.Adapter<AttachmentAdapter.At
@BindView(R.id.deleteButton)
ImageButton deleteButton;
- private AttachmentViewHolder(View view) {
+ private DefaultAttachmentViewHolder(View view) {
+ super(view);
+ ButterKnife.bind(this, view);
+ }
+ }
+
+ static class ImageAttachmentViewHolder extends AttachmentViewHolder {
+
+ private ImageAttachmentViewHolder(View view) {
super(view);
ButterKnife.bind(this, view);
}