diff options
author | Neil Seligmann <git@neilseligmann.com> | 2022-01-06 22:54:53 +0300 |
---|---|---|
committer | Niedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com> | 2022-01-10 11:49:14 +0300 |
commit | a38c176c77245c1de108e300bceba331c95d2a0e (patch) | |
tree | 2ee694230b33495af1d992c377b9e01f8818f4db /app/src | |
parent | 1dcabdb46ca28ff8b5a6035ecbcf3f4882c63c99 (diff) |
feat: better attachment ImageView
Diffstat (limited to 'app/src')
5 files changed, 100 insertions, 3 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentViewHolder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentViewHolder.java index bfc21b787..f633cd534 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentViewHolder.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentViewHolder.java @@ -2,6 +2,7 @@ package it.niedermann.nextcloud.deck.ui.attachments; import android.content.Context; import android.graphics.drawable.Drawable; +import android.view.MotionEvent; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -14,6 +15,7 @@ import com.bumptech.glide.load.engine.GlideException; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; +import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.ItemAttachmentBinding; import it.niedermann.nextcloud.deck.model.Account; diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentsActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentsActivity.java index b65b727aa..211dc4bb0 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentsActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/attachments/AttachmentsActivity.java @@ -12,6 +12,7 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.SharedElementCallback; import androidx.core.content.ContextCompat; import androidx.core.graphics.drawable.DrawableCompat; +import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.RecyclerView; import androidx.viewpager2.widget.ViewPager2; @@ -25,10 +26,11 @@ import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.ActivityAttachmentsBinding; import it.niedermann.nextcloud.deck.model.Account; import it.niedermann.nextcloud.deck.model.Attachment; +import it.niedermann.nextcloud.deck.ui.card.attachments.AttachmentImageZoomListener; import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler; import it.niedermann.nextcloud.deck.util.MimeTypeUtil; -public class AttachmentsActivity extends AppCompatActivity { +public class AttachmentsActivity extends AppCompatActivity implements AttachmentImageZoomListener { private static final String BUNDLE_KEY_ACCOUNT = "account"; private static final String BUNDLE_KEY_CARD_ID = "cardId"; @@ -149,4 +151,9 @@ public class AttachmentsActivity extends AppCompatActivity { .putExtra(BUNDLE_KEY_CURRENT_ATTACHMENT_LOCAL_ID, attachmentLocalId) .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } + + @Override + public void onAbleToChangePage(boolean canChange) { + binding.viewPager.setUserInputEnabled(canChange); + } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentImageView.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentImageView.java new file mode 100644 index 000000000..039f92dae --- /dev/null +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentImageView.java @@ -0,0 +1,63 @@ +package it.niedermann.nextcloud.deck.ui.card.attachments; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.GestureDetector; +import android.view.MotionEvent; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.otaliastudios.zoom.ZoomImageView; + +import it.niedermann.nextcloud.deck.DeckLog; + +public class AttachmentImageView extends ZoomImageView { + public AttachmentImageZoomListener zoomListener; + GestureDetector gestureDetector; + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + + gestureDetector = new GestureDetector(getContext(), new GestureListener()); + + if (getContext() instanceof AttachmentImageZoomListener) { + this.zoomListener = (AttachmentImageZoomListener) getContext(); + } else { + throw new ClassCastException("Caller must implement " + AttachmentImageZoomListener.class.getCanonicalName()); + } + } + + public AttachmentImageView(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + @Override + public boolean onTouchEvent(@NonNull MotionEvent ev) { + int pointerCount = ev.getPointerCount(); + + boolean canChange = pointerCount == 1 && getZoom() <= 1; + zoomListener.onAbleToChangePage(canChange); + + gestureDetector.onTouchEvent(ev); + + return super.onTouchEvent(ev); + } + + private class GestureListener extends GestureDetector.SimpleOnGestureListener { + + @Override + public boolean onDown(MotionEvent e) { + return true; + } + + @Override + public boolean onDoubleTap(MotionEvent e) { + float zoomLevel = 2; + zoomTo(getZoom() < zoomLevel ? zoomLevel : 1, true); + + return true; + } + } +} diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentImageZoomListener.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentImageZoomListener.java new file mode 100644 index 000000000..3503d9763 --- /dev/null +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/AttachmentImageZoomListener.java @@ -0,0 +1,5 @@ +package it.niedermann.nextcloud.deck.ui.card.attachments; + +public interface AttachmentImageZoomListener { + void onAbleToChangePage(boolean canChange); +} diff --git a/app/src/main/res/layout/item_attachment.xml b/app/src/main/res/layout/item_attachment.xml index 08a31cf7d..9542bef9a 100644 --- a/app/src/main/res/layout/item_attachment.xml +++ b/app/src/main/res/layout/item_attachment.xml @@ -1,7 +1,27 @@ <?xml version="1.0" encoding="utf-8"?> -<androidx.appcompat.widget.AppCompatImageView xmlns:android="http://schemas.android.com/apk/res/android" +<it.niedermann.nextcloud.deck.ui.card.attachments.AttachmentImageView + xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/preview" android:layout_width="match_parent" android:layout_height="match_parent" - app:srcCompat="@drawable/ic_image_grey600_24dp" />
\ No newline at end of file + android:scrollbars="none" + app:transformation="centerInside" + app:transformationGravity="auto" + app:alignment="center" + app:overScrollHorizontal="false" + app:overScrollVertical="false" + app:overPinchable="true" + app:horizontalPanEnabled="true" + app:verticalPanEnabled="true" + app:zoomEnabled="true" + app:flingEnabled="false" + app:scrollEnabled="true" + app:oneFingerScrollEnabled="true" + app:twoFingersScrollEnabled="false" + app:threeFingersScrollEnabled="false" + app:minZoom="0.7" + app:minZoomType="zoom" + app:maxZoom="5" + app:maxZoomType="zoom" + app:animationDuration="280" /> |