From 3380ab3053c87fa952c99a42b889bbf3158c0e97 Mon Sep 17 00:00:00 2001 From: shawnlin Date: Sat, 22 May 2021 21:18:16 +0800 Subject: [PATCH] Support the nav animation in widget launch remote animation Launcher now support remote animation for widget but doesn't add the nav animation for this type of animation. Add the nav animation in widget launch remote animation in launcher. Bug: 185303414 Test: manual - launch a widget in launcher and observe the nav bar Change-Id: I11f4bd75b9624118b8ffef09c99f54fc7f1fbbca --- .../launcher3/QuickstepTransitionManager.java | 36 +++++++++++++++---- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java index 80754a00f4..ec77b9b902 100644 --- a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java +++ b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java @@ -691,7 +691,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener floatingIconBounds.right += offsetX; floatingIconBounds.bottom += offsetY; - SurfaceParams[] params = new SurfaceParams[appTargets.length]; + ArrayList params = new ArrayList<>(); for (int i = appTargets.length - 1; i >= 0; i--) { RemoteAnimationTargetCompat target = appTargets[i]; SurfaceParams.Builder builder = new SurfaceParams.Builder(target.leash); @@ -743,9 +743,8 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener .withWindowCrop(crop) .withAlpha(1f); } - params[i] = builder.build(); + params.add(builder.build()); } - surfaceApplier.scheduleApply(params); if (navBarTarget != null) { final SurfaceParams.Builder navBuilder = @@ -759,8 +758,10 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener } else { navBuilder.withAlpha(mNavFadeOut.value); } - surfaceApplier.scheduleApply(navBuilder.build()); + params.add(navBuilder.build()); } + + surfaceApplier.scheduleApply(params.toArray(new SurfaceParams[params.size()])); } }); @@ -791,6 +792,8 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener SurfaceTransactionApplier surfaceApplier = new SurfaceTransactionApplier(floatingView); openingTargets.addReleaseCheck(surfaceApplier); + RemoteAnimationTargetCompat navBarTarget = openingTargets.getNavBarRemoteAnimationTarget(); + AnimatorSet animatorSet = new AnimatorSet(); ValueAnimator appAnimator = ValueAnimator.ofFloat(0, 1); appAnimator.setDuration(APP_LAUNCH_DURATION); @@ -832,6 +835,11 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener windowTargetBounds.height(), 0 /* delay */, APP_LAUNCH_DURATION, EXAGGERATED_EASE); + final FloatProp mNavFadeOut = new FloatProp(1f, 0f, 0, ANIMATION_NAV_FADE_OUT_DURATION, + NAV_FADE_OUT_INTERPOLATOR); + final FloatProp mNavFadeIn = new FloatProp(0f, 1f, ANIMATION_DELAY_NAV_FADE_IN, + ANIMATION_NAV_FADE_IN_DURATION, NAV_FADE_IN_INTERPOLATOR); + @Override public void onUpdate(float percent) { widgetBackgroundBounds.set(mDx.value - mWidth.value / 2f, @@ -847,7 +855,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener matrix.postScale(mAppWindowScale, mAppWindowScale, widgetBackgroundBounds.left, widgetBackgroundBounds.top); - SurfaceParams[] params = new SurfaceParams[appTargets.length]; + ArrayList params = new ArrayList<>(); float floatingViewAlpha = appTargetsAreTranslucent ? 1 - mPreviewAlpha.value : 1; for (int i = appTargets.length - 1; i >= 0; i--) { RemoteAnimationTargetCompat target = appTargets[i]; @@ -861,9 +869,23 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener .withAlpha(mPreviewAlpha.value) .withCornerRadius(mWindowRadius.value / mAppWindowScale); } - params[i] = builder.build(); + params.add(builder.build()); } - surfaceApplier.scheduleApply(params); + + if (navBarTarget != null) { + final SurfaceParams.Builder navBuilder = + new SurfaceParams.Builder(navBarTarget.leash); + if (mNavFadeIn.value > mNavFadeIn.getStartValue()) { + navBuilder.withMatrix(matrix) + .withWindowCrop(appWindowCrop) + .withAlpha(mNavFadeIn.value); + } else { + navBuilder.withAlpha(mNavFadeOut.value); + } + params.add(navBuilder.build()); + } + + surfaceApplier.scheduleApply(params.toArray(new SurfaceParams[params.size()])); } });