From bea12bdc2e6d2b1158c1faa58a8197d5e971a817 Mon Sep 17 00:00:00 2001 From: Craig Mautner Date: Mon, 20 Aug 2012 10:18:34 -0700 Subject: [PATCH] Ensure that mAllAppWinAnimators is not null. The method showAllWindowsLocked can be called from the layout side of the WindowManagerService. Previously the AppWindowAnimator member mAllAppWinAnimators was created on the animation side. If showAllWindowsLocked was called before the first animation of the activity an NPE would occur. This fix creates mAllAppWinAnimators when the AppWindowAnimator is created and also updates it with current values before calling showAllWindowsLocked. Fixes bug 6917136. Change-Id: If3ace22022b65c6888bbb9d0575efe9a45d86475 --- .../com/android/server/wm/AppWindowAnimator.java | 2 +- .../java/com/android/server/wm/WindowAnimator.java | 4 ++-- .../android/server/wm/WindowManagerService.java | 14 +++++++++++--- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/services/java/com/android/server/wm/AppWindowAnimator.java b/services/java/com/android/server/wm/AppWindowAnimator.java index 691e2aa71c638..c25f010e41d8c 100644 --- a/services/java/com/android/server/wm/AppWindowAnimator.java +++ b/services/java/com/android/server/wm/AppWindowAnimator.java @@ -47,7 +47,7 @@ public class AppWindowAnimator { final Transformation thumbnailTransformation = new Transformation(); /** WindowStateAnimator from mAppAnimator.allAppWindows as of last performLayout */ - ArrayList mAllAppWinAnimators; + ArrayList mAllAppWinAnimators = new ArrayList(); static final Animation sDummyAnimation = new DummyAnimation(); diff --git a/services/java/com/android/server/wm/WindowAnimator.java b/services/java/com/android/server/wm/WindowAnimator.java index 0dbe692bafbcd..1defa49b64b14 100644 --- a/services/java/com/android/server/wm/WindowAnimator.java +++ b/services/java/com/android/server/wm/WindowAnimator.java @@ -190,8 +190,8 @@ public class WindowAnimator { for (int i = 0; i < N; i++) { final AppWindowAnimParams params = layoutToAnim.mAppWindowAnimParams.get(i); AppWindowAnimator appAnimator = params.mAppAnimator; - appAnimator.mAllAppWinAnimators = - new ArrayList(params.mWinAnimators); + appAnimator.mAllAppWinAnimators.clear(); + appAnimator.mAllAppWinAnimators.addAll(params.mWinAnimators); mAppAnimators.add(appAnimator); } } diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index c1884dabb0bb0..b4bab216b5876 100755 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -8367,15 +8367,23 @@ public class WindowManagerService extends IWindowManager.Stub NN = mOpeningApps.size(); for (i=0; i