summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/PinchThresholdManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher3/PinchThresholdManager.java')
-rw-r--r--src/com/android/launcher3/PinchThresholdManager.java77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/com/android/launcher3/PinchThresholdManager.java b/src/com/android/launcher3/PinchThresholdManager.java
new file mode 100644
index 000000000..d79a63174
--- /dev/null
+++ b/src/com/android/launcher3/PinchThresholdManager.java
@@ -0,0 +1,77 @@
+package com.android.launcher3;
+
+/**
+ * Keeps track of when thresholds are passed during a pinch gesture,
+ * used to inform {@link PinchAnimationManager} throughout.
+ *
+ * @see PinchToOverviewListener
+ * @see PinchAnimationManager
+ */
+public class PinchThresholdManager {
+ public static final float THRESHOLD_ZERO = 0.0f;
+ public static final float THRESHOLD_ONE = 0.40f;
+ public static final float THRESHOLD_TWO = 0.70f;
+ public static final float THRESHOLD_THREE = 0.95f;
+
+ private Workspace mWorkspace;
+
+ private float mPassedThreshold = THRESHOLD_ZERO;
+
+ public PinchThresholdManager(Workspace workspace) {
+ mWorkspace = workspace;
+ }
+
+ /**
+ * Uses the pinch progress to determine whether a threshold has been passed,
+ * and asks the {@param animationManager} to animate if so.
+ * @param progress From 0 to 1, where 0 is overview and 1 is workspace.
+ * @param animationManager Animates the threshold change if one is passed.
+ * @return The last passed threshold, one of
+ * {@link PinchThresholdManager#THRESHOLD_ZERO},
+ * {@link PinchThresholdManager#THRESHOLD_ONE},
+ * {@link PinchThresholdManager#THRESHOLD_TWO}, or
+ * {@link PinchThresholdManager#THRESHOLD_THREE}
+ */
+ public float updateAndAnimatePassedThreshold(float progress,
+ PinchAnimationManager animationManager) {
+ if (!mWorkspace.isInOverviewMode()) {
+ // Invert the progress, because going from workspace to overview is 1 to 0.
+ progress = 1f - progress;
+ }
+
+ float previousPassedThreshold = mPassedThreshold;
+
+ if (progress < THRESHOLD_ONE) {
+ mPassedThreshold = THRESHOLD_ZERO;
+ } else if (progress < THRESHOLD_TWO) {
+ mPassedThreshold = THRESHOLD_ONE;
+ } else if (progress < THRESHOLD_THREE) {
+ mPassedThreshold = THRESHOLD_TWO;
+ } else {
+ mPassedThreshold = THRESHOLD_THREE;
+ }
+
+ if (mPassedThreshold != previousPassedThreshold) {
+ Workspace.State fromState = mWorkspace.isInOverviewMode() ? Workspace.State.OVERVIEW
+ : Workspace.State.NORMAL;
+ Workspace.State toState = mWorkspace.isInOverviewMode() ? Workspace.State.NORMAL
+ : Workspace.State.OVERVIEW;
+ float thresholdToAnimate = mPassedThreshold;
+ if (mPassedThreshold < previousPassedThreshold) {
+ // User reversed pinch, so heading back to the state that they started from.
+ toState = fromState;
+ thresholdToAnimate = previousPassedThreshold;
+ }
+ animationManager.animateThreshold(thresholdToAnimate, fromState, toState);
+ }
+ return mPassedThreshold;
+ }
+
+ public float getPassedThreshold() {
+ return mPassedThreshold;
+ }
+
+ public void reset() {
+ mPassedThreshold = THRESHOLD_ZERO;
+ }
+}