Loading packages/SystemUI/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java +8 −2 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.systemui.recents.views; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.util.Log; import android.view.View; Loading Loading @@ -77,7 +78,7 @@ public class TaskStackAnimationHelper { public static final int ENTER_FROM_HOME_ALPHA_DURATION = 100; public static final int ENTER_FROM_HOME_TRANSLATION_DURATION = 333; public static final int ENTER_WHILE_DOCKING_DURATION = 150; public static final int ENTER_WHILE_DOCKING_DURATION = 250; private static final PathInterpolator ENTER_FROM_HOME_TRANSLATION_INTERPOLATOR = new PathInterpolator(0, 0, 0, 1f); Loading Loading @@ -135,6 +136,8 @@ public class TaskStackAnimationHelper { R.dimen.recents_task_stack_animation_affiliate_enter_offset); int launchedWhileDockingOffset = res.getDimensionPixelSize( R.dimen.recents_task_stack_animation_launched_while_docking_offset); boolean isLandscape = mStackView.getContext().getApplicationContext().getResources() .getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; // Prepare each of the task views for their enter animation from front to back List<TaskView> taskViews = mStackView.getTaskViews(); Loading Loading @@ -169,7 +172,10 @@ public class TaskStackAnimationHelper { mTmpTransform.alpha = 0f; mStackView.updateTaskViewToTransform(tv, mTmpTransform, AnimationProps.IMMEDIATE); } else if (launchState.launchedViaDockGesture) { mTmpTransform.rect.offset(0, launchedWhileDockingOffset); int offset = isLandscape ? launchedWhileDockingOffset : (int) (offscreenYOffset * 0.9f); mTmpTransform.rect.offset(0, offset); mTmpTransform.alpha = 0f; mStackView.updateTaskViewToTransform(tv, mTmpTransform, AnimationProps.IMMEDIATE); } Loading packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java +55 −19 Original line number Diff line number Diff line Loading @@ -332,13 +332,18 @@ public class DividerView extends FrameLayout implements OnTouchListener, public void stopDragging(int position, SnapTarget target, long duration, Interpolator interpolator) { stopDragging(position, target, duration, 0 /* startDelay*/, interpolator); stopDragging(position, target, duration, 0 /* startDelay*/, 0 /* endDelay */, interpolator); } public void stopDragging(int position, SnapTarget target, long duration, Interpolator interpolator, long endDelay) { stopDragging(position, target, duration, 0 /* startDelay*/, endDelay, interpolator); } public void stopDragging(int position, SnapTarget target, long duration, long startDelay, Interpolator interpolator) { long endDelay, Interpolator interpolator) { mHandle.setTouching(false, true /* animate */); flingTo(position, target, duration, startDelay, interpolator); flingTo(position, target, duration, startDelay, endDelay, interpolator); mWindowManager.setSlippery(true); releaseBackground(); } Loading Loading @@ -471,21 +476,22 @@ public class DividerView extends FrameLayout implements OnTouchListener, if (logMetrics) { logResizeEvent(snapTarget); } ValueAnimator anim = getFlingAnimator(position, snapTarget); ValueAnimator anim = getFlingAnimator(position, snapTarget, 0 /* endDelay */); mFlingAnimationUtils.apply(anim, position, snapTarget.position, velocity); anim.start(); } private void flingTo(int position, SnapTarget target, long duration, long startDelay, Interpolator interpolator) { ValueAnimator anim = getFlingAnimator(position, target); long endDelay, Interpolator interpolator) { ValueAnimator anim = getFlingAnimator(position, target, endDelay); anim.setDuration(duration); anim.setStartDelay(startDelay); anim.setInterpolator(interpolator); anim.start(); } private ValueAnimator getFlingAnimator(int position, final SnapTarget snapTarget) { private ValueAnimator getFlingAnimator(int position, final SnapTarget snapTarget, final long endDelay) { ValueAnimator anim = ValueAnimator.ofInt(position, snapTarget.position); anim.addUpdateListener(new AnimatorUpdateListener() { @Override Loading @@ -496,9 +502,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, : snapTarget.position, snapTarget); } }); anim.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { Runnable endAction = () -> { commitSnapFlags(snapTarget); mWindowManagerProxy.setResizing(false); mDockSide = WindowManager.DOCKED_INVALID; Loading @@ -506,6 +510,23 @@ public class DividerView extends FrameLayout implements OnTouchListener, mEntranceAnimationRunning = false; mExitAnimationRunning = false; EventBus.getDefault().send(new StoppedDragingEvent()); }; anim.addListener(new AnimatorListenerAdapter() { private boolean mCancelled; @Override public void onAnimationCancel(Animator animation) { mCancelled = true; } @Override public void onAnimationEnd(Animator animation) { if (endDelay == 0 || mCancelled) { endAction.run(); } else { postDelayed(endAction, endDelay); } } }); mCurrentAnimator = anim; Loading Loading @@ -733,8 +754,10 @@ public class DividerView extends FrameLayout implements OnTouchListener, mDockSide, mDockedTaskRect); calculateBoundsForPosition(mExitStartPosition, DockedDividerUtils.invertDockSide(mDockSide), mOtherTaskRect); mOtherInsetRect.set(mOtherTaskRect); applyExitAnimationParallax(mOtherTaskRect, position); mWindowManagerProxy.resizeDockedStack(mDockedRect, mDockedTaskRect, null, mOtherTaskRect, null); mOtherTaskRect, mOtherInsetRect); } else if (taskPosition != TASK_POSITION_SAME) { calculateBoundsForPosition(position, DockedDividerUtils.invertDockSide(mDockSide), mOtherRect); Loading Loading @@ -773,6 +796,16 @@ public class DividerView extends FrameLayout implements OnTouchListener, dimFraction); } private void applyExitAnimationParallax(Rect taskRect, int position) { if (mDockSide == WindowManager.DOCKED_TOP) { taskRect.offset(0, (int) ((position - mExitStartPosition) * 0.25f)); } else if (mDockSide == WindowManager.DOCKED_LEFT) { taskRect.offset((int) ((position - mExitStartPosition) * 0.25f), 0); } else if (mDockSide == WindowManager.DOCKED_RIGHT) { taskRect.offset((int) ((mExitStartPosition - position) * 0.25f), 0); } } private float getDimFraction(int position, SnapTarget dismissTarget) { if (mEntranceAnimationRunning) { return 0f; Loading Loading @@ -956,14 +989,17 @@ public class DividerView extends FrameLayout implements OnTouchListener, if (mAnimateAfterRecentsDrawn) { mAnimateAfterRecentsDrawn = false; updateDockSide(); stopDragging(getCurrentPosition(), mSnapAlgorithm.getMiddleTarget(), 250, Interpolators.TOUCH_RESPONSE); // Delay switching resizing mode because this might cause jank in recents animation // that's long than this animation. stopDragging(getCurrentPosition(), mSnapAlgorithm.getMiddleTarget(), 250 /* startDelay */, Interpolators.FAST_OUT_SLOW_IN, 200 /* endDelay */); } if (mGrowAfterRecentsDrawn) { mGrowAfterRecentsDrawn = false; updateDockSide(); stopDragging(getCurrentPosition(), mSnapAlgorithm.getMiddleTarget(), 250, Interpolators.TOUCH_RESPONSE); Interpolators.FAST_OUT_SLOW_IN); } } Loading @@ -979,7 +1015,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, mExitAnimationRunning = true; mExitStartPosition = getCurrentPosition(); stopDragging(mExitStartPosition, target, 336 /* duration */, 100 /* startDelay */, Interpolators.TOUCH_RESPONSE); 0 /* endDelay */, Interpolators.FAST_OUT_SLOW_IN); // Vibrate after undocking performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY); Loading Loading
packages/SystemUI/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java +8 −2 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.systemui.recents.views; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.util.Log; import android.view.View; Loading Loading @@ -77,7 +78,7 @@ public class TaskStackAnimationHelper { public static final int ENTER_FROM_HOME_ALPHA_DURATION = 100; public static final int ENTER_FROM_HOME_TRANSLATION_DURATION = 333; public static final int ENTER_WHILE_DOCKING_DURATION = 150; public static final int ENTER_WHILE_DOCKING_DURATION = 250; private static final PathInterpolator ENTER_FROM_HOME_TRANSLATION_INTERPOLATOR = new PathInterpolator(0, 0, 0, 1f); Loading Loading @@ -135,6 +136,8 @@ public class TaskStackAnimationHelper { R.dimen.recents_task_stack_animation_affiliate_enter_offset); int launchedWhileDockingOffset = res.getDimensionPixelSize( R.dimen.recents_task_stack_animation_launched_while_docking_offset); boolean isLandscape = mStackView.getContext().getApplicationContext().getResources() .getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; // Prepare each of the task views for their enter animation from front to back List<TaskView> taskViews = mStackView.getTaskViews(); Loading Loading @@ -169,7 +172,10 @@ public class TaskStackAnimationHelper { mTmpTransform.alpha = 0f; mStackView.updateTaskViewToTransform(tv, mTmpTransform, AnimationProps.IMMEDIATE); } else if (launchState.launchedViaDockGesture) { mTmpTransform.rect.offset(0, launchedWhileDockingOffset); int offset = isLandscape ? launchedWhileDockingOffset : (int) (offscreenYOffset * 0.9f); mTmpTransform.rect.offset(0, offset); mTmpTransform.alpha = 0f; mStackView.updateTaskViewToTransform(tv, mTmpTransform, AnimationProps.IMMEDIATE); } Loading
packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java +55 −19 Original line number Diff line number Diff line Loading @@ -332,13 +332,18 @@ public class DividerView extends FrameLayout implements OnTouchListener, public void stopDragging(int position, SnapTarget target, long duration, Interpolator interpolator) { stopDragging(position, target, duration, 0 /* startDelay*/, interpolator); stopDragging(position, target, duration, 0 /* startDelay*/, 0 /* endDelay */, interpolator); } public void stopDragging(int position, SnapTarget target, long duration, Interpolator interpolator, long endDelay) { stopDragging(position, target, duration, 0 /* startDelay*/, endDelay, interpolator); } public void stopDragging(int position, SnapTarget target, long duration, long startDelay, Interpolator interpolator) { long endDelay, Interpolator interpolator) { mHandle.setTouching(false, true /* animate */); flingTo(position, target, duration, startDelay, interpolator); flingTo(position, target, duration, startDelay, endDelay, interpolator); mWindowManager.setSlippery(true); releaseBackground(); } Loading Loading @@ -471,21 +476,22 @@ public class DividerView extends FrameLayout implements OnTouchListener, if (logMetrics) { logResizeEvent(snapTarget); } ValueAnimator anim = getFlingAnimator(position, snapTarget); ValueAnimator anim = getFlingAnimator(position, snapTarget, 0 /* endDelay */); mFlingAnimationUtils.apply(anim, position, snapTarget.position, velocity); anim.start(); } private void flingTo(int position, SnapTarget target, long duration, long startDelay, Interpolator interpolator) { ValueAnimator anim = getFlingAnimator(position, target); long endDelay, Interpolator interpolator) { ValueAnimator anim = getFlingAnimator(position, target, endDelay); anim.setDuration(duration); anim.setStartDelay(startDelay); anim.setInterpolator(interpolator); anim.start(); } private ValueAnimator getFlingAnimator(int position, final SnapTarget snapTarget) { private ValueAnimator getFlingAnimator(int position, final SnapTarget snapTarget, final long endDelay) { ValueAnimator anim = ValueAnimator.ofInt(position, snapTarget.position); anim.addUpdateListener(new AnimatorUpdateListener() { @Override Loading @@ -496,9 +502,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, : snapTarget.position, snapTarget); } }); anim.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { Runnable endAction = () -> { commitSnapFlags(snapTarget); mWindowManagerProxy.setResizing(false); mDockSide = WindowManager.DOCKED_INVALID; Loading @@ -506,6 +510,23 @@ public class DividerView extends FrameLayout implements OnTouchListener, mEntranceAnimationRunning = false; mExitAnimationRunning = false; EventBus.getDefault().send(new StoppedDragingEvent()); }; anim.addListener(new AnimatorListenerAdapter() { private boolean mCancelled; @Override public void onAnimationCancel(Animator animation) { mCancelled = true; } @Override public void onAnimationEnd(Animator animation) { if (endDelay == 0 || mCancelled) { endAction.run(); } else { postDelayed(endAction, endDelay); } } }); mCurrentAnimator = anim; Loading Loading @@ -733,8 +754,10 @@ public class DividerView extends FrameLayout implements OnTouchListener, mDockSide, mDockedTaskRect); calculateBoundsForPosition(mExitStartPosition, DockedDividerUtils.invertDockSide(mDockSide), mOtherTaskRect); mOtherInsetRect.set(mOtherTaskRect); applyExitAnimationParallax(mOtherTaskRect, position); mWindowManagerProxy.resizeDockedStack(mDockedRect, mDockedTaskRect, null, mOtherTaskRect, null); mOtherTaskRect, mOtherInsetRect); } else if (taskPosition != TASK_POSITION_SAME) { calculateBoundsForPosition(position, DockedDividerUtils.invertDockSide(mDockSide), mOtherRect); Loading Loading @@ -773,6 +796,16 @@ public class DividerView extends FrameLayout implements OnTouchListener, dimFraction); } private void applyExitAnimationParallax(Rect taskRect, int position) { if (mDockSide == WindowManager.DOCKED_TOP) { taskRect.offset(0, (int) ((position - mExitStartPosition) * 0.25f)); } else if (mDockSide == WindowManager.DOCKED_LEFT) { taskRect.offset((int) ((position - mExitStartPosition) * 0.25f), 0); } else if (mDockSide == WindowManager.DOCKED_RIGHT) { taskRect.offset((int) ((mExitStartPosition - position) * 0.25f), 0); } } private float getDimFraction(int position, SnapTarget dismissTarget) { if (mEntranceAnimationRunning) { return 0f; Loading Loading @@ -956,14 +989,17 @@ public class DividerView extends FrameLayout implements OnTouchListener, if (mAnimateAfterRecentsDrawn) { mAnimateAfterRecentsDrawn = false; updateDockSide(); stopDragging(getCurrentPosition(), mSnapAlgorithm.getMiddleTarget(), 250, Interpolators.TOUCH_RESPONSE); // Delay switching resizing mode because this might cause jank in recents animation // that's long than this animation. stopDragging(getCurrentPosition(), mSnapAlgorithm.getMiddleTarget(), 250 /* startDelay */, Interpolators.FAST_OUT_SLOW_IN, 200 /* endDelay */); } if (mGrowAfterRecentsDrawn) { mGrowAfterRecentsDrawn = false; updateDockSide(); stopDragging(getCurrentPosition(), mSnapAlgorithm.getMiddleTarget(), 250, Interpolators.TOUCH_RESPONSE); Interpolators.FAST_OUT_SLOW_IN); } } Loading @@ -979,7 +1015,7 @@ public class DividerView extends FrameLayout implements OnTouchListener, mExitAnimationRunning = true; mExitStartPosition = getCurrentPosition(); stopDragging(mExitStartPosition, target, 336 /* duration */, 100 /* startDelay */, Interpolators.TOUCH_RESPONSE); 0 /* endDelay */, Interpolators.FAST_OUT_SLOW_IN); // Vibrate after undocking performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY); Loading