summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/CropView.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher3/CropView.java')
-rw-r--r--src/com/android/launcher3/CropView.java41
1 files changed, 38 insertions, 3 deletions
diff --git a/src/com/android/launcher3/CropView.java b/src/com/android/launcher3/CropView.java
index 25ab5cdad..6d29be2af 100644
--- a/src/com/android/launcher3/CropView.java
+++ b/src/com/android/launcher3/CropView.java
@@ -22,6 +22,7 @@ import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
+import android.view.ViewConfiguration;
import android.view.ScaleGestureDetector.OnScaleGestureListener;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
@@ -32,10 +33,18 @@ import com.android.photos.views.TiledImageView;
public class CropView extends TiledImageView implements OnScaleGestureListener {
private ScaleGestureDetector mScaleGestureDetector;
+ private long mTouchDownTime;
+ private float mFirstX, mFirstY;
private float mLastX, mLastY;
private float mMinScale;
private boolean mTouchEnabled = true;
private RectF mTempEdges = new RectF();
+ TouchCallback mTouchCallback;
+
+ public interface TouchCallback {
+ void onTouchDown();
+ void onTap();
+ }
public CropView(Context context) {
this(context, null);
@@ -152,11 +161,12 @@ public class CropView extends TiledImageView implements OnScaleGestureListener {
mTouchEnabled = enabled;
}
+ public void setTouchCallback(TouchCallback cb) {
+ mTouchCallback = cb;
+ }
+
@Override
public boolean onTouchEvent(MotionEvent event) {
- if (!mTouchEnabled) {
- return true;
- }
int action = event.getActionMasked();
final boolean pointerUp = action == MotionEvent.ACTION_POINTER_UP;
final int skipIndex = pointerUp ? event.getActionIndex() : -1;
@@ -174,6 +184,31 @@ public class CropView extends TiledImageView implements OnScaleGestureListener {
float x = sumX / div;
float y = sumY / div;
+ if (action == MotionEvent.ACTION_DOWN) {
+ mFirstX = x;
+ mFirstY = y;
+ mTouchDownTime = System.currentTimeMillis();
+ if (mTouchCallback != null) {
+ mTouchCallback.onTouchDown();
+ }
+ } else if (action == MotionEvent.ACTION_UP) {
+ ViewConfiguration config = ViewConfiguration.get(getContext());
+
+ float squaredDist = (mFirstX - x) * (mFirstX - x) + (mFirstY - y) * (mFirstY - y);
+ float slop = config.getScaledTouchSlop() * config.getScaledTouchSlop();
+ long now = System.currentTimeMillis();
+ // only do this if it's a small movement
+ if (mTouchCallback != null &&
+ squaredDist < slop &&
+ now < mTouchDownTime + ViewConfiguration.getTapTimeout()) {
+ mTouchCallback.onTap();
+ }
+ }
+
+ if (!mTouchEnabled) {
+ return true;
+ }
+
synchronized (mLock) {
mScaleGestureDetector.onTouchEvent(event);
switch (action) {