From 39b07fd66cb86128011a04303fb7a08a52640af8 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 27 Oct 2022 13:19:47 -0700 Subject: [PATCH] Fixing background jump when closing a widget We do not add background animation when opening target is translucent Added additional check to not animate background if launcher is not closing (which is already a subset of all-targets-translucent) Also removing reverse background animation from widgets, similar to app-icons as it is never added for launcherNotClosing path Bug: 242379946 Test: Added translucent activtiy and widget and verified manually that the behavior does not change Change-Id: Icda8007c0063295bf8431c00a0f0b665ecdef109 --- .../launcher3/QuickstepTransitionManager.java | 57 ++++++------------- tests/AndroidManifest-common.xml | 23 +++++++- .../res/layout/test_layout_appwidget_blue.xml | 1 + .../testcomponent/AppWidgetWithDialog.java | 41 +++++++++++++ .../testcomponent/DialogTestActivity.java | 23 ++++++++ 5 files changed, 105 insertions(+), 40 deletions(-) create mode 100644 tests/src/com/android/launcher3/testcomponent/AppWidgetWithDialog.java create mode 100644 tests/src/com/android/launcher3/testcomponent/DialogTestActivity.java diff --git a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java index 938aa5e834..c7791757d0 100644 --- a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java +++ b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java @@ -364,13 +364,10 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener // before our internal listeners. mLauncher.getStateManager().setCurrentAnimation(anim); - final int rotationChange = getRotationChange(appTargets); // Note: the targetBounds are relative to the launcher int startDelay = getSingleFrameMs(mLauncher); - Rect windowTargetBounds = getWindowTargetBounds(appTargets, rotationChange); - Animator windowAnimator = getOpeningWindowAnimators(v, appTargets, wallpaperTargets, - nonAppTargets, windowTargetBounds, areAllTargetsTranslucent(appTargets), - rotationChange); + Animator windowAnimator = getOpeningWindowAnimators( + v, appTargets, wallpaperTargets, nonAppTargets, launcherClosing); windowAnimator.setStartDelay(startDelay); anim.play(windowAnimator); if (launcherClosing) { @@ -384,17 +381,6 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener launcherContentAnimator.second.run(); } }); - } else { - anim.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationStart(Animator animation) { - mLauncher.addOnResumeCallback(() -> - ObjectAnimator.ofFloat(mLauncher.getDepthController().stateDepth, - MULTI_PROPERTY_VALUE, - mLauncher.getStateManager().getState().getDepth( - mLauncher)).start()); - } - }); } } @@ -403,23 +389,11 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener @NonNull LauncherAppWidgetHostView v, @NonNull RemoteAnimationTarget[] appTargets, @NonNull RemoteAnimationTarget[] wallpaperTargets, - @NonNull RemoteAnimationTarget[] nonAppTargets) { + @NonNull RemoteAnimationTarget[] nonAppTargets, + boolean launcherClosing) { mLauncher.getStateManager().setCurrentAnimation(anim); - - Rect windowTargetBounds = getWindowTargetBounds(appTargets, getRotationChange(appTargets)); - anim.play(getOpeningWindowAnimatorsForWidget(v, appTargets, wallpaperTargets, nonAppTargets, - windowTargetBounds, areAllTargetsTranslucent(appTargets))); - - anim.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationStart(Animator animation) { - mLauncher.addOnResumeCallback(() -> - ObjectAnimator.ofFloat(mLauncher.getDepthController().stateDepth, - MULTI_PROPERTY_VALUE, - mLauncher.getStateManager().getState().getDepth( - mLauncher)).start()); - } - }); + anim.play(getOpeningWindowAnimatorsForWidget( + v, appTargets, wallpaperTargets, nonAppTargets, launcherClosing)); } /** @@ -657,7 +631,11 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener RemoteAnimationTarget[] appTargets, RemoteAnimationTarget[] wallpaperTargets, RemoteAnimationTarget[] nonAppTargets, - Rect windowTargetBounds, boolean appTargetsAreTranslucent, int rotationChange) { + boolean launcherClosing) { + int rotationChange = getRotationChange(appTargets); + Rect windowTargetBounds = getWindowTargetBounds(appTargets, rotationChange); + boolean appTargetsAreTranslucent = areAllTargetsTranslucent(appTargets); + RectF launcherIconBounds = new RectF(); FloatingIconView floatingView = FloatingIconView.getFloatingIconView(mLauncher, v, !appTargetsAreTranslucent, launcherIconBounds, true /* isOpening */); @@ -853,7 +831,6 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener .setShadowRadius(mShadowRadius.value); } else if (target.mode == MODE_CLOSING) { if (target.localBounds != null) { - final Rect localBounds = target.localBounds; tmpPos.set(target.localBounds.left, target.localBounds.top); } else { tmpPos.set(target.position.x, target.position.y); @@ -898,7 +875,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener // If app targets are translucent, do not animate the background as it causes a visible // flicker when it resets itself at the end of its animation. - if (appTargetsAreTranslucent) { + if (appTargetsAreTranslucent || !launcherClosing) { animatorSet.play(appAnimator); } else { animatorSet.playTogether(appAnimator, getBackgroundAnimator()); @@ -909,8 +886,10 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener private Animator getOpeningWindowAnimatorsForWidget(LauncherAppWidgetHostView v, RemoteAnimationTarget[] appTargets, RemoteAnimationTarget[] wallpaperTargets, - RemoteAnimationTarget[] nonAppTargets, Rect windowTargetBounds, - boolean appTargetsAreTranslucent) { + RemoteAnimationTarget[] nonAppTargets, boolean launcherClosing) { + Rect windowTargetBounds = getWindowTargetBounds(appTargets, getRotationChange(appTargets)); + boolean appTargetsAreTranslucent = areAllTargetsTranslucent(appTargets); + final RectF widgetBackgroundBounds = new RectF(); final Rect appWindowCrop = new Rect(); final Matrix matrix = new Matrix(); @@ -1037,7 +1016,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener // If app targets are translucent, do not animate the background as it causes a visible // flicker when it resets itself at the end of its animation. - if (appTargetsAreTranslucent) { + if (appTargetsAreTranslucent || !launcherClosing) { animatorSet.play(appAnimator); } else { animatorSet.playTogether(appAnimator, getBackgroundAnimator()); @@ -1717,7 +1696,7 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener final boolean skipFirstFrame; if (launchingFromWidget) { composeWidgetLaunchAnimator(anim, (LauncherAppWidgetHostView) mV, appTargets, - wallpaperTargets, nonAppTargets); + wallpaperTargets, nonAppTargets, launcherClosing); addCujInstrumentation( anim, InteractionJankMonitorWrapper.CUJ_APP_LAUNCH_FROM_WIDGET); skipFirstFrame = true; diff --git a/tests/AndroidManifest-common.xml b/tests/AndroidManifest-common.xml index ae1060ec92..4af8468765 100644 --- a/tests/AndroidManifest-common.xml +++ b/tests/AndroidManifest-common.xml @@ -61,6 +61,17 @@ android:resource="@xml/appwidget_with_config"/> + + + + + + + - + + + + + +