From fc5ea05e48495a21a7ef2043a15ea4c3354b9dec Mon Sep 17 00:00:00 2001 From: Andrew Chen Date: Tue, 3 Jan 2012 20:32:05 -0800 Subject: [PATCH] Issue 3875: Add more debugging lines to figure out what might be wrong with the new swipe algorithm. Fix some variable names. --- src/com/fsck/k9/activity/K9Activity.java | 42 ++++++++++++++++++++---- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/src/com/fsck/k9/activity/K9Activity.java b/src/com/fsck/k9/activity/K9Activity.java index 3bb76c480..1f45d5fb1 100644 --- a/src/com/fsck/k9/activity/K9Activity.java +++ b/src/com/fsck/k9/activity/K9Activity.java @@ -7,6 +7,7 @@ import android.app.Activity; import android.content.Context; import android.content.res.Configuration; import android.os.Bundle; +import android.util.Log; import android.view.GestureDetector; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.MotionEvent; @@ -164,21 +165,48 @@ public class K9Activity extends Activity { public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // Do fling-detection if gestures are force-enabled or we have system-wide gestures enabled. if (gesturesEnabled || K9.gesturesEnabled()) { - // Convert the dips to pixels + // Calculate the minimum distance required for this to count as a swipe. + // Convert the constant dips to pixels. final float mGestureScale = getResources().getDisplayMetrics().density; - int min_distance = (int)(SWIPE_MIN_DISTANCE_DIP * mGestureScale + 0.5f); - int min_velocity = (int)(SWIPE_THRESHOLD_VELOCITY_DIP * mGestureScale + 0.5f); - int max_off_path = (int)(SWIPE_MAX_OFF_PATH_DIP * mGestureScale + 0.5f); + final int minDistance = (int)(SWIPE_MIN_DISTANCE_DIP * mGestureScale + 0.5f); + final int minVelocity = (int)(SWIPE_THRESHOLD_VELOCITY_DIP * mGestureScale + 0.5f); + final int maxOffPath = (int)(SWIPE_MAX_OFF_PATH_DIP * mGestureScale + 0.5f); + + // Calculate how much was actually swiped. + final float deltaX = e2.getX() - e1.getX(); + final float deltaY = e2.getY() - e1.getY(); + final boolean movedAcross = (Math.abs(deltaX) > Math.abs(deltaY * 4)); + final boolean steadyHand = (Math.abs(deltaX / deltaY) > 2); + if(K9.DEBUG) { + Log.d(K9.LOG_TAG, "Old swipe algorithm: movedAcross=" + movedAcross + " steadyHand=" + steadyHand + " result=" + (movedAcross && steadyHand)); + Log.d(K9.LOG_TAG, String.format("New swipe algorithm: deltaX=%.2f deltaY=%.2f velocity=%.2f (min=%d)", deltaX, deltaY, velocityX, minVelocity)); + } try { - if (Math.abs(e1.getY() - e2.getY()) > max_off_path) + if (Math.abs(deltaY) > maxOffPath) { + if(K9.DEBUG) + Log.d(K9.LOG_TAG, "New swipe algorithm: Swipe too far off horizontal path."); return false; + } + if(Math.abs(velocityX) < minVelocity) { + if(K9.DEBUG) + Log.d(K9.LOG_TAG, "New swipe algorithm: Swipe too slow."); + return false; + } // right to left swipe - if (e1.getX() - e2.getX() > min_distance && Math.abs(velocityX) > min_velocity) { + if (deltaX < minDistance) { onSwipeRightToLeft(e1, e2); - } else if (e2.getX() - e1.getX() > min_distance && Math.abs(velocityX) > min_velocity) { + if(K9.DEBUG) + Log.d(K9.LOG_TAG, "New swipe algorithm: Right to Left swipe OK."); + } else if (deltaX > minDistance) { onSwipeLeftToRight(e1, e2); + if(K9.DEBUG) + Log.d(K9.LOG_TAG, "New swipe algorithm: Left to Right swipe OK."); + } else { + if(K9.DEBUG) + Log.d(K9.LOG_TAG, "New swipe algorithm: Swipe did not meet minimum distance requirements."); + return false; } } catch (Exception e) { // nothing