Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0d5daafd authored by Jon Miranda's avatar Jon Miranda
Browse files

Prevent blinking when user presses home.

Intead of finishing the entire animation (launcher animation and
window animation), we finish just the launcher animation.

Bug: 73071035
Change-Id: Ied84cb641f3cedc367433ad99d21ab1b258ae7f8
parent 03c8e3ff
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@
package com.android.launcher3;

import android.animation.AnimatorSet;
import android.os.Handler;

import com.android.systemui.shared.system.RemoteAnimationRunnerCompat;

+12 −12
Original line number Diff line number Diff line
@@ -88,7 +88,7 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag
    private ImageView mFloatingView;
    private boolean mIsRtl;

    private Animator mCurrentAnimator;
    private LauncherTransitionAnimator mCurrentAnimator;

    public LauncherAppTransitionManagerImpl(Context context) {
        mLauncher = Launcher.getLauncher(context);
@@ -110,7 +110,7 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag
        mDeviceProfile = dp;
    }

    private void setCurrentAnimator(Animator animator) {
    private void setCurrentAnimator(LauncherTransitionAnimator animator) {
        if (mCurrentAnimator != null && mCurrentAnimator.isRunning()) {
            mCurrentAnimator.cancel();
        }
@@ -118,9 +118,9 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag
    }

    @Override
    public void finishAnimation() {
    public void finishLauncherAnimation() {
        if (mCurrentAnimator != null && mCurrentAnimator.isRunning()) {
            mCurrentAnimator.end();
            mCurrentAnimator.finishLauncherAnimation();
        }
        mCurrentAnimator = null;
    }
@@ -140,10 +140,10 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag
                        // Post at front of queue ignoring sync barriers to make sure it gets
                        // processed before the next frame.
                        postAtFrontOfQueueAsynchronously(v.getHandler(), () -> {
                            mAnimator = new AnimatorSet();
                            setCurrentAnimator(mAnimator);
                            mAnimator.play(getLauncherAnimators(v));
                            mAnimator.play(getWindowAnimators(v, targets));
                            LauncherTransitionAnimator animator = new LauncherTransitionAnimator(
                                    getLauncherAnimators(v), getWindowAnimators(v, targets));
                            setCurrentAnimator(animator);
                            mAnimator = animator.getAnimatorSet();
                            mAnimator.addListener(new AnimatorListenerAdapter() {
                                @Override
                                public void onAnimationEnd(Animator animation) {
@@ -450,16 +450,16 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag
                        return;
                    }

                    mAnimator = new AnimatorSet();
                    setCurrentAnimator(mAnimator);
                    LauncherTransitionAnimator animator = new LauncherTransitionAnimator(
                            getLauncherResumeAnimation(), getClosingWindowAnimators(targets));
                    setCurrentAnimator(animator);
                    mAnimator = animator.getAnimatorSet();
                    mAnimator.addListener(new AnimatorListenerAdapter() {
                        @Override
                        public void onAnimationEnd(Animator animation) {
                            finishedCallback.run();
                        }
                    });
                    mAnimator.play(getClosingWindowAnimators(targets));
                    mAnimator.play(getLauncherResumeAnimation());
                    mAnimator.start();

                    // Because t=0 has the app icon in its original spot, we can skip the
+58 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.launcher3;

import android.animation.Animator;
import android.animation.AnimatorSet;

/**
 * Creates an AnimatorSet consisting on one Animator for Launcher transition, and one Animator for
 * the Window transitions.
 *
 * Allows for ending the Launcher animator without ending the Window animator.
 */
public class LauncherTransitionAnimator {

    private AnimatorSet mAnimatorSet;
    private Animator mLauncherAnimator;
    private Animator mWindowAnimator;

    LauncherTransitionAnimator(Animator launcherAnimator, Animator windowAnimator) {
        mLauncherAnimator = launcherAnimator;
        mWindowAnimator = windowAnimator;

        mAnimatorSet = new AnimatorSet();
        mAnimatorSet.play(launcherAnimator);
        mAnimatorSet.play(windowAnimator);
    }

    public AnimatorSet getAnimatorSet() {
        return mAnimatorSet;
    }

    public void cancel() {
        mAnimatorSet.cancel();
    }

    public boolean isRunning() {
        return mAnimatorSet.isRunning();
    }

    public void finishLauncherAnimation() {
        mLauncherAnimator.end();
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -65,7 +65,7 @@ public class LauncherAppTransitionManager {
        return getDefaultActivityLaunchOptions(launcher, v);
    }

    /** Cancels the current transition animation */
    public void finishAnimation() {
    /** Cancels the current Launcher transition animation */
    public void finishLauncherAnimation() {
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -276,7 +276,7 @@ public class LauncherStateManager {
        // finish it and let this state animation take over.
        LauncherAppTransitionManager transitionManager = mLauncher.getAppTransitionManager();
        if (transitionManager != null) {
            transitionManager.finishAnimation();
            transitionManager.finishLauncherAnimation();
        }
    }