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