summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/util
diff options
context:
space:
mode:
authorHyunyoung Song <hyunyoungs@google.com>2016-09-15 10:48:25 -0700
committerHyunyoung Song <hyunyoungs@google.com>2016-09-15 10:48:25 -0700
commit46133612b4c864a4e4da45a9de3a343e3955c321 (patch)
tree81a660c0736f3530ff719f7e3875f34438f82624 /src/com/android/launcher3/util
parent6f28e71e94aed69c71415ac5a5334fd0bb6c9ce5 (diff)
downloadandroid_packages_apps_Trebuchet-46133612b4c864a4e4da45a9de3a343e3955c321.tar.gz
android_packages_apps_Trebuchet-46133612b4c864a4e4da45a9de3a343e3955c321.tar.bz2
android_packages_apps_Trebuchet-46133612b4c864a4e4da45a9de3a343e3955c321.zip
Pull down should start search.
b/31458165 Change-Id: If4821e3d89a05a00551af6a5209ebc1693a1389b
Diffstat (limited to 'src/com/android/launcher3/util')
-rw-r--r--src/com/android/launcher3/util/VerticalFlingDetector.java85
1 files changed, 85 insertions, 0 deletions
diff --git a/src/com/android/launcher3/util/VerticalFlingDetector.java b/src/com/android/launcher3/util/VerticalFlingDetector.java
new file mode 100644
index 000000000..5f2b3f3ac
--- /dev/null
+++ b/src/com/android/launcher3/util/VerticalFlingDetector.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.launcher3.util;
+
+import android.content.Context;
+import android.view.MotionEvent;
+import android.view.VelocityTracker;
+import android.view.View;
+import android.view.ViewConfiguration;
+
+public class VerticalFlingDetector implements View.OnTouchListener {
+
+ private static final float CUSTOM_SLOP_MULTIPLIER = 2.2f;
+ private static final int SEC_IN_MILLIS = 1000;
+
+ private VelocityTracker mVelocityTracker;
+ private float mMinimumFlingVelocity;
+ private float mMaximumFlingVelocity;
+ private float mDownX, mDownY;
+ private boolean mShouldCheckFling;
+ private double mCustomTouchSlop;
+
+ public VerticalFlingDetector(Context context) {
+ ViewConfiguration vc = ViewConfiguration.get(context);
+ mMinimumFlingVelocity = vc.getScaledMinimumFlingVelocity();
+ mMaximumFlingVelocity = vc.getScaledMaximumFlingVelocity();
+ mCustomTouchSlop = CUSTOM_SLOP_MULTIPLIER * vc.getScaledTouchSlop();
+ }
+
+ @Override
+ public boolean onTouch(View v, MotionEvent ev) {
+ if (mVelocityTracker == null) {
+ mVelocityTracker = VelocityTracker.obtain();
+ }
+ mVelocityTracker.addMovement(ev);
+ switch (ev.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ mDownX = ev.getX();
+ mDownY = ev.getY();
+ mShouldCheckFling = false;
+ break;
+ case MotionEvent.ACTION_MOVE:
+ if (mShouldCheckFling) {
+ break;
+ }
+ if (Math.abs(ev.getY() - mDownY) > mCustomTouchSlop &&
+ Math.abs(ev.getY() - mDownY) > Math.abs(ev.getX() - mDownX)) {
+ mShouldCheckFling = true;
+ }
+ break;
+ case MotionEvent.ACTION_UP:
+ if (mShouldCheckFling) {
+ mVelocityTracker.computeCurrentVelocity(SEC_IN_MILLIS, mMaximumFlingVelocity);
+ // only when fling is detected in down direction
+ if (mVelocityTracker.getYVelocity() > mMinimumFlingVelocity) {
+ cleanUp();
+ return true;
+ }
+ }
+ // fall through.
+ case MotionEvent.ACTION_CANCEL:
+ cleanUp();
+ }
+ return false;
+ }
+
+ private void cleanUp() {
+ mVelocityTracker.recycle();
+ mVelocityTracker = null;
+ }
+}