Fix NPE when creating remote animations
Test: go/wm-smoke
Bug: 72302602
Change-Id: Ifbae370ea559a9fda5ca442ceef0f6db8229466b
(cherry picked from commit 1777021fcf989c0a1d2b7aa533a7b464ad85a807)
diff --git a/services/core/java/com/android/server/wm/RemoteAnimationController.java b/services/core/java/com/android/server/wm/RemoteAnimationController.java
index 688b4ff..8515dcb 100644
--- a/services/core/java/com/android/server/wm/RemoteAnimationController.java
+++ b/services/core/java/com/android/server/wm/RemoteAnimationController.java
@@ -99,11 +99,15 @@
}
private RemoteAnimationTarget[] createAnimations() {
- final RemoteAnimationTarget[] result = new RemoteAnimationTarget[mPendingAnimations.size()];
+ final ArrayList<RemoteAnimationTarget> targets = new ArrayList<>();
for (int i = mPendingAnimations.size() - 1; i >= 0; i--) {
- result[i] = mPendingAnimations.get(i).createRemoteAppAnimation();
+ final RemoteAnimationTarget target =
+ mPendingAnimations.get(i).createRemoteAppAnimation();
+ if (target != null) {
+ targets.add(target);
+ }
}
- return result;
+ return targets.toArray(new RemoteAnimationTarget[targets.size()]);
}
private void onAnimationFinished() {
@@ -145,9 +149,17 @@
}
RemoteAnimationTarget createRemoteAppAnimation() {
- return new RemoteAnimationTarget(mAppWindowToken.getTask().mTaskId, getMode(),
+ final Task task = mAppWindowToken.getTask();
+ final WindowState mainWindow = mAppWindowToken.findMainWindow();
+ if (task == null) {
+ return null;
+ }
+ if (mainWindow == null) {
+ return null;
+ }
+ return new RemoteAnimationTarget(task.mTaskId, getMode(),
mCapturedLeash, !mAppWindowToken.fillsParent(),
- mAppWindowToken.findMainWindow().mWinAnimator.mLastClipRect,
+ mainWindow.mWinAnimator.mLastClipRect,
mAppWindowToken.getPrefixOrderIndex(), mPosition, mStackBounds);
}