1743ac4691
Maybe we should write a script that checks that this is present in all our files? I didn't do a thorough check, but wouldn't be surprised if others were missing. Change-Id: I4777ff618f952b9b11fde60ebc8d897cf6449032
94 lines
3.5 KiB
Java
94 lines
3.5 KiB
Java
/*
|
|
* 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;
|
|
|
|
/**
|
|
* 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;
|
|
}
|
|
}
|