Loading quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java +5 −4 Original line number Diff line number Diff line Loading @@ -1095,14 +1095,15 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> homeAnim.setPlayFraction(progress); float iconAlpha = Utilities.mapToRange(interpolatedProgress, 0, windowAlphaThreshold, 0f, 1f, Interpolators.LINEAR); mTransformParams.setCurrentRectAndTargetAlpha(currentRect, 1f - iconAlpha); float windowAlpha = Utilities.mapToRange(interpolatedProgress, 0, windowAlphaThreshold, 1f, 0f, Interpolators.LINEAR); mTransformParams.setProgress(progress) .setCurrentRectAndTargetAlpha(currentRect, windowAlpha); mClipAnimationHelper.applyTransform(targetSet, mTransformParams, false /* launcherOnTop */); if (isFloatingIconView) { ((FloatingIconView) floatingView).update(currentRect, iconAlpha, progress, ((FloatingIconView) floatingView).update(currentRect, 1f, progress, windowAlphaThreshold, mClipAnimationHelper.getCurrentCornerRadius(), false); } Loading quickstep/recents_ui_overrides/src/com/android/quickstep/util/RectFSpringAnim.java +4 −1 Original line number Diff line number Diff line Loading @@ -33,6 +33,8 @@ import com.android.launcher3.anim.FlingSpringAnim; import java.util.ArrayList; import java.util.List; import static com.android.launcher3.anim.Interpolators.DEACCEL; /** * Applies spring forces to animate from a starting rect to a target rect, * while providing update callbacks to the caller. Loading @@ -45,7 +47,7 @@ public class RectFSpringAnim { * can be done in parallel at a fixed duration. Update callbacks are sent based on the progress * of this animation, while the end callback is sent after all animations finish. */ private static final long RECT_SCALE_DURATION = 180; private static final long RECT_SCALE_DURATION = 250; private static final FloatPropertyCompat<RectFSpringAnim> RECT_CENTER_X = new FloatPropertyCompat<RectFSpringAnim>("rectCenterXSpring") { Loading Loading @@ -148,6 +150,7 @@ public class RectFSpringAnim { mRectScaleAnim = ObjectAnimator.ofPropertyValuesHolder(this, PropertyValuesHolder.ofFloat(RECT_SCALE_PROGRESS, 1)) .setDuration(RECT_SCALE_DURATION); mRectScaleAnim.setInterpolator(DEACCEL); mRectScaleAnim.addListener(new AnimationSuccessListener() { @Override public void onAnimationSuccess(Animator animator) { Loading quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java +14 −9 Original line number Diff line number Diff line Loading @@ -104,16 +104,18 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans private static final String CONTROL_REMOTE_APP_TRANSITION_PERMISSION = "android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS"; private static final long APP_LAUNCH_DURATION = 500; private static final long APP_LAUNCH_DURATION = 450; // Use a shorter duration for x or y translation to create a curve effect private static final long APP_LAUNCH_CURVED_DURATION = APP_LAUNCH_DURATION / 2; private static final long APP_LAUNCH_CURVED_DURATION = 250; private static final long APP_LAUNCH_ALPHA_DURATION = 50; private static final long APP_LAUNCH_ALPHA_START_DELAY = 50; // We scale the durations for the downward app launch animations (minus the scale animation). private static final float APP_LAUNCH_DOWN_DUR_SCALE_FACTOR = 0.8f; private static final long APP_LAUNCH_DOWN_DURATION = (long) (APP_LAUNCH_DURATION * APP_LAUNCH_DOWN_DUR_SCALE_FACTOR); private static final long APP_LAUNCH_DOWN_CURVED_DURATION = APP_LAUNCH_DOWN_DURATION / 2; private static final long APP_LAUNCH_DOWN_CURVED_DURATION = (long) (APP_LAUNCH_CURVED_DURATION * APP_LAUNCH_DOWN_DUR_SCALE_FACTOR); private static final long APP_LAUNCH_ALPHA_DOWN_DURATION = (long) (APP_LAUNCH_ALPHA_DURATION * APP_LAUNCH_DOWN_DUR_SCALE_FACTOR); Loading Loading @@ -476,16 +478,17 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans final float windowRadius = mDeviceProfile.isMultiWindowMode ? 0 : getWindowCornerRadius(mLauncher.getResources()); appAnimator.addUpdateListener(new MultiValueUpdateListener() { FloatProp mDx = new FloatProp(0, dX, 0, xDuration, AGGRESSIVE_EASE); FloatProp mDy = new FloatProp(0, dY, 0, yDuration, AGGRESSIVE_EASE); FloatProp mIconScale = new FloatProp(initialStartScale, scale, 0, APP_LAUNCH_DURATION, EXAGGERATED_EASE); FloatProp mIconAlpha = new FloatProp(1f, 0f, shapeRevealDuration, alphaDuration, LINEAR); FloatProp mIconAlpha = new FloatProp(1f, 0f, APP_LAUNCH_ALPHA_START_DELAY, alphaDuration, LINEAR); FloatProp mCropHeight = new FloatProp(windowTargetBounds.width(), windowTargetBounds.height(), 0, shapeRevealDuration, AGGRESSIVE_EASE); windowTargetBounds.height(), 0, APP_LAUNCH_DURATION, EXAGGERATED_EASE); FloatProp mWindowRadius = new FloatProp(windowTargetBounds.width() / 2f, windowRadius, 0, APP_LAUNCH_DURATION, EXAGGERATED_EASE); @Override public void onUpdate(float percent) { Loading Loading @@ -518,6 +521,7 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans float transX0 = temp.left - offsetX; float transY0 = temp.top - offsetY; float croppedHeight = (windowTargetBounds.height() - crop.height()) * scale; SurfaceParams[] params = new SurfaceParams[targets.length]; for (int i = targets.length - 1; i >= 0; i--) { RemoteAnimationTargetCompat target = targets[i]; Loading @@ -529,8 +533,9 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans matrix.postTranslate(transX0, transY0); targetCrop = crop; alpha = 1f - mIconAlpha.value; cornerRadius = windowRadius; cornerRadius = mWindowRadius.value; matrix.mapRect(currentBounds, targetBounds); currentBounds.bottom -= croppedHeight; mFloatingView.update(currentBounds, mIconAlpha.value, percent, 0f, cornerRadius * scale, true /* isOpening */); } else { Loading src/com/android/launcher3/anim/FlingSpringAnim.java +2 −2 Original line number Diff line number Diff line Loading @@ -30,8 +30,8 @@ public class FlingSpringAnim { private static final float FLING_FRICTION = 1.5f; // Have the spring pull towards the target if we've slowed down too much before reaching it. private static final float FLING_END_THRESHOLD_PX = 50f; private static final float SPRING_STIFFNESS = 350f; private static final float SPRING_DAMPING = SpringForce.DAMPING_RATIO_LOW_BOUNCY; private static final float SPRING_STIFFNESS = 200; private static final float SPRING_DAMPING = 0.85f; private final FlingAnimation mFlingAnim; private SpringAnimation mSpringAnim; Loading src/com/android/launcher3/views/FloatingIconView.java +33 −35 Original line number Diff line number Diff line Loading @@ -98,10 +98,9 @@ public class FloatingIconView extends View implements private RectF mPositionOut; private Runnable mOnTargetChangeRunnable; private final Rect mOutline = new Rect(); private final Rect mFinalDrawableBounds = new Rect(); private final Rect mBgDrawableBounds = new Rect(); private float mBgDrawableStartScale = 1f; private float mBgDrawableEndScale = 1f; private AnimatorSet mFadeAnimatorSet; private ListenerView mListenerView; Loading Loading @@ -143,11 +142,10 @@ public class FloatingIconView extends View implements setTranslationX(dX); setTranslationY(dY); float scaleX = rect.width() / (float) lp.width; float scaleY = rect.height() / (float) lp.height; float scale = mIsAdaptiveIcon && !isOpening ? Math.max(scaleX, scaleY) : Math.min(scaleX, scaleY); scale = Math.max(1f, scale); float minSize = Math.min(lp.width, lp.height); float scaleX = rect.width() / minSize; float scaleY = rect.height() / minSize; float scale = Math.max(1f, Math.min(scaleX, scaleY)); setPivotX(0); setPivotY(0); Loading @@ -160,11 +158,13 @@ public class FloatingIconView extends View implements Math.max(shapeProgressStart, progress), shapeProgressStart, 1f, 0, toMax, LINEAR), 0, 1); mTaskCornerRadius = cornerRadius; if (mIsAdaptiveIcon && shapeRevealProgress >= 0) { mOutline.bottom = (int) (rect.height() / scale); mTaskCornerRadius = cornerRadius / scale; if (mIsAdaptiveIcon) { if (!isOpening && shapeRevealProgress >= 0) { if (mRevealAnimator == null) { mRevealAnimator = (ValueAnimator) IconShape.getShape().createRevealAnimator(this, mStartRevealRect, mEndRevealRect, mTaskCornerRadius / scale, !isOpening); mRevealAnimator = (ValueAnimator) IconShape.getShape().createRevealAnimator( this, mStartRevealRect, mOutline, mTaskCornerRadius, !isOpening); mRevealAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { Loading @@ -175,12 +175,10 @@ public class FloatingIconView extends View implements // We pause here so we can set the current fraction ourselves. mRevealAnimator.pause(); } mRevealAnimator.setCurrentFraction(shapeRevealProgress); } float bgScale = (mBgDrawableEndScale * shapeRevealProgress) + mBgDrawableStartScale * (1 - shapeRevealProgress); setBackgroundDrawableBounds(bgScale); setBackgroundDrawableBounds(mOutline.height() / minSize); } invalidate(); invalidateOutline(); Loading Loading @@ -363,24 +361,22 @@ public class FloatingIconView extends View implements layout(lp.leftMargin, lp.topMargin, lp.leftMargin + lp.width, lp.topMargin + lp.height); Rect rectOutline = new Rect(); float scale = Math.max((float) lp.height / originalHeight, (float) lp.width / originalWidth); float bgDrawableStartScale; if (isOpening) { mBgDrawableStartScale = 1f; mBgDrawableEndScale = scale; rectOutline.set(0, 0, originalWidth, originalHeight); bgDrawableStartScale = 1f; mOutline.set(0, 0, originalWidth, originalHeight); } else { mBgDrawableStartScale = scale; mBgDrawableEndScale = 1f; rectOutline.set(0, 0, lp.width, lp.height); bgDrawableStartScale = scale; mOutline.set(0, 0, lp.width, lp.height); } setBackgroundDrawableBounds(bgDrawableStartScale); mEndRevealRect.set(0, 0, lp.width, lp.height); setBackgroundDrawableBounds(mBgDrawableStartScale); setOutlineProvider(new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { outline.setRoundRect(rectOutline, mTaskCornerRadius); outline.setRoundRect(mOutline, mTaskCornerRadius); } }); setClipToOutline(true); Loading Loading @@ -630,5 +626,7 @@ public class FloatingIconView extends View implements mListenerView.setListener(null); mOriginalIcon = null; mOnTargetChangeRunnable = null; mTaskCornerRadius = 0; mOutline.setEmpty(); } } Loading
quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java +5 −4 Original line number Diff line number Diff line Loading @@ -1095,14 +1095,15 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> homeAnim.setPlayFraction(progress); float iconAlpha = Utilities.mapToRange(interpolatedProgress, 0, windowAlphaThreshold, 0f, 1f, Interpolators.LINEAR); mTransformParams.setCurrentRectAndTargetAlpha(currentRect, 1f - iconAlpha); float windowAlpha = Utilities.mapToRange(interpolatedProgress, 0, windowAlphaThreshold, 1f, 0f, Interpolators.LINEAR); mTransformParams.setProgress(progress) .setCurrentRectAndTargetAlpha(currentRect, windowAlpha); mClipAnimationHelper.applyTransform(targetSet, mTransformParams, false /* launcherOnTop */); if (isFloatingIconView) { ((FloatingIconView) floatingView).update(currentRect, iconAlpha, progress, ((FloatingIconView) floatingView).update(currentRect, 1f, progress, windowAlphaThreshold, mClipAnimationHelper.getCurrentCornerRadius(), false); } Loading
quickstep/recents_ui_overrides/src/com/android/quickstep/util/RectFSpringAnim.java +4 −1 Original line number Diff line number Diff line Loading @@ -33,6 +33,8 @@ import com.android.launcher3.anim.FlingSpringAnim; import java.util.ArrayList; import java.util.List; import static com.android.launcher3.anim.Interpolators.DEACCEL; /** * Applies spring forces to animate from a starting rect to a target rect, * while providing update callbacks to the caller. Loading @@ -45,7 +47,7 @@ public class RectFSpringAnim { * can be done in parallel at a fixed duration. Update callbacks are sent based on the progress * of this animation, while the end callback is sent after all animations finish. */ private static final long RECT_SCALE_DURATION = 180; private static final long RECT_SCALE_DURATION = 250; private static final FloatPropertyCompat<RectFSpringAnim> RECT_CENTER_X = new FloatPropertyCompat<RectFSpringAnim>("rectCenterXSpring") { Loading Loading @@ -148,6 +150,7 @@ public class RectFSpringAnim { mRectScaleAnim = ObjectAnimator.ofPropertyValuesHolder(this, PropertyValuesHolder.ofFloat(RECT_SCALE_PROGRESS, 1)) .setDuration(RECT_SCALE_DURATION); mRectScaleAnim.setInterpolator(DEACCEL); mRectScaleAnim.addListener(new AnimationSuccessListener() { @Override public void onAnimationSuccess(Animator animator) { Loading
quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java +14 −9 Original line number Diff line number Diff line Loading @@ -104,16 +104,18 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans private static final String CONTROL_REMOTE_APP_TRANSITION_PERMISSION = "android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS"; private static final long APP_LAUNCH_DURATION = 500; private static final long APP_LAUNCH_DURATION = 450; // Use a shorter duration for x or y translation to create a curve effect private static final long APP_LAUNCH_CURVED_DURATION = APP_LAUNCH_DURATION / 2; private static final long APP_LAUNCH_CURVED_DURATION = 250; private static final long APP_LAUNCH_ALPHA_DURATION = 50; private static final long APP_LAUNCH_ALPHA_START_DELAY = 50; // We scale the durations for the downward app launch animations (minus the scale animation). private static final float APP_LAUNCH_DOWN_DUR_SCALE_FACTOR = 0.8f; private static final long APP_LAUNCH_DOWN_DURATION = (long) (APP_LAUNCH_DURATION * APP_LAUNCH_DOWN_DUR_SCALE_FACTOR); private static final long APP_LAUNCH_DOWN_CURVED_DURATION = APP_LAUNCH_DOWN_DURATION / 2; private static final long APP_LAUNCH_DOWN_CURVED_DURATION = (long) (APP_LAUNCH_CURVED_DURATION * APP_LAUNCH_DOWN_DUR_SCALE_FACTOR); private static final long APP_LAUNCH_ALPHA_DOWN_DURATION = (long) (APP_LAUNCH_ALPHA_DURATION * APP_LAUNCH_DOWN_DUR_SCALE_FACTOR); Loading Loading @@ -476,16 +478,17 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans final float windowRadius = mDeviceProfile.isMultiWindowMode ? 0 : getWindowCornerRadius(mLauncher.getResources()); appAnimator.addUpdateListener(new MultiValueUpdateListener() { FloatProp mDx = new FloatProp(0, dX, 0, xDuration, AGGRESSIVE_EASE); FloatProp mDy = new FloatProp(0, dY, 0, yDuration, AGGRESSIVE_EASE); FloatProp mIconScale = new FloatProp(initialStartScale, scale, 0, APP_LAUNCH_DURATION, EXAGGERATED_EASE); FloatProp mIconAlpha = new FloatProp(1f, 0f, shapeRevealDuration, alphaDuration, LINEAR); FloatProp mIconAlpha = new FloatProp(1f, 0f, APP_LAUNCH_ALPHA_START_DELAY, alphaDuration, LINEAR); FloatProp mCropHeight = new FloatProp(windowTargetBounds.width(), windowTargetBounds.height(), 0, shapeRevealDuration, AGGRESSIVE_EASE); windowTargetBounds.height(), 0, APP_LAUNCH_DURATION, EXAGGERATED_EASE); FloatProp mWindowRadius = new FloatProp(windowTargetBounds.width() / 2f, windowRadius, 0, APP_LAUNCH_DURATION, EXAGGERATED_EASE); @Override public void onUpdate(float percent) { Loading Loading @@ -518,6 +521,7 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans float transX0 = temp.left - offsetX; float transY0 = temp.top - offsetY; float croppedHeight = (windowTargetBounds.height() - crop.height()) * scale; SurfaceParams[] params = new SurfaceParams[targets.length]; for (int i = targets.length - 1; i >= 0; i--) { RemoteAnimationTargetCompat target = targets[i]; Loading @@ -529,8 +533,9 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans matrix.postTranslate(transX0, transY0); targetCrop = crop; alpha = 1f - mIconAlpha.value; cornerRadius = windowRadius; cornerRadius = mWindowRadius.value; matrix.mapRect(currentBounds, targetBounds); currentBounds.bottom -= croppedHeight; mFloatingView.update(currentBounds, mIconAlpha.value, percent, 0f, cornerRadius * scale, true /* isOpening */); } else { Loading
src/com/android/launcher3/anim/FlingSpringAnim.java +2 −2 Original line number Diff line number Diff line Loading @@ -30,8 +30,8 @@ public class FlingSpringAnim { private static final float FLING_FRICTION = 1.5f; // Have the spring pull towards the target if we've slowed down too much before reaching it. private static final float FLING_END_THRESHOLD_PX = 50f; private static final float SPRING_STIFFNESS = 350f; private static final float SPRING_DAMPING = SpringForce.DAMPING_RATIO_LOW_BOUNCY; private static final float SPRING_STIFFNESS = 200; private static final float SPRING_DAMPING = 0.85f; private final FlingAnimation mFlingAnim; private SpringAnimation mSpringAnim; Loading
src/com/android/launcher3/views/FloatingIconView.java +33 −35 Original line number Diff line number Diff line Loading @@ -98,10 +98,9 @@ public class FloatingIconView extends View implements private RectF mPositionOut; private Runnable mOnTargetChangeRunnable; private final Rect mOutline = new Rect(); private final Rect mFinalDrawableBounds = new Rect(); private final Rect mBgDrawableBounds = new Rect(); private float mBgDrawableStartScale = 1f; private float mBgDrawableEndScale = 1f; private AnimatorSet mFadeAnimatorSet; private ListenerView mListenerView; Loading Loading @@ -143,11 +142,10 @@ public class FloatingIconView extends View implements setTranslationX(dX); setTranslationY(dY); float scaleX = rect.width() / (float) lp.width; float scaleY = rect.height() / (float) lp.height; float scale = mIsAdaptiveIcon && !isOpening ? Math.max(scaleX, scaleY) : Math.min(scaleX, scaleY); scale = Math.max(1f, scale); float minSize = Math.min(lp.width, lp.height); float scaleX = rect.width() / minSize; float scaleY = rect.height() / minSize; float scale = Math.max(1f, Math.min(scaleX, scaleY)); setPivotX(0); setPivotY(0); Loading @@ -160,11 +158,13 @@ public class FloatingIconView extends View implements Math.max(shapeProgressStart, progress), shapeProgressStart, 1f, 0, toMax, LINEAR), 0, 1); mTaskCornerRadius = cornerRadius; if (mIsAdaptiveIcon && shapeRevealProgress >= 0) { mOutline.bottom = (int) (rect.height() / scale); mTaskCornerRadius = cornerRadius / scale; if (mIsAdaptiveIcon) { if (!isOpening && shapeRevealProgress >= 0) { if (mRevealAnimator == null) { mRevealAnimator = (ValueAnimator) IconShape.getShape().createRevealAnimator(this, mStartRevealRect, mEndRevealRect, mTaskCornerRadius / scale, !isOpening); mRevealAnimator = (ValueAnimator) IconShape.getShape().createRevealAnimator( this, mStartRevealRect, mOutline, mTaskCornerRadius, !isOpening); mRevealAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { Loading @@ -175,12 +175,10 @@ public class FloatingIconView extends View implements // We pause here so we can set the current fraction ourselves. mRevealAnimator.pause(); } mRevealAnimator.setCurrentFraction(shapeRevealProgress); } float bgScale = (mBgDrawableEndScale * shapeRevealProgress) + mBgDrawableStartScale * (1 - shapeRevealProgress); setBackgroundDrawableBounds(bgScale); setBackgroundDrawableBounds(mOutline.height() / minSize); } invalidate(); invalidateOutline(); Loading Loading @@ -363,24 +361,22 @@ public class FloatingIconView extends View implements layout(lp.leftMargin, lp.topMargin, lp.leftMargin + lp.width, lp.topMargin + lp.height); Rect rectOutline = new Rect(); float scale = Math.max((float) lp.height / originalHeight, (float) lp.width / originalWidth); float bgDrawableStartScale; if (isOpening) { mBgDrawableStartScale = 1f; mBgDrawableEndScale = scale; rectOutline.set(0, 0, originalWidth, originalHeight); bgDrawableStartScale = 1f; mOutline.set(0, 0, originalWidth, originalHeight); } else { mBgDrawableStartScale = scale; mBgDrawableEndScale = 1f; rectOutline.set(0, 0, lp.width, lp.height); bgDrawableStartScale = scale; mOutline.set(0, 0, lp.width, lp.height); } setBackgroundDrawableBounds(bgDrawableStartScale); mEndRevealRect.set(0, 0, lp.width, lp.height); setBackgroundDrawableBounds(mBgDrawableStartScale); setOutlineProvider(new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { outline.setRoundRect(rectOutline, mTaskCornerRadius); outline.setRoundRect(mOutline, mTaskCornerRadius); } }); setClipToOutline(true); Loading Loading @@ -630,5 +626,7 @@ public class FloatingIconView extends View implements mListenerView.setListener(null); mOriginalIcon = null; mOnTargetChangeRunnable = null; mTaskCornerRadius = 0; mOutline.setEmpty(); } }