Loading quickstep/src/com/android/launcher3/QuickstepTransitionManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -693,7 +693,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener matrix.postTranslate(windowTransX0, windowTransY0); } floatingView.update(floatingIconBounds, mIconAlpha.value, percent, 0f, floatingView.update(mIconAlpha.value, 255, floatingIconBounds, percent, 0f, mWindowRadius.value * scale, true /* isOpening */); builder.withMatrix(matrix) .withWindowCrop(crop) Loading quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +1 −1 Original line number Diff line number Diff line Loading @@ -1252,7 +1252,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, HomeAnimationFactory homeAnimationFactory) { RectFSpringAnim anim = super.createWindowAnimationToHome(startProgress, homeAnimationFactory); anim.addOnUpdateListener((r, p) -> { anim.addOnUpdateListener((v, r, p) -> { updateSysUiFlags(Math.max(p, mCurrentShift.value)); }); anim.addAnimatorListener(new AnimationSuccessListener() { Loading quickstep/src/com/android/quickstep/FallbackSwipeHandler.java +4 −1 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import android.view.SurfaceControl; import android.view.SurfaceControl.Transaction; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.launcher3.DeviceProfile; import com.android.launcher3.Utilities; Loading @@ -56,6 +57,7 @@ import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.anim.SpringAnimationBuilder; import com.android.quickstep.fallback.FallbackRecentsView; import com.android.quickstep.fallback.RecentsState; import com.android.quickstep.util.AppCloseConfig; import com.android.quickstep.util.RectFSpringAnim; import com.android.quickstep.util.TransformParams; import com.android.quickstep.util.TransformParams.BuilderProxy; Loading Loading @@ -298,7 +300,8 @@ public class FallbackSwipeHandler extends } @Override public void update(RectF currentRect, float progress, float radius) { public void update(@Nullable AppCloseConfig config, RectF currentRect, float progress, float radius) { if (mSurfaceControl != null) { currentRect.roundOut(mTempRect); Transaction t = new Transaction(); Loading quickstep/src/com/android/quickstep/LauncherSwipeHandlerV2.java +119 −8 Original line number Diff line number Diff line Loading @@ -15,26 +15,45 @@ */ package com.android.quickstep; import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY; import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_Y; import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.Utilities.dpToPx; import static com.android.launcher3.Utilities.mapToRange; import static com.android.launcher3.anim.Interpolators.LINEAR; import static com.android.launcher3.config.FeatureFlags.PROTOTYPE_APP_CLOSE; import static com.android.launcher3.views.FloatingIconView.SHAPE_PROGRESS_DURATION; import static com.android.launcher3.views.FloatingIconView.getFloatingIconView; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ValueAnimator; import android.content.Context; import android.graphics.RectF; import android.os.UserHandle; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.launcher3.BaseQuickstepLauncher; import com.android.launcher3.Hotseat; import com.android.launcher3.LauncherState; import com.android.launcher3.R; import com.android.launcher3.Workspace; import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.anim.SpringAnimationBuilder; import com.android.launcher3.dragndrop.DragLayer; import com.android.launcher3.states.StateAnimationConfig; import com.android.launcher3.util.DynamicResource; import com.android.launcher3.views.FloatingIconView; import com.android.quickstep.util.AppCloseConfig; import com.android.quickstep.util.RectFSpringAnim; import com.android.quickstep.util.StaggeredWorkspaceAnim; import com.android.quickstep.views.RecentsView; import com.android.quickstep.views.TaskView; import com.android.systemui.plugins.ResourceProvider; import com.android.systemui.shared.system.InputConsumerController; /** Loading Loading @@ -66,24 +85,41 @@ public class LauncherSwipeHandlerV2 extends } else { workspaceView = null; } final RectF iconLocation = new RectF(); boolean canUseWorkspaceView = workspaceView != null && workspaceView.isAttachedToWindow(); FloatingIconView floatingIconView = canUseWorkspaceView ? FloatingIconView.getFloatingIconView(mActivity, workspaceView, true /* hideOriginal */, iconLocation, false /* isOpening */) : null; mActivity.getRootView().setForceHideBackArrow(true); mActivity.setHintUserWillBeActive(); if (canUseWorkspaceView) { final ResourceProvider rp = DynamicResource.provider(mActivity); final float transY = dpToPx(rp.getFloat(R.dimen.swipe_up_trans_y_dp)); float dpPerSecond = dpToPx(rp.getFloat(R.dimen.swipe_up_trans_y_dp_per_s)); final float launcherAlphaMax = rp.getFloat(R.dimen.swipe_up_launcher_alpha_max_progress); RectF iconLocation = new RectF(); FloatingIconView floatingIconView = getFloatingIconView(mActivity, workspaceView, true /* hideOriginal */, iconLocation, false /* isOpening */); // We want the window alpha to be 0 once this threshold is met, so that the // FolderIconView can be seen morphing into the icon shape. float windowAlphaThreshold = 1f - SHAPE_PROGRESS_DURATION; homeAnimFactory = new LauncherHomeAnimationFactory() { // There is a delay in loading the icon, so we need to keep the window // opaque until it is ready. private boolean mIsFloatingIconReady = false; private @Nullable ValueAnimator mBounceBackAnimator; @Override public RectF getWindowTargetRect() { if (PROTOTYPE_APP_CLOSE.get()) { // We want the target rect to be at this offset position, so that all // launcher content can spring back upwards. floatingIconView.setPositionOffsetY(transY); } return iconLocation; } Loading @@ -92,17 +128,92 @@ public class LauncherSwipeHandlerV2 extends anim.addAnimatorListener(floatingIconView); floatingIconView.setOnTargetChangeListener(anim::onTargetPositionChanged); floatingIconView.setFastFinishRunnable(anim::end); if (PROTOTYPE_APP_CLOSE.get()) { mBounceBackAnimator = bounceBackToRestingPosition(); // Use a spring to put drag layer translation back to 0. anim.addAnimatorListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { floatingIconView.setPositionOffsetY(0); mBounceBackAnimator.start(); } }); Workspace workspace = mActivity.getWorkspace(); workspace.setPivotToScaleWithSelf(mActivity.getHotseat()); } } private ValueAnimator bounceBackToRestingPosition() { DragLayer dl = mActivity.getDragLayer(); Workspace workspace = mActivity.getWorkspace(); Hotseat hotseat = mActivity.getHotseat(); final float startValue = transY; final float endValue = 0; // Ensures the velocity is always aligned with the direction. float pixelPerSecond = Math.abs(dpPerSecond) * Math.signum(endValue - transY); ValueAnimator springTransY = new SpringAnimationBuilder(dl.getContext()) .setStiffness(rp.getFloat(R.dimen.swipe_up_trans_y_stiffness)) .setDampingRatio(rp.getFloat(R.dimen.swipe_up_trans_y_damping)) .setMinimumVisibleChange(1f) .setStartValue(startValue) .setEndValue(endValue) .setStartVelocity(pixelPerSecond) .build(dl, VIEW_TRANSLATE_Y); springTransY.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { dl.setTranslationY(0f); dl.setAlpha(1f); SCALE_PROPERTY.set(workspace, 1f); SCALE_PROPERTY.set(hotseat, 1f); } }); return springTransY; } @Override public void update(RectF currentRect, float progress, float radius) { floatingIconView.update(currentRect, 1f, progress, windowAlphaThreshold, radius, false); public boolean keepWindowOpaque() { if (mIsFloatingIconReady || floatingIconView.isVisibleToUser()) { mIsFloatingIconReady = true; return false; } return true; } @Override public void update(@Nullable AppCloseConfig config, RectF currentRect, float progress, float radius) { int fgAlpha = 255; if (config != null && PROTOTYPE_APP_CLOSE.get()) { DragLayer dl = mActivity.getDragLayer(); float translationY = config.getWorkspaceTransY(); dl.setTranslationY(translationY); float alpha = mapToRange(progress, 0, launcherAlphaMax, 0, 1f, LINEAR); dl.setAlpha(Math.min(alpha, 1f)); float scale = Math.min(1f, config.getWorkspaceScale()); SCALE_PROPERTY.set(mActivity.getWorkspace(), scale); SCALE_PROPERTY.set(mActivity.getHotseat(), scale); SCALE_PROPERTY.set(mActivity.getAppsView(), scale); progress = config.getInterpolatedProgress(); fgAlpha = config.getFgAlpha(); } floatingIconView.update(1f, fgAlpha, currentRect, progress, windowAlphaThreshold, radius, false); } @Override public void onCancel() { floatingIconView.fastFinish(); if (mBounceBackAnimator != null) { mBounceBackAnimator.cancel(); } } }; } else { Loading quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java +28 −6 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.quickstep; import static com.android.launcher3.anim.Interpolators.ACCEL_1_5; import static com.android.launcher3.anim.Interpolators.LINEAR; import static com.android.launcher3.config.FeatureFlags.PROTOTYPE_APP_CLOSE; import android.animation.Animator; import android.content.Context; Loading @@ -26,6 +27,7 @@ import android.graphics.Rect; import android.graphics.RectF; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.UiThread; import com.android.launcher3.DeviceProfile; Loading @@ -35,7 +37,9 @@ import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.touch.PagedOrientationHandler; import com.android.quickstep.util.AnimatorControllerWithResistance; import com.android.quickstep.util.AppCloseConfig; import com.android.quickstep.util.RectFSpringAnim; import com.android.quickstep.util.RectFSpringAnim2; import com.android.quickstep.util.TaskViewSimulator; import com.android.quickstep.util.TransformParams; import com.android.quickstep.util.TransformParams.BuilderProxy; Loading Loading @@ -149,7 +153,10 @@ public abstract class SwipeUpAnimationLogic { public void setAnimation(RectFSpringAnim anim) { } public void update(RectF currentRect, float progress, float radius) { } public boolean keepWindowOpaque() { return false; } public void update(@Nullable AppCloseConfig config, RectF currentRect, float progress, float radius) { } public void onCancel() { } Loading Loading @@ -199,7 +206,14 @@ public abstract class SwipeUpAnimationLogic { homeToWindowPositionMap.invert(windowToHomePositionMap); windowToHomePositionMap.mapRect(startRect); RectFSpringAnim anim = new RectFSpringAnim(startRect, targetRect, mContext); RectFSpringAnim anim; if (PROTOTYPE_APP_CLOSE.get()) { anim = new RectFSpringAnim2(startRect, targetRect, mContext, mTaskViewSimulator.getCurrentCornerRadius(), cropRectF.width() / 2f); } else { anim = new RectFSpringAnim(startRect, targetRect, mContext); } homeAnimationFactory.setAnimation(anim); SpringAnimationRunner runner = new SpringAnimationRunner( Loading Loading @@ -259,18 +273,26 @@ public abstract class SwipeUpAnimationLogic { } @Override public void onUpdate(RectF currentRect, float progress) { public void onUpdate(@Nullable AppCloseConfig config, RectF currentRect, float progress) { mHomeAnim.setPlayFraction(progress); mHomeToWindowPositionMap.mapRect(mWindowCurrentRect, currentRect); mMatrix.setRectToRect(mCropRectF, mWindowCurrentRect, ScaleToFit.FILL); float cornerRadius = Utilities.mapRange(progress, mStartRadius, mEndRadius); float alpha = getWindowAlpha(progress); if (config != null && PROTOTYPE_APP_CLOSE.get()) { alpha = config.getWindowAlpha(); cornerRadius = config.getCornerRadius(); } if (mAnimationFactory.keepWindowOpaque()) { alpha = 1f; } mTransformParams .setTargetAlpha(getWindowAlpha(progress)) .setTargetAlpha(alpha) .setCornerRadius(cornerRadius); mTransformParams.applySurfaceParams(mTransformParams.createSurfaceParams(this)); mAnimationFactory.update(currentRect, progress, mMatrix.mapRadius(cornerRadius)); mAnimationFactory.update(config, currentRect, progress, mMatrix.mapRadius(cornerRadius)); } @Override Loading Loading
quickstep/src/com/android/launcher3/QuickstepTransitionManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -693,7 +693,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener matrix.postTranslate(windowTransX0, windowTransY0); } floatingView.update(floatingIconBounds, mIconAlpha.value, percent, 0f, floatingView.update(mIconAlpha.value, 255, floatingIconBounds, percent, 0f, mWindowRadius.value * scale, true /* isOpening */); builder.withMatrix(matrix) .withWindowCrop(crop) Loading
quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +1 −1 Original line number Diff line number Diff line Loading @@ -1252,7 +1252,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, HomeAnimationFactory homeAnimationFactory) { RectFSpringAnim anim = super.createWindowAnimationToHome(startProgress, homeAnimationFactory); anim.addOnUpdateListener((r, p) -> { anim.addOnUpdateListener((v, r, p) -> { updateSysUiFlags(Math.max(p, mCurrentShift.value)); }); anim.addAnimatorListener(new AnimationSuccessListener() { Loading
quickstep/src/com/android/quickstep/FallbackSwipeHandler.java +4 −1 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import android.view.SurfaceControl; import android.view.SurfaceControl.Transaction; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.launcher3.DeviceProfile; import com.android.launcher3.Utilities; Loading @@ -56,6 +57,7 @@ import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.anim.SpringAnimationBuilder; import com.android.quickstep.fallback.FallbackRecentsView; import com.android.quickstep.fallback.RecentsState; import com.android.quickstep.util.AppCloseConfig; import com.android.quickstep.util.RectFSpringAnim; import com.android.quickstep.util.TransformParams; import com.android.quickstep.util.TransformParams.BuilderProxy; Loading Loading @@ -298,7 +300,8 @@ public class FallbackSwipeHandler extends } @Override public void update(RectF currentRect, float progress, float radius) { public void update(@Nullable AppCloseConfig config, RectF currentRect, float progress, float radius) { if (mSurfaceControl != null) { currentRect.roundOut(mTempRect); Transaction t = new Transaction(); Loading
quickstep/src/com/android/quickstep/LauncherSwipeHandlerV2.java +119 −8 Original line number Diff line number Diff line Loading @@ -15,26 +15,45 @@ */ package com.android.quickstep; import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY; import static com.android.launcher3.LauncherAnimUtils.VIEW_TRANSLATE_Y; import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.Utilities.dpToPx; import static com.android.launcher3.Utilities.mapToRange; import static com.android.launcher3.anim.Interpolators.LINEAR; import static com.android.launcher3.config.FeatureFlags.PROTOTYPE_APP_CLOSE; import static com.android.launcher3.views.FloatingIconView.SHAPE_PROGRESS_DURATION; import static com.android.launcher3.views.FloatingIconView.getFloatingIconView; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ValueAnimator; import android.content.Context; import android.graphics.RectF; import android.os.UserHandle; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.launcher3.BaseQuickstepLauncher; import com.android.launcher3.Hotseat; import com.android.launcher3.LauncherState; import com.android.launcher3.R; import com.android.launcher3.Workspace; import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.anim.SpringAnimationBuilder; import com.android.launcher3.dragndrop.DragLayer; import com.android.launcher3.states.StateAnimationConfig; import com.android.launcher3.util.DynamicResource; import com.android.launcher3.views.FloatingIconView; import com.android.quickstep.util.AppCloseConfig; import com.android.quickstep.util.RectFSpringAnim; import com.android.quickstep.util.StaggeredWorkspaceAnim; import com.android.quickstep.views.RecentsView; import com.android.quickstep.views.TaskView; import com.android.systemui.plugins.ResourceProvider; import com.android.systemui.shared.system.InputConsumerController; /** Loading Loading @@ -66,24 +85,41 @@ public class LauncherSwipeHandlerV2 extends } else { workspaceView = null; } final RectF iconLocation = new RectF(); boolean canUseWorkspaceView = workspaceView != null && workspaceView.isAttachedToWindow(); FloatingIconView floatingIconView = canUseWorkspaceView ? FloatingIconView.getFloatingIconView(mActivity, workspaceView, true /* hideOriginal */, iconLocation, false /* isOpening */) : null; mActivity.getRootView().setForceHideBackArrow(true); mActivity.setHintUserWillBeActive(); if (canUseWorkspaceView) { final ResourceProvider rp = DynamicResource.provider(mActivity); final float transY = dpToPx(rp.getFloat(R.dimen.swipe_up_trans_y_dp)); float dpPerSecond = dpToPx(rp.getFloat(R.dimen.swipe_up_trans_y_dp_per_s)); final float launcherAlphaMax = rp.getFloat(R.dimen.swipe_up_launcher_alpha_max_progress); RectF iconLocation = new RectF(); FloatingIconView floatingIconView = getFloatingIconView(mActivity, workspaceView, true /* hideOriginal */, iconLocation, false /* isOpening */); // We want the window alpha to be 0 once this threshold is met, so that the // FolderIconView can be seen morphing into the icon shape. float windowAlphaThreshold = 1f - SHAPE_PROGRESS_DURATION; homeAnimFactory = new LauncherHomeAnimationFactory() { // There is a delay in loading the icon, so we need to keep the window // opaque until it is ready. private boolean mIsFloatingIconReady = false; private @Nullable ValueAnimator mBounceBackAnimator; @Override public RectF getWindowTargetRect() { if (PROTOTYPE_APP_CLOSE.get()) { // We want the target rect to be at this offset position, so that all // launcher content can spring back upwards. floatingIconView.setPositionOffsetY(transY); } return iconLocation; } Loading @@ -92,17 +128,92 @@ public class LauncherSwipeHandlerV2 extends anim.addAnimatorListener(floatingIconView); floatingIconView.setOnTargetChangeListener(anim::onTargetPositionChanged); floatingIconView.setFastFinishRunnable(anim::end); if (PROTOTYPE_APP_CLOSE.get()) { mBounceBackAnimator = bounceBackToRestingPosition(); // Use a spring to put drag layer translation back to 0. anim.addAnimatorListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { floatingIconView.setPositionOffsetY(0); mBounceBackAnimator.start(); } }); Workspace workspace = mActivity.getWorkspace(); workspace.setPivotToScaleWithSelf(mActivity.getHotseat()); } } private ValueAnimator bounceBackToRestingPosition() { DragLayer dl = mActivity.getDragLayer(); Workspace workspace = mActivity.getWorkspace(); Hotseat hotseat = mActivity.getHotseat(); final float startValue = transY; final float endValue = 0; // Ensures the velocity is always aligned with the direction. float pixelPerSecond = Math.abs(dpPerSecond) * Math.signum(endValue - transY); ValueAnimator springTransY = new SpringAnimationBuilder(dl.getContext()) .setStiffness(rp.getFloat(R.dimen.swipe_up_trans_y_stiffness)) .setDampingRatio(rp.getFloat(R.dimen.swipe_up_trans_y_damping)) .setMinimumVisibleChange(1f) .setStartValue(startValue) .setEndValue(endValue) .setStartVelocity(pixelPerSecond) .build(dl, VIEW_TRANSLATE_Y); springTransY.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { dl.setTranslationY(0f); dl.setAlpha(1f); SCALE_PROPERTY.set(workspace, 1f); SCALE_PROPERTY.set(hotseat, 1f); } }); return springTransY; } @Override public void update(RectF currentRect, float progress, float radius) { floatingIconView.update(currentRect, 1f, progress, windowAlphaThreshold, radius, false); public boolean keepWindowOpaque() { if (mIsFloatingIconReady || floatingIconView.isVisibleToUser()) { mIsFloatingIconReady = true; return false; } return true; } @Override public void update(@Nullable AppCloseConfig config, RectF currentRect, float progress, float radius) { int fgAlpha = 255; if (config != null && PROTOTYPE_APP_CLOSE.get()) { DragLayer dl = mActivity.getDragLayer(); float translationY = config.getWorkspaceTransY(); dl.setTranslationY(translationY); float alpha = mapToRange(progress, 0, launcherAlphaMax, 0, 1f, LINEAR); dl.setAlpha(Math.min(alpha, 1f)); float scale = Math.min(1f, config.getWorkspaceScale()); SCALE_PROPERTY.set(mActivity.getWorkspace(), scale); SCALE_PROPERTY.set(mActivity.getHotseat(), scale); SCALE_PROPERTY.set(mActivity.getAppsView(), scale); progress = config.getInterpolatedProgress(); fgAlpha = config.getFgAlpha(); } floatingIconView.update(1f, fgAlpha, currentRect, progress, windowAlphaThreshold, radius, false); } @Override public void onCancel() { floatingIconView.fastFinish(); if (mBounceBackAnimator != null) { mBounceBackAnimator.cancel(); } } }; } else { Loading
quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java +28 −6 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.quickstep; import static com.android.launcher3.anim.Interpolators.ACCEL_1_5; import static com.android.launcher3.anim.Interpolators.LINEAR; import static com.android.launcher3.config.FeatureFlags.PROTOTYPE_APP_CLOSE; import android.animation.Animator; import android.content.Context; Loading @@ -26,6 +27,7 @@ import android.graphics.Rect; import android.graphics.RectF; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.UiThread; import com.android.launcher3.DeviceProfile; Loading @@ -35,7 +37,9 @@ import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.touch.PagedOrientationHandler; import com.android.quickstep.util.AnimatorControllerWithResistance; import com.android.quickstep.util.AppCloseConfig; import com.android.quickstep.util.RectFSpringAnim; import com.android.quickstep.util.RectFSpringAnim2; import com.android.quickstep.util.TaskViewSimulator; import com.android.quickstep.util.TransformParams; import com.android.quickstep.util.TransformParams.BuilderProxy; Loading Loading @@ -149,7 +153,10 @@ public abstract class SwipeUpAnimationLogic { public void setAnimation(RectFSpringAnim anim) { } public void update(RectF currentRect, float progress, float radius) { } public boolean keepWindowOpaque() { return false; } public void update(@Nullable AppCloseConfig config, RectF currentRect, float progress, float radius) { } public void onCancel() { } Loading Loading @@ -199,7 +206,14 @@ public abstract class SwipeUpAnimationLogic { homeToWindowPositionMap.invert(windowToHomePositionMap); windowToHomePositionMap.mapRect(startRect); RectFSpringAnim anim = new RectFSpringAnim(startRect, targetRect, mContext); RectFSpringAnim anim; if (PROTOTYPE_APP_CLOSE.get()) { anim = new RectFSpringAnim2(startRect, targetRect, mContext, mTaskViewSimulator.getCurrentCornerRadius(), cropRectF.width() / 2f); } else { anim = new RectFSpringAnim(startRect, targetRect, mContext); } homeAnimationFactory.setAnimation(anim); SpringAnimationRunner runner = new SpringAnimationRunner( Loading Loading @@ -259,18 +273,26 @@ public abstract class SwipeUpAnimationLogic { } @Override public void onUpdate(RectF currentRect, float progress) { public void onUpdate(@Nullable AppCloseConfig config, RectF currentRect, float progress) { mHomeAnim.setPlayFraction(progress); mHomeToWindowPositionMap.mapRect(mWindowCurrentRect, currentRect); mMatrix.setRectToRect(mCropRectF, mWindowCurrentRect, ScaleToFit.FILL); float cornerRadius = Utilities.mapRange(progress, mStartRadius, mEndRadius); float alpha = getWindowAlpha(progress); if (config != null && PROTOTYPE_APP_CLOSE.get()) { alpha = config.getWindowAlpha(); cornerRadius = config.getCornerRadius(); } if (mAnimationFactory.keepWindowOpaque()) { alpha = 1f; } mTransformParams .setTargetAlpha(getWindowAlpha(progress)) .setTargetAlpha(alpha) .setCornerRadius(cornerRadius); mTransformParams.applySurfaceParams(mTransformParams.createSurfaceParams(this)); mAnimationFactory.update(currentRect, progress, mMatrix.mapRadius(cornerRadius)); mAnimationFactory.update(config, currentRect, progress, mMatrix.mapRadius(cornerRadius)); } @Override Loading