diff options
Diffstat (limited to 'app/src/main/java/it/niedermann')
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/ui/AttachmentsActivity.java | 47 | ||||
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentAdapter.java | 74 | ||||
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardActivityAdapter.java (renamed from app/src/main/java/it/niedermann/nextcloud/deck/ui/card/ActivityAdapter.java) | 4 | ||||
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardActivityFragment.java | 2 | ||||
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAttachmentAdapter.java (renamed from app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AttachmentAdapter.java) | 10 | ||||
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAttachmentsFragment.java | 20 |
6 files changed, 124 insertions, 33 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/AttachmentsActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/AttachmentsActivity.java index 411acdb90..93799e138 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/AttachmentsActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/AttachmentsActivity.java @@ -4,8 +4,7 @@ import android.os.Bundle; import android.view.MotionEvent; import androidx.appcompat.app.AppCompatActivity; - -import com.bumptech.glide.Glide; +import androidx.recyclerview.widget.RecyclerView; import java.util.List; @@ -13,8 +12,8 @@ import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.databinding.ActivityAttachmentsBinding; import it.niedermann.nextcloud.deck.model.Attachment; import it.niedermann.nextcloud.deck.persistence.sync.SyncManager; +import it.niedermann.nextcloud.deck.ui.attachments.AttachmentAdapter; import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler; -import it.niedermann.nextcloud.deck.util.AttachmentUtil; import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_ACCOUNT_ID; import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_LOCAL_ID; @@ -51,26 +50,34 @@ public class AttachmentsActivity extends AppCompatActivity { List<Attachment> attachments = fullCard.getAttachments(); if (fullCard.getAttachments().size() == 0) { DeckLog.logError(new IllegalStateException(AttachmentsActivity.class.getSimpleName() + " called, but card " + fullCard.getLocalId() + "has no attachments")); - finish(); - } else { - if (currentAttachment != 0L) { - for (Attachment a : attachments) { - if (a.getLocalId() == currentAttachment) { - Glide.with(this) - .load(AttachmentUtil.getUrl(account.getUrl(), fullCard.getId(), a.getId())) - .into(binding.image); - binding.toolbar.setTitle(a.getBasename()); - break; - } + supportFinishAfterTransition(); + return; + } + RecyclerView.Adapter adapter = new AttachmentAdapter(account, fullCard.getId(), attachments); + binding.viewPager.setAdapter(adapter); + if (currentAttachment != 0L) { + for (int i = 0; i < attachments.size(); i++) { + if (attachments.get(i).getLocalId() == currentAttachment) { + binding.viewPager.setCurrentItem(i, false); + break; } - } else { - DeckLog.logError(new IllegalStateException("No " + BUNDLE_KEY_CURRENT_ATTACHMENT_LOCAL_ID + " was provided. Falling back to displaying first image.")); - Glide.with(this) - .load(AttachmentUtil.getUrl(account.getUrl(), fullCard.getId(), attachments.get(0).getId())) - .into(binding.image); - binding.toolbar.setTitle(attachments.get(0).getBasename()); } } + // TODO + // https://android-developers.googleblog.com/2018/02/continuous-shared-element-transitions.html?m=1 + // https://github.com/android/animation-samples/blob/master/GridToPager/app/src/main/java/com/google/samples/gridtopager/fragment/ImagePagerFragment.java +// setEnterSharedElementCallback(new SharedElementCallback() { +// @Override +// public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) { +// View view = binding.viewPager.getRootView(); +// if (view == null) { +// return; +// } +// // Map the first shared element name to the child ImageView. +// sharedElements.put(names.get(0), view.findViewById(R.id.image)); +// Log.v("SHARED", "names" + names); +// } +// }); })); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentAdapter.java new file mode 100644 index 000000000..1d7307ccd --- /dev/null +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentAdapter.java @@ -0,0 +1,74 @@ +package it.niedermann.nextcloud.deck.ui.attachments; + +import android.content.Context; +import android.os.Build; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; + +import java.util.List; + +import it.niedermann.nextcloud.deck.R; +import it.niedermann.nextcloud.deck.databinding.ItemAttachmentBinding; +import it.niedermann.nextcloud.deck.model.Account; +import it.niedermann.nextcloud.deck.model.Attachment; +import it.niedermann.nextcloud.deck.util.AttachmentUtil; + +public class AttachmentAdapter extends RecyclerView.Adapter<AttachmentAdapter.AttachmentViewHolder> { + + private final Account account; + private final long cardRemoteId; + @NonNull + private List<Attachment> attachments; + private Context context; + + public AttachmentAdapter(@NonNull Account account, long cardRemoteId, @NonNull List<Attachment> attachments) { + super(); + this.attachments = attachments; + this.account = account; + this.cardRemoteId = cardRemoteId; + } + + @NonNull + @Override + public AttachmentViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + this.context = parent.getContext(); + return new AttachmentViewHolder(ItemAttachmentBinding.inflate(LayoutInflater.from(context), parent, false)); + } + + @Override + public void onBindViewHolder(@NonNull AttachmentViewHolder holder, int position) { + Attachment attachment = attachments.get(position); + String uri = AttachmentUtil.getUrl(account.getUrl(), cardRemoteId, attachment.getId()); + if (attachment.getMimetype() != null) { + if (attachment.getMimetype().startsWith("image")) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + holder.binding.preview.setTransitionName(context.getString(R.string.transition_attachment_preview, String.valueOf(attachment.getLocalId()))); + } + holder.binding.preview.setImageResource(R.drawable.ic_image_grey600_24dp); + Glide.with(context) + .load(uri) + .error(R.drawable.ic_image_grey600_24dp) + .into(holder.binding.preview); + } + } + } + + @Override + public int getItemCount() { + return attachments.size(); + } + + static class AttachmentViewHolder extends RecyclerView.ViewHolder { + private ItemAttachmentBinding binding; + + private AttachmentViewHolder(ItemAttachmentBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + } +} diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/ActivityAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardActivityAdapter.java index ab43b7634..b2a8a7aa4 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/ActivityAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardActivityAdapter.java @@ -15,13 +15,13 @@ import it.niedermann.nextcloud.deck.model.enums.ActivityType; import it.niedermann.nextcloud.deck.model.ocs.Activity; import it.niedermann.nextcloud.deck.util.DateUtil; -public class ActivityAdapter extends RecyclerView.Adapter<ActivityAdapter.ActivitiesViewHolder> { +public class CardActivityAdapter extends RecyclerView.Adapter<CardActivityAdapter.ActivitiesViewHolder> { @NonNull private List<Activity> activities; private Context context; - public ActivityAdapter(@NonNull List<Activity> activities) { + public CardActivityAdapter(@NonNull List<Activity> activities) { super(); this.activities = activities; } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardActivityFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardActivityFragment.java index c2bcad532..9c4aaf5c2 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardActivityFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardActivityFragment.java @@ -70,7 +70,7 @@ public class CardActivityFragment extends Fragment { } else { binding.emptyContentView.setVisibility(View.GONE); binding.activitiesList.setVisibility(View.VISIBLE); - RecyclerView.Adapter adapter = new ActivityAdapter(activities); + RecyclerView.Adapter adapter = new CardActivityAdapter(activities); binding.activitiesList.setAdapter(adapter); } })); 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/CardAttachmentAdapter.java index 7cd953787..7b07abbfd 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/CardAttachmentAdapter.java @@ -8,7 +8,6 @@ import android.content.Intent; import android.net.Uri; import android.os.Build; import android.text.format.Formatter; -import android.transition.Explode; import android.util.Log; import android.view.LayoutInflater; import android.view.MenuInflater; @@ -42,7 +41,7 @@ import static it.niedermann.nextcloud.deck.ui.AttachmentsActivity.BUNDLE_KEY_CUR import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_ACCOUNT_ID; import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_LOCAL_ID; -public class AttachmentAdapter extends RecyclerView.Adapter<AttachmentAdapter.AttachmentViewHolder> { +public class CardAttachmentAdapter extends RecyclerView.Adapter<CardAttachmentAdapter.AttachmentViewHolder> { public static final int VIEW_TYPE_DEFAULT = 2; public static final int VIEW_TYPE_IMAGE = 1; @@ -57,7 +56,7 @@ public class AttachmentAdapter extends RecyclerView.Adapter<AttachmentAdapter.At private AttachmentDeletedListener attachmentDeletedListener; private Context context; - AttachmentAdapter(@NonNull MenuInflater menuInflator, @NonNull AttachmentDeletedListener attachmentDeletedListener, @NonNull Account account, long cardLocalId, long cardRemoteId, @NonNull List<Attachment> attachments) { + CardAttachmentAdapter(@NonNull MenuInflater menuInflator, @NonNull AttachmentDeletedListener attachmentDeletedListener, @NonNull Account account, long cardLocalId, long cardRemoteId, @NonNull List<Attachment> attachments) { super(); this.menuInflator = menuInflator; this.attachmentDeletedListener = attachmentDeletedListener; @@ -126,8 +125,9 @@ public class AttachmentAdapter extends RecyclerView.Adapter<AttachmentAdapter.At intent.putExtra(BUNDLE_KEY_CURRENT_ATTACHMENT_LOCAL_ID, attachment.getLocalId()); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && context instanceof Activity) { - ((Activity) context).getWindow().setSharedElementEnterTransition(new Explode()); - context.startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation((Activity) context, holder.getPreview(), context.getString(R.string.transition_attachment_preview)).toBundle()); + String transitionName = context.getString(R.string.transition_attachment_preview, String.valueOf(attachment.getLocalId())); + holder.getPreview().setTransitionName(transitionName); + context.startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation((Activity) context, holder.getPreview(), transitionName).toBundle()); } else { context.startActivity(intent); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAttachmentsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAttachmentsFragment.java index 33e5a6306..875ecb281 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAttachmentsFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAttachmentsFragment.java @@ -31,7 +31,7 @@ import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_BOARD_ import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_CAN_EDIT; import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_LOCAL_ID; -public class CardAttachmentsFragment extends Fragment implements AttachmentAdapter.AttachmentDeletedListener { +public class CardAttachmentsFragment extends Fragment implements CardAttachmentAdapter.AttachmentDeletedListener { private static final String TAG = CardAttachmentsFragment.class.getCanonicalName(); private FragmentCardEditTabAttachmentsBinding binding; @@ -66,7 +66,7 @@ public class CardAttachmentsFragment extends Fragment implements AttachmentAdapt this.binding.emptyContentView.setVisibility(View.GONE); this.binding.attachmentsList.setVisibility(View.VISIBLE); syncManager.readAccount(accountId).observe(getViewLifecycleOwner(), (Account account) -> { - RecyclerView.Adapter adapter = new AttachmentAdapter( + RecyclerView.Adapter adapter = new CardAttachmentAdapter( requireActivity().getMenuInflater(), this, account, @@ -74,15 +74,25 @@ public class CardAttachmentsFragment extends Fragment implements AttachmentAdapt fullCard.getCard().getId(), fullCard.getAttachments()); binding.attachmentsList.setAdapter(adapter); + + // TODO + // https://android-developers.googleblog.com/2018/02/continuous-shared-element-transitions.html?m=1 + // https://github.com/android/animation-samples/blob/master/GridToPager/app/src/main/java/com/google/samples/gridtopager/fragment/ImagePagerFragment.java +// setExitSharedElementCallback(new SharedElementCallback() { +// @Override +// public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) { +// Log.v("SHARED", "names" + names); +// } +// }); GridLayoutManager glm = new GridLayoutManager(getActivity(), 3); glm.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { switch (adapter.getItemViewType(position)) { - case AttachmentAdapter.VIEW_TYPE_IMAGE: + case CardAttachmentAdapter.VIEW_TYPE_IMAGE: return 1; - case AttachmentAdapter.VIEW_TYPE_DEFAULT: + case CardAttachmentAdapter.VIEW_TYPE_DEFAULT: return 3; default: return 1; @@ -94,7 +104,7 @@ public class CardAttachmentsFragment extends Fragment implements AttachmentAdapt } }); - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT && canEdit) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && canEdit) { binding.fab.setOnClickListener(v -> { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, |