summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java
diff options
context:
space:
mode:
authorTony Wickham <twickham@google.com>2018-04-19 11:39:34 -0700
committerTony Wickham <twickham@google.com>2018-05-09 12:33:46 -0700
commit6becf7c07d4714369d40dcd575a99855894c0f8a (patch)
tree3c00366778c8ff372719ec58769648e4bb0a3a36 /src/com/android/launcher3/WorkspaceStateTransitionAnimation.java
parent639b07178f6412cd931818c7787c5f6effd42317 (diff)
downloadandroid_packages_apps_Trebuchet-6becf7c07d4714369d40dcd575a99855894c0f8a.tar.gz
android_packages_apps_Trebuchet-6becf7c07d4714369d40dcd575a99855894c0f8a.tar.bz2
android_packages_apps_Trebuchet-6becf7c07d4714369d40dcd575a99855894c0f8a.zip
Add atomic recents animation while swiping up
State handlers can now specify atomic and non-atomic components of their animations to states, which can be specified when creating a new animation. There is now one atomic animation, when going from NORMAL to OVERVIEW (and in reverse): - RecentsViewStateController's animation (scale/alpha) is all atomic - WorkspaceStateTransitionAnimation has atomic and non-atomic: - Hotseat and workspace alpha is atomic, as is workspace scale - Everything else (scrim, translation, qsb and drag handle alpha) is non-atomic - All apps progress is non-atomic Also simplified dragging through overview; no longer pulls against you, so we use an OvershootInterpolator when flinging instead of our custom interpolator for the spring effect. Bug: 76449024 Bug: 78089840 Change-Id: Iafac84d0c2b99ee9cf9dd5b30e2218286713b449
Diffstat (limited to 'src/com/android/launcher3/WorkspaceStateTransitionAnimation.java')
-rw-r--r--src/com/android/launcher3/WorkspaceStateTransitionAnimation.java58
1 files changed, 38 insertions, 20 deletions
diff --git a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java
index 8d3d459cc..55968db02 100644
--- a/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java
+++ b/src/com/android/launcher3/WorkspaceStateTransitionAnimation.java
@@ -24,6 +24,7 @@ import static com.android.launcher3.LauncherState.HOTSEAT_SEARCH_BOX;
import static com.android.launcher3.anim.PropertySetter.NO_ANIM_PROPERTY_SETTER;
import android.view.View;
+import android.view.animation.Interpolator;
import com.android.launcher3.LauncherState.PageAlphaProvider;
import com.android.launcher3.LauncherStateManager.AnimationConfig;
@@ -48,12 +49,12 @@ public class WorkspaceStateTransitionAnimation {
}
public void setState(LauncherState toState) {
- setWorkspaceProperty(toState, NO_ANIM_PROPERTY_SETTER);
+ setWorkspaceProperty(toState, NO_ANIM_PROPERTY_SETTER, new AnimationConfig());
}
public void setStateWithAnimation(LauncherState toState, AnimatorSetBuilder builder,
AnimationConfig config) {
- setWorkspaceProperty(toState, config.getPropertySetter(builder));
+ setWorkspaceProperty(toState, config.getPropertySetter(builder), config);
}
public float getFinalScale() {
@@ -63,28 +64,40 @@ public class WorkspaceStateTransitionAnimation {
/**
* Starts a transition animation for the workspace.
*/
- private void setWorkspaceProperty(LauncherState state, PropertySetter propertySetter) {
+ private void setWorkspaceProperty(LauncherState state, PropertySetter propertySetter,
+ AnimationConfig config) {
float[] scaleAndTranslation = state.getWorkspaceScaleAndTranslation(mLauncher);
mNewScale = scaleAndTranslation[0];
PageAlphaProvider pageAlphaProvider = state.getWorkspacePageAlphaProvider(mLauncher);
final int childCount = mWorkspace.getChildCount();
for (int i = 0; i < childCount; i++) {
applyChildState(state, (CellLayout) mWorkspace.getChildAt(i), i, pageAlphaProvider,
- propertySetter);
+ propertySetter, config);
}
- propertySetter.setFloat(mWorkspace, SCALE_PROPERTY, mNewScale, Interpolators.ZOOM_OUT);
- propertySetter.setFloat(mWorkspace, View.TRANSLATION_X,
- scaleAndTranslation[1], Interpolators.ZOOM_OUT);
- propertySetter.setFloat(mWorkspace, View.TRANSLATION_Y,
- scaleAndTranslation[2], Interpolators.ZOOM_OUT);
int elements = state.getVisibleElements(mLauncher);
- float hotseatIconsAlpha = (elements & HOTSEAT_ICONS) != 0 ? 1 : 0;
- propertySetter.setViewAlpha(mLauncher.getHotseat().getLayout(), hotseatIconsAlpha,
- pageAlphaProvider.interpolator);
- propertySetter.setViewAlpha(mLauncher.getWorkspace().getPageIndicator(),
- hotseatIconsAlpha, pageAlphaProvider.interpolator);
+ boolean playAtomicComponent = config.playAtomicComponent();
+ if (playAtomicComponent) {
+ propertySetter.setFloat(mWorkspace, SCALE_PROPERTY, mNewScale, Interpolators.ZOOM_OUT);
+ float hotseatIconsAlpha = (elements & HOTSEAT_ICONS) != 0 ? 1 : 0;
+ propertySetter.setViewAlpha(mLauncher.getHotseat().getLayout(), hotseatIconsAlpha,
+ pageAlphaProvider.interpolator);
+ propertySetter.setViewAlpha(mLauncher.getWorkspace().getPageIndicator(),
+ hotseatIconsAlpha, pageAlphaProvider.interpolator);
+ }
+
+ if (!config.playNonAtomicComponent()) {
+ // Only the alpha and scale, handled above, are included in the atomic animation.
+ return;
+ }
+
+ Interpolator translationInterpolator = !playAtomicComponent ? Interpolators.LINEAR
+ : Interpolators.ZOOM_OUT;
+ propertySetter.setFloat(mWorkspace, View.TRANSLATION_X,
+ scaleAndTranslation[1], translationInterpolator);
+ propertySetter.setFloat(mWorkspace, View.TRANSLATION_Y,
+ scaleAndTranslation[2], translationInterpolator);
propertySetter.setViewAlpha(mLauncher.getHotseatSearchBox(),
(elements & HOTSEAT_SEARCH_BOX) != 0 ? 1 : 0,
@@ -101,17 +114,22 @@ public class WorkspaceStateTransitionAnimation {
public void applyChildState(LauncherState state, CellLayout cl, int childIndex) {
applyChildState(state, cl, childIndex, state.getWorkspacePageAlphaProvider(mLauncher),
- NO_ANIM_PROPERTY_SETTER);
+ NO_ANIM_PROPERTY_SETTER, new AnimationConfig());
}
private void applyChildState(LauncherState state, CellLayout cl, int childIndex,
- PageAlphaProvider pageAlphaProvider, PropertySetter propertySetter) {
+ PageAlphaProvider pageAlphaProvider, PropertySetter propertySetter,
+ AnimationConfig config) {
float pageAlpha = pageAlphaProvider.getPageAlpha(childIndex);
int drawableAlpha = Math.round(pageAlpha * (state.hasWorkspacePageBackground ? 255 : 0));
- propertySetter.setInt(cl.getScrimBackground(),
- DRAWABLE_ALPHA, drawableAlpha, Interpolators.ZOOM_OUT);
- propertySetter.setFloat(cl.getShortcutsAndWidgets(), View.ALPHA,
- pageAlpha, pageAlphaProvider.interpolator);
+ if (config.playNonAtomicComponent()) {
+ propertySetter.setInt(cl.getScrimBackground(),
+ DRAWABLE_ALPHA, drawableAlpha, Interpolators.ZOOM_OUT);
+ }
+ if (config.playAtomicComponent()) {
+ propertySetter.setFloat(cl.getShortcutsAndWidgets(), View.ALPHA,
+ pageAlpha, pageAlphaProvider.interpolator);
+ }
}
} \ No newline at end of file