mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-02 17:06:49 +00:00
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
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user