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

Commit fb4656b7 authored by Robin Lee's avatar Robin Lee Committed by Cherrypicker Worker
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
(cherry picked from commit on googleplex-android-review.googlesource.com host: 7da8adaf)
Merged-In: I00dd31606ed08b67666a58f1b3e2f0f3b31fcaa6
parent b5c84e3a
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -964,13 +964,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];
@@ -980,7 +991,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 =
@@ -1029,6 +1040,7 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,

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