diff options
5 files changed, 41 insertions, 8 deletions
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/FlingAndHoldTouchController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/FlingAndHoldTouchController.java index a41362f45..a9c8f0dfe 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/FlingAndHoldTouchController.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/FlingAndHoldTouchController.java @@ -46,7 +46,7 @@ public class FlingAndHoldTouchController extends PortraitStatesTouchController { super.onDragStart(start); - if (mStartState == NORMAL) { + if (handlingOverviewAnim()) { mMotionPauseDetector.setOnMotionPauseListener(isPaused -> { RecentsView recentsView = mLauncher.getOverviewPanel(); recentsView.setOverviewStateEnabled(isPaused); @@ -55,6 +55,14 @@ public class FlingAndHoldTouchController extends PortraitStatesTouchController { } } + /** + * @return Whether we are handling the overview animation, rather than + * having it as part of the existing animation to the target state. + */ + private boolean handlingOverviewAnim() { + return mStartState == NORMAL; + } + @Override public boolean onDrag(float displacement) { mMotionPauseDetector.addPosition(displacement, 0); @@ -63,7 +71,7 @@ public class FlingAndHoldTouchController extends PortraitStatesTouchController { @Override public void onDragEnd(float velocity, boolean fling) { - if (mMotionPauseDetector.isPaused() && mStartState == NORMAL) { + if (mMotionPauseDetector.isPaused() && handlingOverviewAnim()) { float range = getShiftRange(); long maxAccuracy = (long) (2 * range); @@ -93,4 +101,13 @@ public class FlingAndHoldTouchController extends PortraitStatesTouchController { } mMotionPauseDetector.clear(); } + + @Override + protected void updateAnimatorBuilderOnReinit(AnimatorSetBuilder builder) { + if (handlingOverviewAnim()) { + // We don't want the state transition to all apps to animate overview, + // as that will cause a jump after our atomic animation. + builder.addFlag(AnimatorSetBuilder.FLAG_DONT_ANIMATE_OVERVIEW); + } + } } diff --git a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java index e74d84dc2..50e59af49 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/BaseRecentsViewStateController.java @@ -19,6 +19,7 @@ package com.android.launcher3.uioverrides; import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_FADE; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_SCALE; +import static com.android.launcher3.anim.AnimatorSetBuilder.FLAG_DONT_ANIMATE_OVERVIEW; import static com.android.launcher3.anim.Interpolators.AGGRESSIVE_EASE_IN_OUT; import static com.android.launcher3.anim.Interpolators.LINEAR; @@ -66,6 +67,9 @@ public abstract class BaseRecentsViewStateController<T extends View> // The entire recents animation is played atomically. return; } + if (builder.hasFlag(FLAG_DONT_ANIMATE_OVERVIEW)) { + return; + } setStateWithAnimationInternal(toState, builder, config); } diff --git a/quickstep/src/com/android/launcher3/uioverrides/PortraitStatesTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/PortraitStatesTouchController.java index d20ffbb11..62e525c49 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/PortraitStatesTouchController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/PortraitStatesTouchController.java @@ -195,6 +195,7 @@ public class PortraitStatesTouchController extends AbstractStateChangeTouchContr final AnimatorSetBuilder builder = totalShift == 0 ? new AnimatorSetBuilder() : getAnimatorSetBuilderForStates(mFromState, mToState); + updateAnimatorBuilderOnReinit(builder); cancelPendingAnim(); @@ -228,6 +229,12 @@ public class PortraitStatesTouchController extends AbstractStateChangeTouchContr return 1 / totalShift; } + /** + * Give subclasses the chance to update the animation when we re-initialize towards a new state. + */ + protected void updateAnimatorBuilderOnReinit(AnimatorSetBuilder builder) { + } + private void cancelPendingAnim() { if (mPendingAnimation != null) { mPendingAnimation.finish(false, Touch.SWIPE); diff --git a/src/com/android/launcher3/LauncherStateManager.java b/src/com/android/launcher3/LauncherStateManager.java index f6b54f244..97c8f51cc 100644 --- a/src/com/android/launcher3/LauncherStateManager.java +++ b/src/com/android/launcher3/LauncherStateManager.java @@ -373,7 +373,6 @@ public class LauncherStateManager { AnimatorSetBuilder builder, final Runnable onCompleteRunnable) { for (StateHandler handler : getStateHandlers()) { - builder.startTag(handler); handler.setStateWithAnimation(state, builder, mConfig); } diff --git a/src/com/android/launcher3/anim/AnimatorSetBuilder.java b/src/com/android/launcher3/anim/AnimatorSetBuilder.java index fdac5c85f..e135c0d7d 100644 --- a/src/com/android/launcher3/anim/AnimatorSetBuilder.java +++ b/src/com/android/launcher3/anim/AnimatorSetBuilder.java @@ -35,15 +35,13 @@ public class AnimatorSetBuilder { public static final int ANIM_OVERVIEW_FADE = 4; public static final int ANIM_ALL_APPS_FADE = 5; + public static final int FLAG_DONT_ANIMATE_OVERVIEW = 1 << 0; + protected final ArrayList<Animator> mAnims = new ArrayList<>(); private final SparseArray<Interpolator> mInterpolators = new SparseArray<>(); private List<Runnable> mOnFinishRunnables = new ArrayList<>(); - - /** - * Associates a tag with all the animations added after this call. - */ - public void startTag(Object obj) { } + private int mFlags = 0; public void play(Animator anim) { mAnims.add(anim); @@ -77,4 +75,12 @@ public class AnimatorSetBuilder { public void setInterpolator(int animId, Interpolator interpolator) { mInterpolators.put(animId, interpolator); } + + public void addFlag(int flag) { + mFlags |= flag; + } + + public boolean hasFlag(int flag) { + return (mFlags & flag) != 0; + } } |