From 3f81d187b53e08b330d6e4359a0cc90172b72aad Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Wed, 15 Nov 2023 00:06:20 +0100 Subject: [PATCH] feat(GitHub): Add `Pinch to zoom` patch --- .../revanced/github/PinchToZoomGesture.java | 40 +++++++++++++++++++ .../app/revanced/github/PinchToZoomPatch.java | 19 +++++++++ 2 files changed, 59 insertions(+) create mode 100644 app/src/main/java/app/revanced/github/PinchToZoomGesture.java create mode 100644 app/src/main/java/app/revanced/github/PinchToZoomPatch.java diff --git a/app/src/main/java/app/revanced/github/PinchToZoomGesture.java b/app/src/main/java/app/revanced/github/PinchToZoomGesture.java new file mode 100644 index 00000000..3864fccb --- /dev/null +++ b/app/src/main/java/app/revanced/github/PinchToZoomGesture.java @@ -0,0 +1,40 @@ +package app.revanced.github; + +import android.content.Context; +import android.view.MotionEvent; +import android.view.ScaleGestureDetector; +import android.view.View; + +public class PinchToZoomGesture implements View.OnTouchListener, ScaleGestureDetector.OnScaleGestureListener { + private View view; + private final ScaleGestureDetector gestureScale; + private float scaleFactor = 1; + + public PinchToZoomGesture(Context c){ gestureScale = new ScaleGestureDetector(c, this); } + + @Override + public boolean onTouch(View view, MotionEvent event) { + this.view = view; + view.onTouchEvent(event); + return gestureScale.onTouchEvent(event); + } + + @Override + public boolean onScale(ScaleGestureDetector detector) { + scaleFactor *= detector.getScaleFactor(); + scaleFactor = (scaleFactor < 1 ? 1 : scaleFactor); // prevent our view from becoming too small // + scaleFactor = ((float)((int)(scaleFactor * 100))) / 100; // Change precision to help with jitter when user just rests their fingers // + view.setScaleX(scaleFactor); + view.setScaleY(scaleFactor); + return true; + } + + @Override + public boolean onScaleBegin(ScaleGestureDetector detector) { + return true; + } + + @Override + public void onScaleEnd(ScaleGestureDetector detector) { + } +} \ No newline at end of file diff --git a/app/src/main/java/app/revanced/github/PinchToZoomPatch.java b/app/src/main/java/app/revanced/github/PinchToZoomPatch.java new file mode 100644 index 00000000..03a05ecc --- /dev/null +++ b/app/src/main/java/app/revanced/github/PinchToZoomPatch.java @@ -0,0 +1,19 @@ +package app.revanced.github; + +import android.annotation.SuppressLint; +import android.util.Log; +import android.view.ViewGroup; + +public final class PinchToZoomPatch { + @SuppressLint("StaticFieldLeak") + private static ViewGroup recyclerView; + + public static void addPinchToZoomGesture(final ViewGroup codeViewRecycleView) { + if (recyclerView == codeViewRecycleView) return; + recyclerView = codeViewRecycleView; + + recyclerView.setOnTouchListener(new PinchToZoomGesture(recyclerView.getContext())); + + Log.d("revanced", "Adding pinch to zoom event handler to " + codeViewRecycleView); + } +} \ No newline at end of file