diff options
-rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 14 | ||||
-rw-r--r-- | services/core/java/com/android/server/wm/WindowStateAnimator.java | 12 |
2 files changed, 22 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 3b11c4e..332097b 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -917,6 +917,10 @@ public class WindowManagerService extends IWindowManager.Stub final IWindow client = win.mClient; final WindowToken token = win.mToken; final DisplayContent displayContent = win.getDisplayContent(); + if (displayContent == null) { + // It doesn't matter this display is going away. + return 0; + } final WindowList windows = win.getWindowList(); final int N = windows.size(); @@ -1094,6 +1098,9 @@ public class WindowManagerService extends IWindowManager.Stub private void addAttachedWindowToListLocked(final WindowState win, boolean addToToken) { final WindowToken token = win.mToken; final DisplayContent displayContent = win.getDisplayContent(); + if (displayContent == null) { + return; + } final WindowState attached = win.mAttachedWindow; WindowList tokenWindowList = getTokenWindowsOnDisplay(token, displayContent); @@ -2251,6 +2258,11 @@ public class WindowManagerService extends IWindowManager.Stub return WindowManagerGlobal.ADD_APP_EXITING; } + if (win.getDisplayContent() == null) { + Slog.w(TAG, "Adding window to Display that has been removed."); + return WindowManagerGlobal.ADD_INVALID_DISPLAY; + } + mPolicy.adjustWindowParamsLw(win.mAttrs); win.setShowToOwnerOnlyLocked(mPolicy.checkShowToOwnerOnly(attrs)); @@ -2744,7 +2756,7 @@ public class WindowManagerService extends IWindowManager.Stub return; } - final DisplayInfo displayInfo = window.getDisplayContent().getDisplayInfo(); + final DisplayInfo displayInfo = displayContent.getDisplayInfo(); final RectF dispRect = new RectF(0, 0, displayInfo.logicalWidth, displayInfo.logicalHeight); matrix.mapRect(dispRect); diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index 93f6d22..1ff0afb 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -171,9 +171,15 @@ class WindowStateAnimator { mAnimator = service.mAnimator; mPolicy = service.mPolicy; mContext = service.mContext; - final DisplayInfo displayInfo = win.getDisplayContent().getDisplayInfo(); - mAnimDw = displayInfo.appWidth; - mAnimDh = displayInfo.appHeight; + final DisplayContent displayContent = win.getDisplayContent(); + if (displayContent != null) { + final DisplayInfo displayInfo = displayContent.getDisplayInfo(); + mAnimDw = displayInfo.appWidth; + mAnimDh = displayInfo.appHeight; + } else { + Slog.w(TAG, "WindowStateAnimator ctor: Display has been removed"); + // This is checked on return and dealt with. + } mWin = win; mAttachedWinAnimator = win.mAttachedWindow == null |