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

Commit ddcbba26 authored by Robin Lee's avatar Robin Lee
Browse files

Remove played transitions from KGTransitionHandler

This was leaking binders.

Test: atest --iterations 100 KeyguardTransitionTests # and check count
Bug: 282855967
Change-Id: Ie91d7d8e150093d6b2a8d3d731eb22a9393d1ab8
parent 20c31b7b
Loading
Loading
Loading
Loading
+18 −18
Original line number Diff line number Diff line
@@ -181,6 +181,7 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler
                        public void onTransitionFinished(
                                WindowContainerTransaction wct, SurfaceControl.Transaction sct) {
                            mMainExecutor.execute(() -> {
                                mStartedTransitions.remove(transition);
                                finishCallback.onTransitionFinished(wct, null);
                            });
                        }
@@ -212,14 +213,17 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler
            // the device sleeping/waking, so it's best to ignore this and keep playing anyway.
            return;
        } else {
            finishAnimationImmediately(currentTransition);
            finishAnimationImmediately(currentTransition, playing);
        }
    }

    @Override
    public void onTransitionConsumed(IBinder transition, boolean aborted,
            SurfaceControl.Transaction finishTransaction) {
        finishAnimationImmediately(transition);
        final IRemoteTransition playing = mStartedTransitions.remove(transition);
        if (playing != null) {
            finishAnimationImmediately(transition, playing);
        }
    }

    @Nullable
@@ -229,10 +233,7 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler
        return null;
    }

    private void finishAnimationImmediately(IBinder transition) {
        final IRemoteTransition playing = mStartedTransitions.get(transition);

        if (playing != null) {
    private void finishAnimationImmediately(IBinder transition, IRemoteTransition playing) {
        final IBinder fakeTransition = new Binder();
        final TransitionInfo fakeInfo = new TransitionInfo(TRANSIT_SLEEP, 0x0);
        final SurfaceControl.Transaction fakeT = new SurfaceControl.Transaction();
@@ -245,7 +246,6 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler
            Log.wtf(TAG, "RemoteException thrown from KeyguardService transition", e);
        }
    }
    }

    private static class FakeFinishCallback extends IRemoteTransitionFinishedCallback.Stub {
        @Override