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

Commit 7da8adaf authored by Robin Lee's avatar Robin Lee
Browse files

Guarantee transitions always update occlude status

Previously if the dream transition animation was not played, because eg.
dream was already showing before Keyguard but a transition was still set,
Keyguard would not log that it needs to be occluded now.

onAnimationStart is wrapped and return value checked to have a fallback
in case onAnimationStart doesn' startAnAnimation.

Change-Id: I00dd31606ed08b67666a58f1b3e2f0f3b31fcaa6
Test: Currently manual - start dream and then lockNow(null)
Bug: 270414686
parent 1621d474
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -966,13 +966,24 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
                public void onAnimationStart(int transit, RemoteAnimationTarget[] apps,
                        RemoteAnimationTarget[] wallpapers, RemoteAnimationTarget[] nonApps,
                        IRemoteAnimationFinishedCallback finishedCallback) throws RemoteException {
                    if (!handleOnAnimationStart(
                                transit, apps, wallpapers, nonApps, finishedCallback)) {
                        // Usually we rely on animation completion to synchronize occluded status,
                        // but there was no animation to play, so just update it now.
                        setOccluded(true /* isOccluded */, false /* animate */);
                    }
                }

                private boolean handleOnAnimationStart(int transit, RemoteAnimationTarget[] apps,
                        RemoteAnimationTarget[] wallpapers, RemoteAnimationTarget[] nonApps,
                        IRemoteAnimationFinishedCallback finishedCallback) throws RemoteException {
                    if (apps == null || apps.length == 0 || apps[0] == null) {
                        if (DEBUG) {
                            Log.d(TAG, "No apps provided to the OccludeByDream runner; "
                                    + "skipping occluding animation.");
                        }
                        finishedCallback.onAnimationFinished();
                        return;
                        return false;
                    }

                    final RemoteAnimationTarget primary = apps[0];
@@ -982,7 +993,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
                        Log.w(TAG, "The occluding app isn't Dream; "
                                + "finishing up. Please check that the config is correct.");
                        finishedCallback.onAnimationFinished();
                        return;
                        return false;
                    }

                    final SyncRtSurfaceTransactionApplier applier =
@@ -1031,6 +1042,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,

                        mOccludeByDreamAnimator.start();
                    });
                    return true;
                }
            };