From 2175f1b1b7af80b7e6d45621cde417796adb4397 Mon Sep 17 00:00:00 2001 From: ziadb Date: Fri, 27 Jul 2018 11:51:34 -0400 Subject: [PATCH] SkAR Java: minor refactoring to TapHelper (now GestureHelper) Bug: skia: Change-Id: I1983c6cb1727e86fec91a0c9a5706f26070b1b49 Reviewed-on: https://skia-review.googlesource.com/144021 Reviewed-by: Mike Reed --- .../main/java/com/google/skar/PaintUtil.java | 2 ++ .../helloskar/app/CanvasARSurfaceView.java | 3 +- .../helloskar/app/FingerPainting.java | 7 ++--- .../examples/helloskar/app/HelloCanvasAR.java | 10 +++---- .../{TapHelper.java => GestureHelper.java} | 28 +++++++++++++------ 5 files changed, 29 insertions(+), 21 deletions(-) rename platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/helpers/{TapHelper.java => GestureHelper.java} (80%) diff --git a/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/PaintUtil.java b/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/PaintUtil.java index b9aaa01730..7665d365ba 100644 --- a/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/PaintUtil.java +++ b/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/PaintUtil.java @@ -35,9 +35,11 @@ public class PaintUtil { */ public static ColorFilter createLightCorrectionColorFilter(float[] colorCorr) { float[] colorCorrCopy = Arrays.copyOf(colorCorr, 4); + for (int i = 0; i < 3; i++) { colorCorrCopy[i] *= colorCorrCopy[3] / MIDDLE_GRAY_GAMMA; } + ColorMatrix m = new ColorMatrix(); m.setScale(colorCorrCopy[0], colorCorrCopy[1], colorCorrCopy[2], 1); return new ColorMatrixColorFilter(m); diff --git a/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/app/CanvasARSurfaceView.java b/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/app/CanvasARSurfaceView.java index 40c789d0a2..efe8acfa1d 100644 --- a/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/app/CanvasARSurfaceView.java +++ b/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/app/CanvasARSurfaceView.java @@ -57,6 +57,5 @@ public class CanvasARSurfaceView extends SurfaceView implements SurfaceHolder.Ca } @Override - public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { - } + public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {} } diff --git a/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/app/FingerPainting.java b/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/app/FingerPainting.java index e4aaf5784b..ac97dfbf77 100644 --- a/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/app/FingerPainting.java +++ b/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/app/FingerPainting.java @@ -19,17 +19,14 @@ package com.google.skar.examples.helloskar.app; import android.graphics.Color; import android.graphics.Path; import android.graphics.PointF; -import android.util.Log; -import com.google.skar.examples.helloskar.helpers.TapHelper; +import com.google.skar.examples.helloskar.helpers.GestureHelper; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.ArrayList; - public class FingerPainting { public static class BuiltPath { public Path path; @@ -87,7 +84,7 @@ public class FingerPainting { * @param holdTap ScrollEvent associated with the hit test that calls this function * @return true if point was computed and added. False otherwise. */ - public boolean computeNextPoint(float[] hitLocation, TapHelper.ScrollEvent holdTap) { + public boolean computeNextPoint(float[] hitLocation, GestureHelper.ScrollEvent holdTap) { if (isEmpty()) { // If finger painting is empty, then first point is origin. Model matrix // of the finger painting is the model matrix of the first point diff --git a/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/app/HelloCanvasAR.java b/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/app/HelloCanvasAR.java index d883c693a2..78791fae93 100644 --- a/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/app/HelloCanvasAR.java +++ b/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/app/HelloCanvasAR.java @@ -57,8 +57,8 @@ import com.google.ar.core.examples.java.helloskar.R; import com.google.skar.examples.helloskar.helpers.CameraPermissionHelper; import com.google.skar.examples.helloskar.helpers.DisplayRotationHelper; import com.google.skar.examples.helloskar.helpers.FullScreenHelper; +import com.google.skar.examples.helloskar.helpers.GestureHelper; import com.google.skar.examples.helloskar.helpers.SnackbarHelper; -import com.google.skar.examples.helloskar.helpers.TapHelper; import com.google.skar.examples.helloskar.rendering.BackgroundRenderer; import com.google.skar.examples.helloskar.rendering.DrawManager; @@ -105,7 +105,7 @@ public class HelloCanvasAR extends AppCompatActivity implements GLSurfaceView.Re private boolean installRequested; private final SnackbarHelper messageSnackbarHelper = new SnackbarHelper(); private DisplayRotationHelper displayRotationHelper; - private TapHelper tapHelper; + private GestureHelper tapHelper; // Temporary matrix allocated here to reduce number of allocations for each frame. private final float[] anchorMatrix = new float[16]; @@ -138,7 +138,7 @@ public class HelloCanvasAR extends AppCompatActivity implements GLSurfaceView.Re holder = arSurfaceView.getHolder(); // Set up tap listener. - tapHelper = new TapHelper(this); + tapHelper = new GestureHelper(this); glSurfaceView.setOnTouchListener(tapHelper); // Set up renderer. @@ -439,9 +439,9 @@ public class HelloCanvasAR extends AppCompatActivity implements GLSurfaceView.Re */ private void handleHoldTaps(Frame frame, Camera camera) { // Building finger painting - TapHelper.ScrollEvent holdTap = tapHelper.holdPoll(); + GestureHelper.ScrollEvent holdTap = tapHelper.holdPoll(); if (holdTap != null && camera.getTrackingState() == TrackingState.TRACKING) { - for (HitResult hit : frame.hitTest(holdTap.e)) { + for (HitResult hit : frame.hitTest(holdTap.event)) { // Check if any plane was hit, and if it was hit inside the plane polygon Trackable trackable = hit.getTrackable(); // Creates an anchor if a plane or an oriented point was hit. diff --git a/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/helpers/TapHelper.java b/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/helpers/GestureHelper.java similarity index 80% rename from platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/helpers/TapHelper.java rename to platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/helpers/GestureHelper.java index 6dcfd8fb13..2cd195fdb1 100644 --- a/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/helpers/TapHelper.java +++ b/platform_tools/android/apps/skar_java/src/main/java/com/google/skar/examples/helloskar/helpers/GestureHelper.java @@ -25,32 +25,35 @@ import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; /** - * Helper to detect taps using Android GestureDetector, and pass the taps between UI thread and + * Helper to detect gestures using Android GestureDetector, and pass the taps between UI thread and * render thread. */ -public final class TapHelper implements OnTouchListener { + +public final class GestureHelper implements OnTouchListener { private final GestureDetector gestureDetector; private final BlockingQueue queuedSingleTaps = new ArrayBlockingQueue<>(16); private final BlockingQueue queuedFingerHold = new ArrayBlockingQueue<>(16); private boolean isScrolling = false; private boolean previousScroll = true; + // Struct holding a MotionEvent obtained from onScroll() callbacks, and a boolean evaluating to + // true if the MotionEven was the start of the scrolling motion public static class ScrollEvent { - public MotionEvent e; + public MotionEvent event; public boolean isStartOfScroll; public ScrollEvent(MotionEvent e, boolean isStartOfScroll) { - this.e = e; + this.event = e; this.isStartOfScroll = isStartOfScroll; } } /** - * Creates the tap helper. + * Creates the gesture helper. * * @param context the application's context. */ - public TapHelper(Context context) { + public GestureHelper(Context context) { gestureDetector = new GestureDetector( context, @@ -63,13 +66,15 @@ public final class TapHelper implements OnTouchListener { } @Override - public boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { + public boolean onScroll (MotionEvent e1, MotionEvent e2, + float distanceX, float distanceY) { // Queue motion events when scrolling if (e2.getPointerCount() == 1 && e1.getPointerCount() == 1) { previousScroll = isScrolling; isScrolling = true; - queuedFingerHold.offer(new ScrollEvent(e2, isStartedScrolling())); + queuedFingerHold.offer(new ScrollEvent(e2, + isStartedScrolling())); return true; } @@ -93,13 +98,18 @@ public final class TapHelper implements OnTouchListener { return queuedSingleTaps.poll(); } + /** + * Polls for a scrolling motion. + * + * @return if a scrolling event was queued, a ScrollEvent for the gesture. Otherwise null + */ public ScrollEvent holdPoll() { return queuedFingerHold.poll(); } @Override public boolean onTouch(View view, MotionEvent motionEvent) { boolean val = gestureDetector.onTouchEvent(motionEvent); - // If finger is up + is scrolling: don't scroll anymore, and empty Touch Hold queue + // If finger is up + is scrolling: don't scroll anymore, and empty touch hold queue if (motionEvent.getAction() == MotionEvent.ACTION_UP && isScrolling) { previousScroll = true; isScrolling = false;