Merge "Remove played transitions from KGTransitionHandler" into udc-dev

This commit is contained in:
Robin Lee
2023-05-26 12:53:49 +00:00
committed by Android (Google) Code Review

View File

@@ -186,6 +186,7 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler
public void onTransitionFinished( public void onTransitionFinished(
WindowContainerTransaction wct, SurfaceControl.Transaction sct) { WindowContainerTransaction wct, SurfaceControl.Transaction sct) {
mMainExecutor.execute(() -> { mMainExecutor.execute(() -> {
mStartedTransitions.remove(transition);
finishCallback.onTransitionFinished(wct, null); finishCallback.onTransitionFinished(wct, null);
}); });
} }
@@ -206,7 +207,7 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler
final IRemoteTransition playing = mStartedTransitions.get(currentTransition); final IRemoteTransition playing = mStartedTransitions.get(currentTransition);
if (playing == null) { if (playing == null) {
ProtoLog.e(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, ProtoLog.e(ShellProtoLogGroup.WM_SHELL_TRANSITIONS,
"unknown keyguard transition %s", currentTransition); "unknown keyguard transition %s", currentTransition);
return; return;
} }
@@ -217,14 +218,17 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler
// the device sleeping/waking, so it's best to ignore this and keep playing anyway. // the device sleeping/waking, so it's best to ignore this and keep playing anyway.
return; return;
} else { } else {
finishAnimationImmediately(currentTransition); finishAnimationImmediately(currentTransition, playing);
} }
} }
@Override @Override
public void onTransitionConsumed(IBinder transition, boolean aborted, public void onTransitionConsumed(IBinder transition, boolean aborted,
SurfaceControl.Transaction finishTransaction) { SurfaceControl.Transaction finishTransaction) {
finishAnimationImmediately(transition); final IRemoteTransition playing = mStartedTransitions.remove(transition);
if (playing != null) {
finishAnimationImmediately(transition, playing);
}
} }
@Nullable @Nullable
@@ -234,21 +238,17 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler
return null; return null;
} }
private void finishAnimationImmediately(IBinder transition) { private void finishAnimationImmediately(IBinder transition, IRemoteTransition playing) {
final IRemoteTransition playing = mStartedTransitions.get(transition); final IBinder fakeTransition = new Binder();
final TransitionInfo fakeInfo = new TransitionInfo(TRANSIT_SLEEP, 0x0);
if (playing != null) { final SurfaceControl.Transaction fakeT = new SurfaceControl.Transaction();
final IBinder fakeTransition = new Binder(); final FakeFinishCallback fakeFinishCb = new FakeFinishCallback();
final TransitionInfo fakeInfo = new TransitionInfo(TRANSIT_SLEEP, 0x0); try {
final SurfaceControl.Transaction fakeT = new SurfaceControl.Transaction(); playing.mergeAnimation(fakeTransition, fakeInfo, fakeT, transition, fakeFinishCb);
final FakeFinishCallback fakeFinishCb = new FakeFinishCallback(); } catch (RemoteException e) {
try { // There is no good reason for this to happen because the player is a local object
playing.mergeAnimation(fakeTransition, fakeInfo, fakeT, transition, fakeFinishCb); // implementing an AIDL interface.
} catch (RemoteException e) { Log.wtf(TAG, "RemoteException thrown from KeyguardService transition", e);
// There is no good reason for this to happen because the player is a local object
// implementing an AIDL interface.
Log.wtf(TAG, "RemoteException thrown from KeyguardService transition", e);
}
} }
} }