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

Commit 0258153a authored by Matt Pietal's avatar Matt Pietal Committed by Automerger Merge Worker
Browse files

Merge "Don't run remote animations before sysui is ready" into udc-dev am:...

Merge "Don't run remote animations before sysui is ready" into udc-dev am: 06b3270f am: 62813cb7

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23515976



Change-Id: I937d6bfa1474189c656758f946348a1d4d428a65
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 7a25ffea 62813cb7
Loading
Loading
Loading
Loading
+31 −6
Original line number Diff line number Diff line
@@ -94,7 +94,6 @@ import android.view.WindowManager;
import android.view.WindowManagerPolicyConstants;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.window.IRemoteTransition;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -162,7 +161,6 @@ import dagger.Lazy;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Optional;
import java.util.concurrent.Executor;

/**
@@ -1913,19 +1911,19 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
    }

    public IRemoteAnimationRunner getExitAnimationRunner() {
        return mExitAnimationRunner;
        return validatingRemoteAnimationRunner(mExitAnimationRunner);
    }

    public IRemoteAnimationRunner getOccludeAnimationRunner() {
        return mOccludeAnimationRunner;
        return validatingRemoteAnimationRunner(mOccludeAnimationRunner);
    }

    public IRemoteAnimationRunner getOccludeByDreamAnimationRunner() {
        return mOccludeByDreamAnimationRunner;
        return validatingRemoteAnimationRunner(mOccludeByDreamAnimationRunner);
    }

    public IRemoteAnimationRunner getUnoccludeAnimationRunner() {
        return mUnoccludeAnimationRunner;
        return validatingRemoteAnimationRunner(mUnoccludeAnimationRunner);
    }

    public boolean isHiding() {
@@ -3439,6 +3437,10 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
        Trace.traceCounter(Trace.TRACE_TAG_APP, "pendingLock", mPendingLock ? 1 : 0);
    }

    private boolean isViewRootReady() {
        return mKeyguardViewControllerLazy.get().getViewRootImpl() != null;
    }

    public void addStateMonitorCallback(IKeyguardStateCallback callback) {
        synchronized (this) {
            mKeyguardStateCallbacks.add(callback);
@@ -3541,4 +3543,27 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
            mInteractionJankMonitor.cancel(CUJ_LOCKSCREEN_OCCLUSION);
        }
    }

    private IRemoteAnimationRunner validatingRemoteAnimationRunner(IRemoteAnimationRunner wrapped) {
        return new IRemoteAnimationRunner.Stub() {
            @Override
            public void onAnimationCancelled() throws RemoteException {
                wrapped.onAnimationCancelled();
            }

            @Override
            public void onAnimationStart(int transit, RemoteAnimationTarget[] apps,
                                         RemoteAnimationTarget[] wallpapers,
                                         RemoteAnimationTarget[] nonApps,
                                         IRemoteAnimationFinishedCallback finishedCallback)
                    throws RemoteException {
                if (!isViewRootReady()) {
                    Log.w(TAG, "Skipping remote animation - view root not ready");
                    return;
                }

                wrapped.onAnimationStart(transit, apps, wallpapers, nonApps, finishedCallback);
            }
        };
    }
}