Have DisplayContent be the call point for adjusting wallpaper windows

4th step in trying to make the WindowList private to DisplayContent
Have the rest of the system call DisplayContent when they need to
adjust the position of the wallpaper windows in the window list
instead of calling WallpaperController directly. That way the display
content can control the window list that the wallpaper controller sees.

Test: Existing tests pass and manual testing.
Change-Id: Iaa7f421d7cd24d36e5a83e091f77b4a08d0ae123
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index fab0b29..cefa4f9 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -202,6 +202,7 @@
     private boolean mRemovingDisplay = false;
 
     private final WindowLayersController mLayersController;
+    final WallpaperController mWallpaperController;
     int mInputMethodAnimLayerAdjustment;
 
     /**
@@ -209,12 +210,15 @@
      * @param service You know.
      * @param layersController window layer controller used to assign layer to the windows on this
      *                         display.
+     * @param wallpaperController wallpaper windows controller used to adjust the positioning of the
+     *                            wallpaper windows in the window list.
      */
     DisplayContent(Display display, WindowManagerService service,
-            WindowLayersController layersController) {
+            WindowLayersController layersController, WallpaperController wallpaperController) {
         mDisplay = display;
         mDisplayId = display.getDisplayId();
         mLayersController = layersController;
+        mWallpaperController = wallpaperController;
         display.getDisplayInfo(mDisplayInfo);
         display.getMetrics(mDisplayMetrics);
         isDefaultDisplay = mDisplayId == DEFAULT_DISPLAY;
@@ -1226,6 +1230,12 @@
         }
     }
 
+    void adjustWallpaperWindows() {
+        if (mWallpaperController.adjustWallpaperWindows(mWindows)) {
+            assignWindowLayers(true /*setLayoutNeeded*/);
+        }
+    }
+
     /**
      * Z-orders the display window list so that:
      * <ul>
@@ -1888,7 +1898,7 @@
         boolean startingInUnForceHiding = false;
         ArrayList<WindowStateAnimator> unForceHiding = null;
         WindowState wallpaper = null;
-        final WallpaperController wallpaperController = mService.mWallpaperControllerLocked;
+        final WallpaperController wallpaperController = mWallpaperController;
         for (int i = mWindows.size() - 1; i >= 0; i--) {
             WindowState win = mWindows.get(i);
             WindowStateAnimator winAnimator = win.mWinAnimator;
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index bddf6e2..24a0d1a 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -166,10 +166,12 @@
     RemoteEventTrace mRemoteEventTrace;
 
     private final WindowLayersController mLayersController;
+    final WallpaperController mWallpaperController;
 
     RootWindowContainer(WindowManagerService service) {
         mService = service;
         mLayersController = new WindowLayersController(mService);
+        mWallpaperController = new WallpaperController(mService);
     }
 
     WindowState computeFocusedWindow() {
@@ -214,7 +216,8 @@
     }
 
     private DisplayContent createDisplayContent(final Display display) {
-        final DisplayContent dc = new DisplayContent(display, mService, mLayersController);
+        final DisplayContent dc = new DisplayContent(display, mService, mLayersController,
+                mWallpaperController);
         final int displayId = display.getDisplayId();
 
         if (DEBUG_DISPLAY) Slog.v(TAG_WM, "Adding display=" + display);
@@ -442,10 +445,10 @@
 
         // TODO(multi-display): By default we add this to the default display, but maybe we
         // should provide an API for a token to be added to any display?
-        final WindowToken token = new WindowToken(mService, binder, type, true,
-                getDisplayContent(DEFAULT_DISPLAY));
+        final DisplayContent dc = getDisplayContent(DEFAULT_DISPLAY);
+        final WindowToken token = new WindowToken(mService, binder, type, true, dc);
         if (type == TYPE_WALLPAPER) {
-            mService.mWallpaperControllerLocked.addWallpaperToken(token);
+            dc.mWallpaperController.addWallpaperToken(token);
         }
     }
 
@@ -718,7 +721,6 @@
         boolean addPipInputConsumerHandle = pipInputConsumer != null;
         boolean addWallpaperInputConsumerHandle = wallpaperInputConsumer != null;
         final Rect pipTouchableBounds = addPipInputConsumerHandle ? new Rect() : null;
-        final WallpaperController wallpaperController = mService.mWallpaperControllerLocked;
         boolean disableWallpaperTouchEvents = false;
 
         final int count = mChildren.size();
@@ -769,7 +771,7 @@
                 if ((privateFlags & PRIVATE_FLAG_DISABLE_WALLPAPER_TOUCH_EVENTS) != 0) {
                     disableWallpaperTouchEvents = true;
                 }
-                final boolean hasWallpaper = wallpaperController.isWallpaperTarget(child)
+                final boolean hasWallpaper = dc.mWallpaperController.isWallpaperTarget(child)
                         && (privateFlags & PRIVATE_FLAG_KEYGUARD) == 0
                         && !disableWallpaperTouchEvents;
 
@@ -951,14 +953,13 @@
                     "<<< CLOSE TRANSACTION performLayoutAndPlaceSurfaces");
         }
 
-        final WindowList defaultWindows = defaultDisplay.getWindowList();
         final WindowSurfacePlacer surfacePlacer = mService.mWindowPlacerLocked;
 
         // If we are ready to perform an app transition, check through all of the app tokens to be
         // shown and see if they are ready to go.
         if (mService.mAppTransition.isReady()) {
             defaultDisplay.pendingLayoutChanges |=
-                    surfacePlacer.handleAppTransitionReadyLocked(defaultWindows);
+                    surfacePlacer.handleAppTransitionReadyLocked();
             if (DEBUG_LAYOUT_REPEATS)
                 surfacePlacer.debugLayoutRepeats("after handleAppTransitionReadyLocked",
                         defaultDisplay.pendingLayoutChanges);
@@ -1046,7 +1047,7 @@
                 if (mService.mInputMethodWindow == win) {
                     mService.mInputMethodWindow = null;
                 }
-                if (mService.mWallpaperControllerLocked.isWallpaperTarget(win)) {
+                if (win.getDisplayContent().mWallpaperController.isWallpaperTarget(win)) {
                     wallpaperDestroyed = true;
                 }
                 win.destroyOrSaveSurface();
@@ -1063,7 +1064,7 @@
                 if (!token.hasVisible) {
                     exitingTokens.remove(i);
                     if (token.windowType == TYPE_WALLPAPER) {
-                        mService.mWallpaperControllerLocked.removeWallpaperToken(token);
+                        displayContent.mWallpaperController.removeWallpaperToken(token);
                     }
                 }
             }
@@ -1251,9 +1252,8 @@
                 if (DEBUG_LAYOUT_REPEATS) surfacePlacer.debugLayoutRepeats(
                         "On entry to LockedInner", dc.pendingLayoutChanges);
 
-                if ((dc.pendingLayoutChanges & FINISH_LAYOUT_REDO_WALLPAPER) != 0
-                        && mService.mWallpaperControllerLocked.adjustWallpaperWindows()) {
-                    dc.assignWindowLayers(true /*setLayoutNeeded*/);
+                if ((dc.pendingLayoutChanges & FINISH_LAYOUT_REDO_WALLPAPER) != 0) {
+                    dc.adjustWallpaperWindows();
                 }
 
                 if (isDefaultDisplay
@@ -1318,10 +1318,10 @@
                 w.applyDimLayerIfNeeded();
 
                 if (isDefaultDisplay && obscuredChanged && w.isVisibleLw()
-                        && mService.mWallpaperControllerLocked.isWallpaperTarget(w)) {
+                        && dc.mWallpaperController.isWallpaperTarget(w)) {
                     // This is the wallpaper target and its obscured state changed... make sure the
                     // current wallpaper's visibility has been updated accordingly.
-                    mService.mWallpaperControllerLocked.updateWallpaperVisibility();
+                    dc.mWallpaperController.updateWallpaperVisibility();
                 }
 
                 w.handleWindowMovedIfNeeded();
diff --git a/services/core/java/com/android/server/wm/Session.java b/services/core/java/com/android/server/wm/Session.java
index 8009207..ead70e1 100644
--- a/services/core/java/com/android/server/wm/Session.java
+++ b/services/core/java/com/android/server/wm/Session.java
@@ -460,7 +460,7 @@
         synchronized(mService.mWindowMap) {
             long ident = Binder.clearCallingIdentity();
             try {
-                mService.mWallpaperControllerLocked.setWindowWallpaperPosition(
+                mService.mRoot.mWallpaperController.setWindowWallpaperPosition(
                         mService.windowForClientLocked(this, window, true),
                         x, y, xStep, yStep);
             } finally {
@@ -471,7 +471,7 @@
 
     public void wallpaperOffsetsComplete(IBinder window) {
         synchronized (mService.mWindowMap) {
-            mService.mWallpaperControllerLocked.wallpaperOffsetsComplete(window);
+            mService.mRoot.mWallpaperController.wallpaperOffsetsComplete(window);
         }
     }
 
@@ -479,7 +479,7 @@
         synchronized(mService.mWindowMap) {
             long ident = Binder.clearCallingIdentity();
             try {
-                mService.mWallpaperControllerLocked.setWindowWallpaperDisplayOffset(
+                mService.mRoot.mWallpaperController.setWindowWallpaperDisplayOffset(
                         mService.windowForClientLocked(this, window, true), x, y);
             } finally {
                 Binder.restoreCallingIdentity(ident);
@@ -492,7 +492,7 @@
         synchronized(mService.mWindowMap) {
             long ident = Binder.clearCallingIdentity();
             try {
-                return mService.mWallpaperControllerLocked.sendWindowWallpaperCommand(
+                return mService.mRoot.mWallpaperController.sendWindowWallpaperCommand(
                         mService.windowForClientLocked(this, window, true),
                         action, x, y, z, extras, sync);
             } finally {
@@ -503,7 +503,7 @@
 
     public void wallpaperCommandComplete(IBinder window, Bundle result) {
         synchronized (mService.mWindowMap) {
-            mService.mWallpaperControllerLocked.wallpaperCommandComplete(window);
+            mService.mRoot.mWallpaperController.wallpaperCommandComplete(window);
         }
     }
 
diff --git a/services/core/java/com/android/server/wm/WallpaperController.java b/services/core/java/com/android/server/wm/WallpaperController.java
index 972a0cb..4ab8887 100644
--- a/services/core/java/com/android/server/wm/WallpaperController.java
+++ b/services/core/java/com/android/server/wm/WallpaperController.java
@@ -628,10 +628,9 @@
         return changed;
     }
 
-    boolean adjustWallpaperWindows() {
+    boolean adjustWallpaperWindows(WindowList windows) {
         mService.mRoot.mWallpaperMayChange = false;
 
-        final WindowList windows = mService.getDefaultWindowListLocked();
         // First find top-most window that has asked to be on top of the wallpaper;
         // all wallpapers go behind it.
         findWallpaperTarget(windows, mFindResults);
@@ -726,8 +725,8 @@
      * Adjusts the wallpaper windows if the input display has a pending wallpaper layout or one of
      * the opening apps should be a wallpaper target.
      */
-    void adjustWallpaperWindowsForAppTransitionIfNeeded(
-            DisplayContent dc, ArraySet<AppWindowToken> openingApps, WindowList windows) {
+    void adjustWallpaperWindowsForAppTransitionIfNeeded(DisplayContent dc,
+            ArraySet<AppWindowToken> openingApps) {
         boolean adjust = false;
         if ((dc.pendingLayoutChanges & FINISH_LAYOUT_REDO_WALLPAPER) != 0) {
             adjust = true;
@@ -741,8 +740,8 @@
             }
         }
 
-        if (adjust && adjustWallpaperWindows()) {
-            dc.assignWindowLayers(true /*setLayoutNeeded*/);
+        if (adjust) {
+            dc.adjustWallpaperWindows();
         }
     }
 
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index aa5f98a..01b143b 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -684,8 +684,6 @@
         }
     }
 
-    WallpaperController mWallpaperControllerLocked;
-
     boolean mAnimateWallpaperWithTarget;
 
     // TODO: Move to RootWindowContainer
@@ -979,7 +977,6 @@
         mDisplaySettings = new DisplaySettings();
         mDisplaySettings.readSettingsLocked();
 
-        mWallpaperControllerLocked = new WallpaperController(this);
         mWindowPlacerLocked = new WindowSurfacePlacer(this);
         mPolicy = policy;
 
@@ -1397,11 +1394,11 @@
             } else {
                 win.mToken.addWindow(win);
                 if (type == TYPE_WALLPAPER) {
-                    mWallpaperControllerLocked.clearLastWallpaperTimeoutTime();
+                    displayContent.mWallpaperController.clearLastWallpaperTimeoutTime();
                     displayContent.pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER;
                 } else if ((attrs.flags&FLAG_SHOW_WALLPAPER) != 0) {
                     displayContent.pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER;
-                } else if (mWallpaperControllerLocked.isBelowWallpaperTarget(win)) {
+                } else if (displayContent.mWallpaperController.isBelowWallpaperTarget(win)) {
                     // If there is currently a wallpaper being shown, and
                     // the base layer of the new window is below the current
                     // layer of the target window, then adjust the wallpaper.
@@ -1675,14 +1672,14 @@
             atoken.postWindowRemoveStartingWindowCleanup(win);
         }
 
+        final DisplayContent dc = win.getDisplayContent();
         if (win.mAttrs.type == TYPE_WALLPAPER) {
-            mWallpaperControllerLocked.clearLastWallpaperTimeoutTime();
-            getDefaultDisplayContentLocked().pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER;
+            dc.mWallpaperController.clearLastWallpaperTimeoutTime();
+            dc.pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER;
         } else if ((win.mAttrs.flags & FLAG_SHOW_WALLPAPER) != 0) {
-            getDefaultDisplayContentLocked().pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER;
+            dc.pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER;
         }
 
-        final DisplayContent dc = win.getDisplayContent();
         if (dc != null && dc.removeFromWindowList(win)) {
             if (!mWindowPlacerLocked.isInLayout()) {
                 dc.assignWindowLayers(true /* setLayoutNeeded */);
@@ -2079,7 +2076,7 @@
             mWindowPlacerLocked.performSurfacePlacement();
             if (toBeDisplayed && win.mIsWallpaper) {
                 DisplayInfo displayInfo = getDefaultDisplayInfoLocked();
-                mWallpaperControllerLocked.updateWallpaperOffset(
+                dc.mWallpaperController.updateWallpaperOffset(
                         win, displayInfo.logicalWidth, displayInfo.logicalHeight, false);
             }
             if (win.mAppToken != null) {
@@ -2147,7 +2144,7 @@
             // an exit.
             win.mAnimatingExit = true;
             win.mWinAnimator.mAnimating = true;
-        } else if (mWallpaperControllerLocked.isWallpaperTarget(win)) {
+        } else if (win.getDisplayContent().mWallpaperController.isWallpaperTarget(win)) {
             // If the wallpaper is currently behind this
             // window, we need to change both of them inside
             // of a transaction to avoid artifacts.
@@ -2418,7 +2415,7 @@
                     final WindowToken wtoken = removedTokens.get(i);
                     wtoken.setExiting();
                     if (wtoken.windowType == TYPE_WALLPAPER) {
-                        mWallpaperControllerLocked.removeWallpaperToken(wtoken);
+                        wtoken.getDisplayContent().mWallpaperController.removeWallpaperToken(wtoken);
                     }
 
                     mInputMonitor.updateInputWindowsLw(true /*force*/);
@@ -3035,7 +3032,8 @@
                     return false;
                 }
                 if (windowShowWallpaper) {
-                    if (mWallpaperControllerLocked.getWallpaperTarget() == null) {
+                    if (wtoken.getDisplayContent().mWallpaperController.getWallpaperTarget()
+                            == null) {
                         // If this theme is requesting a wallpaper, and the wallpaper
                         // is not currently visible, then this effectively serves as
                         // an opaque window and our starting window transition animation
@@ -7004,7 +7002,7 @@
                 break;
                 case WALLPAPER_DRAW_PENDING_TIMEOUT: {
                     synchronized (mWindowMap) {
-                        if (mWallpaperControllerLocked.processWallpaperDrawPendingTimeout()) {
+                        if (mRoot.mWallpaperController.processWallpaperDrawPendingTimeout()) {
                             mWindowPlacerLocked.performSurfacePlacement();
                         }
                     }
@@ -7628,10 +7626,11 @@
         }
         mNoAnimationNotifyOnTransitionFinished.clear();
 
-        mWallpaperControllerLocked.hideDeferredWallpapersIfNeeded();
-
         // TODO: multi-display.
         final DisplayContent dc = getDefaultDisplayContentLocked();
+
+        dc.mWallpaperController.hideDeferredWallpapersIfNeeded();
+
         dc.onAppTransitionDone();
 
         changes |= PhoneWindowManager.FINISH_LAYOUT_REDO_LAYOUT;
@@ -8229,7 +8228,7 @@
     private void dumpTokensLocked(PrintWriter pw, boolean dumpAll) {
         pw.println("WINDOW MANAGER TOKENS (dumpsys window tokens)");
         mRoot.dumpTokens(pw, dumpAll);
-        mWallpaperControllerLocked.dumpTokens(pw, "  ", dumpAll);
+        mRoot.mWallpaperController.dumpTokens(pw, "  ", dumpAll);
         if (!mFinishedStarting.isEmpty()) {
             pw.println();
             pw.println("  Finishing start of application tokens:");
@@ -8413,7 +8412,7 @@
                 pw.print("  mInputMethodWindow="); pw.println(mInputMethodWindow);
             }
             mWindowPlacerLocked.dump(pw, "  ");
-            mWallpaperControllerLocked.dump(pw, "  ");
+            mRoot.mWallpaperController.dump(pw, "  ");
             pw.print("  mSystemBooted="); pw.print(mSystemBooted);
                     pw.print(" mDisplayEnabled="); pw.println(mDisplayEnabled);
 
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 1fe6d5e..f80e085 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -942,7 +942,7 @@
             final DisplayContent displayContent = getDisplayContent();
             if (displayContent != null) {
                 final DisplayInfo displayInfo = displayContent.getDisplayInfo();
-                mService.mWallpaperControllerLocked.updateWallpaperOffset(
+                getDisplayContent().mWallpaperController.updateWallpaperOffset(
                         this, displayInfo.logicalWidth, displayInfo.logicalHeight, false);
             }
         }
@@ -1969,7 +1969,7 @@
         if (mIsImWindow) {
             specialAdjustment = getDisplayContent().mInputMethodAnimLayerAdjustment;
         } else if (mIsWallpaper) {
-            specialAdjustment = mService.mWallpaperControllerLocked.getAnimLayerAdjustment();
+            specialAdjustment = getDisplayContent().mWallpaperController.getAnimLayerAdjustment();
         }
 
         return mLayer + specialAdjustment;
@@ -2551,7 +2551,7 @@
         clearAnimatingWithSavedSurface();
         mDestroying = true;
         mWinAnimator.hide("stopUsingSavedSurface");
-        mService.mWallpaperControllerLocked.hideWallpapers(this);
+        getDisplayContent().mWallpaperController.hideWallpapers(this);
     }
 
     void markSavedSurfaceExiting() {
@@ -3959,7 +3959,7 @@
             }
         }
         mAnimatingExit = false;
-        mService.mWallpaperControllerLocked.hideWallpapers(this);
+        getDisplayContent().mWallpaperController.hideWallpapers(this);
     }
 
     boolean clearAnimatingFlags() {
@@ -4026,7 +4026,7 @@
      */
     void dispatchWallpaperVisibility(final boolean visible) {
         final boolean hideAllowed =
-                mService.mWallpaperControllerLocked.mDeferredHideWallpaper == null;
+                getDisplayContent().mWallpaperController.mDeferredHideWallpaper == null;
 
         // Only send notification if the visibility actually changed and we are not trying to hide
         // the wallpaper when we are deferring hiding of the wallpaper.
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index 12e5bce..2aeb50b 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -262,7 +262,7 @@
         mSession = win.mSession;
         mAttrType = win.mAttrs.type;
         mIsWallpaper = win.mIsWallpaper;
-        mWallpaperControllerLocked = mService.mWallpaperControllerLocked;
+        mWallpaperControllerLocked = mService.mRoot.mWallpaperController;
     }
 
     public void setAnimation(Animation anim, long startTime, int stackClip) {
diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
index 3522240..04e00c4 100644
--- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
+++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
@@ -96,7 +96,7 @@
 
     public WindowSurfacePlacer(WindowManagerService service) {
         mService = service;
-        mWallpaperControllerLocked = mService.mWallpaperControllerLocked;
+        mWallpaperControllerLocked = mService.mRoot.mWallpaperController;
     }
 
     /**
@@ -383,10 +383,9 @@
     }
 
     /**
-     * @param windows List of windows on default display.
      * @return bitmap indicating if another pass through layout must be made.
      */
-    int handleAppTransitionReadyLocked(WindowList windows) {
+    int handleAppTransitionReadyLocked() {
         int appsCount = mService.mOpeningApps.size();
         if (!transitionGoodToGo(appsCount)) {
             return 0;
@@ -429,7 +428,7 @@
         // (like the clearAnimatingFlags() above) might affect wallpaper target result.
         // Or, the opening app window should be a wallpaper target.
         mWallpaperControllerLocked.adjustWallpaperWindowsForAppTransitionIfNeeded(displayContent,
-                mService.mOpeningApps, windows);
+                mService.mOpeningApps);
 
         final WindowState lowerWallpaperTarget =
                 mWallpaperControllerLocked.getLowerWallpaperTarget();
@@ -533,7 +532,7 @@
         // TODO: Probably not needed once the window list always has the right z-ordering
         // when the window hierarchy is updated.
         final DisplayContent dc = mService.getDefaultDisplayContentLocked();
-        if (windows == dc.getWindowList() && !dc.moveInputMethodWindowsIfNeeded(true)) {
+        if (!dc.moveInputMethodWindowsIfNeeded(true)) {
             dc.assignWindowLayers(false /*setLayoutNeeded*/);
         }
         mService.updateFocusedWindowLocked(UPDATE_FOCUS_PLACING_SURFACES,
diff --git a/services/core/java/com/android/server/wm/WindowToken.java b/services/core/java/com/android/server/wm/WindowToken.java
index 4736668..afcdc41 100644
--- a/services/core/java/com/android/server/wm/WindowToken.java
+++ b/services/core/java/com/android/server/wm/WindowToken.java
@@ -269,7 +269,7 @@
     }
 
     void updateWallpaperOffset(int dw, int dh, boolean sync) {
-        final WallpaperController wallpaperController = mService.mWallpaperControllerLocked;
+        final WallpaperController wallpaperController = mDisplayContent.mWallpaperController;
         for (int wallpaperNdx = mChildren.size() - 1; wallpaperNdx >= 0; wallpaperNdx--) {
             final WindowState wallpaper = mChildren.get(wallpaperNdx);
             if (wallpaperController.updateWallpaperOffset(wallpaper, dw, dh, sync)) {
@@ -294,7 +294,7 @@
             mDisplayContent.setLayoutNeeded();
         }
 
-        final WallpaperController wallpaperController = mService.mWallpaperControllerLocked;
+        final WallpaperController wallpaperController = mDisplayContent.mWallpaperController;
         for (int wallpaperNdx = mChildren.size() - 1; wallpaperNdx >= 0; wallpaperNdx--) {
             final WindowState wallpaper = mChildren.get(wallpaperNdx);
             if (visible) {
@@ -317,7 +317,7 @@
             mDisplayContent.setLayoutNeeded();
         }
 
-        final WallpaperController wallpaperController = mService.mWallpaperControllerLocked;
+        final WallpaperController wallpaperController = mDisplayContent.mWallpaperController;
         for (int wallpaperNdx = mChildren.size() - 1; wallpaperNdx >= 0; wallpaperNdx--) {
             final WindowState wallpaper = mChildren.get(wallpaperNdx);