mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-04 01:46:49 +00:00
Fix some jank with transitions
- Animations in WorkspacePageIndicator while the app transition was running was causing layer trashing, potentially leading to jank. - Make sure to use a layer in the wallpaper open animation. Test: Open app while indicators are about to fade out. Bug: 75985430 Change-Id: Iad6a511d98dff81b5cde727f4472f0f039ffc4be
This commit is contained in:
@@ -333,10 +333,14 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag
|
||||
launcherAnimator.play(dragLayerAlpha);
|
||||
launcherAnimator.play(dragLayerTransY);
|
||||
mDragLayer.setLayerType(View.LAYER_TYPE_HARDWARE, null);
|
||||
|
||||
// Pause page indicator animations as they lead to layer trashing.
|
||||
mLauncher.getWorkspace().getPageIndicator().pauseAnimations();
|
||||
endListener = () -> {
|
||||
mDragLayer.setLayerType(View.LAYER_TYPE_NONE, null);
|
||||
mDragLayer.setAlpha(1);
|
||||
mDragLayer.setTranslationY(0);
|
||||
mLauncher.getWorkspace().getPageIndicator().skipAnimationsToEnd();
|
||||
};
|
||||
}
|
||||
return new Pair<>(launcherAnimator, endListener);
|
||||
@@ -699,6 +703,13 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag
|
||||
workspaceAnimator.setStartDelay(LAUNCHER_RESUME_START_DELAY);
|
||||
workspaceAnimator.setDuration(333);
|
||||
workspaceAnimator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
|
||||
currentPage.setLayerType(View.LAYER_TYPE_HARDWARE, null);
|
||||
workspaceAnimator.addListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
currentPage.setLayerType(View.LAYER_TYPE_NONE, null);
|
||||
}
|
||||
});
|
||||
|
||||
// Animate the shelf in two parts: slide in, and overeshoot.
|
||||
AllAppsTransitionController allAppsController = mLauncher.getAllAppsController();
|
||||
@@ -720,7 +731,6 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag
|
||||
allAppsOvershoot.setDuration(153);
|
||||
allAppsOvershoot.setInterpolator(Interpolators.OVERSHOOT_0);
|
||||
|
||||
|
||||
anim.play(workspaceAnimator);
|
||||
anim.playSequentially(allAppsSlideIn, allAppsOvershoot);
|
||||
anim.addListener(mReapplyStateListener);
|
||||
|
||||
@@ -41,8 +41,9 @@ public class WorkspacePageIndicator extends View implements Insettable, PageIndi
|
||||
private static final int LINE_ALPHA_ANIMATOR_INDEX = 0;
|
||||
private static final int NUM_PAGES_ANIMATOR_INDEX = 1;
|
||||
private static final int TOTAL_SCROLL_ANIMATOR_INDEX = 2;
|
||||
private static final int ANIMATOR_COUNT = 3;
|
||||
|
||||
private ValueAnimator[] mAnimators = new ValueAnimator[3];
|
||||
private ValueAnimator[] mAnimators = new ValueAnimator[ANIMATOR_COUNT];
|
||||
|
||||
private final Handler mDelayedLineFadeHandler = new Handler(Looper.getMainLooper());
|
||||
private final Launcher mLauncher;
|
||||
@@ -232,6 +233,28 @@ public class WorkspacePageIndicator extends View implements Insettable, PageIndi
|
||||
mAnimators[animatorIndex].start();
|
||||
}
|
||||
|
||||
/**
|
||||
* Pauses all currently running animations.
|
||||
*/
|
||||
public void pauseAnimations() {
|
||||
for (int i = 0; i < ANIMATOR_COUNT; i++) {
|
||||
if (mAnimators[i] != null) {
|
||||
mAnimators[i].pause();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Force-ends all currently running or paused animations.
|
||||
*/
|
||||
public void skipAnimationsToEnd() {
|
||||
for (int i = 0; i < ANIMATOR_COUNT; i++) {
|
||||
if (mAnimators[i] != null) {
|
||||
mAnimators[i].end();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInsets(Rect insets) {
|
||||
DeviceProfile grid = mLauncher.getDeviceProfile();
|
||||
|
||||
Reference in New Issue
Block a user