From 70e12aa123b47a2856e64b0bc36171ce833f9ec8 Mon Sep 17 00:00:00 2001 From: Wale Ogunwale Date: Thu, 2 Apr 2015 16:13:57 -0700 Subject: [DO NOT MERGE] Fixed NPE when trying to animate a window without display In some cases it is possible for the AppToken.allAppWindows list to get out of sync with the list of windows known to WMS if the client doesn't call Session.remove(Window). This can lead to an NPE when the animation threads runs and the display for the window has been removed. Bug: 19972099 Change-Id: Ifdf9ff2364b96757bba0539394c4a682f64577c9 --- services/core/java/com/android/server/wm/WindowAnimator.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/wm/WindowAnimator.java b/services/core/java/com/android/server/wm/WindowAnimator.java index 64713d988777..e8335112a175 100644 --- a/services/core/java/com/android/server/wm/WindowAnimator.java +++ b/services/core/java/com/android/server/wm/WindowAnimator.java @@ -824,12 +824,16 @@ public class WindowAnimator { if (displayId < 0) { return 0; } - return mService.getDisplayContentLocked(displayId).pendingLayoutChanges; + DisplayContent displayContent = mService.getDisplayContentLocked(displayId); + return (displayContent != null) ? displayContent.pendingLayoutChanges : 0; } void setPendingLayoutChanges(final int displayId, final int changes) { if (displayId >= 0) { - mService.getDisplayContentLocked(displayId).pendingLayoutChanges |= changes; + DisplayContent displayContent = mService.getDisplayContentLocked(displayId); + if (displayContent != null) { + displayContent.pendingLayoutChanges |= changes; + } } } -- cgit v1.2.3-59-g8ed1b