Have DisplayContent be the call point for assigning window layers

First step in trying to make the WindowList private to DisplayContent
Have the rest of the system call DisplayContent when they need to
assign layers to windows instead of calling WindowLayersController
directly. That way all the various call points don't need to get
the WindowList from DisplayContent to pass on to WindowLayersController.

Test: Existing tests pass.
Change-Id: If869abf7ba1c33b575908006ae5ad1557abc361c
diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java
index ee7c6d2..56eaa83 100644
--- a/services/core/java/com/android/server/wm/AppWindowToken.java
+++ b/services/core/java/com/android/server/wm/AppWindowToken.java
@@ -425,8 +425,7 @@
         }
         if (destroyedSomething) {
             final DisplayContent dc = getDisplayContent();
-            mService.mLayersController.assignLayersLocked(dc.getWindowList());
-            dc.setLayoutNeeded();
+            dc.assignWindowLayers(true /*setLayoutNeeded*/);
         }
     }
 
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 3681123..7299bdf 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -44,6 +44,7 @@
 import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DISPLAY;
 import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS;
 import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS_LIGHT;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYERS;
 import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYOUT;
 import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WINDOW_MOVEMENT;
 import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_VISIBILITY;
@@ -171,13 +172,20 @@
     // the display's direct children should be allowed.
     private boolean mRemovingDisplay = false;
 
+    private final WindowLayersController mLayersController;
+    int mInputMethodAnimLayerAdjustment;
+
     /**
      * @param display May not be null.
      * @param service You know.
+     * @param layersController window layer controller used to assign layer to the windows on this
+     *                         display.
      */
-    DisplayContent(Display display, WindowManagerService service) {
+    DisplayContent(Display display, WindowManagerService service,
+            WindowLayersController layersController) {
         mDisplay = display;
         mDisplayId = display.getDisplayId();
+        mLayersController = layersController;
         display.getDisplayInfo(mDisplayInfo);
         display.getMetrics(mDisplayMetrics);
         isDefaultDisplay = mDisplayId == DEFAULT_DISPLAY;
@@ -691,6 +699,24 @@
         }
     }
 
+    void setInputMethodAnimLayerAdjustment(int adj) {
+        if (DEBUG_LAYERS) Slog.v(TAG_WM, "Setting im layer adj to " + adj);
+        mInputMethodAnimLayerAdjustment = adj;
+        final WindowState imw = mService.mInputMethodWindow;
+        if (imw != null) {
+            imw.adjustAnimLayer(adj);
+        }
+        for (int i = mService.mInputMethodDialogs.size() - 1; i >= 0; i--) {
+            final WindowState dialog = mService.mInputMethodDialogs.get(i);
+            // TODO: This and other places setting mAnimLayer can probably use WS.adjustAnimLayer,
+            // but need to make sure we are not setting things twice for child windows that are
+            // already in the list.
+            dialog.mWinAnimator.mAnimLayer = dialog.mLayer + adj;
+            if (DEBUG_LAYERS) Slog.v(TAG_WM, "IM win " + imw
+                    + " anim layer: " + dialog.mWinAnimator.mAnimLayer);
+        }
+    }
+
     void prepareFreezingTaskBounds() {
         for (int stackNdx = mTaskStackContainers.size() - 1; stackNdx >= 0; --stackNdx) {
             final TaskStack stack = mTaskStackContainers.get(stackNdx);
@@ -798,6 +824,11 @@
         mDimLayerController.dump(prefix + "  ", pw);
         pw.println();
         mDividerControllerLocked.dump(prefix + "  ", pw);
+
+        if (mInputMethodAnimLayerAdjustment != 0) {
+            pw.println(subPrefix
+                    + "mInputMethodAnimLayerAdjustment=" + mInputMethodAnimLayerAdjustment);
+        }
     }
 
     @Override
@@ -1113,6 +1144,14 @@
         }
     }
 
+    /** Updates the layer assignment of windows on this display. */
+    void assignWindowLayers(boolean setLayoutNeeded) {
+        mLayersController.assignWindowLayers(mWindows);
+        if (setLayoutNeeded) {
+            setLayoutNeeded();
+        }
+    }
+
     /**
      * Z-orders the display window list so that:
      * <ul>
diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java
index 5854197..8b5f62e 100644
--- a/services/core/java/com/android/server/wm/DockedStackDividerController.java
+++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java
@@ -33,6 +33,7 @@
 import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
 import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
 import static com.android.server.wm.WindowManagerService.H.NOTIFY_DOCKED_STACK_MINIMIZED_CHANGED;
+import static com.android.server.wm.WindowManagerService.LAYER_OFFSET_DIM;
 
 import android.content.Context;
 import android.content.res.Configuration;
@@ -296,7 +297,7 @@
         }
     }
 
-    boolean wasVisible() {
+    private boolean wasVisible() {
         return mLastVisibility;
     }
 
@@ -356,7 +357,7 @@
         mLastRect.set(frame);
     }
 
-    void notifyDockedDividerVisibilityChanged(boolean visible) {
+    private void notifyDockedDividerVisibilityChanged(boolean visible) {
         final int size = mDockedStackListeners.beginBroadcast();
         for (int i = 0; i < size; ++i) {
             final IDockedStackListener listener = mDockedStackListeners.getBroadcastItem(i);
@@ -413,7 +414,7 @@
         return mImeHideRequested;
     }
 
-    void notifyDockedStackMinimizedChanged(boolean minimizedDock, long animDuration) {
+    private void notifyDockedStackMinimizedChanged(boolean minimizedDock, long animDuration) {
         mService.mH.removeMessages(NOTIFY_DOCKED_STACK_MINIMIZED_CHANGED);
         mService.mH.obtainMessage(NOTIFY_DOCKED_STACK_MINIMIZED_CHANGED,
                 minimizedDock ? 1 : 0, 0).sendToTarget();
@@ -442,7 +443,7 @@
         mDockedStackListeners.finishBroadcast();
     }
 
-    void notifyAdjustedForImeChanged(boolean adjustedForIme, long animDuration) {
+    private void notifyAdjustedForImeChanged(boolean adjustedForIme, long animDuration) {
         final int size = mDockedStackListeners.beginBroadcast();
         for (int i = 0; i < size; ++i) {
             final IDockedStackListener listener = mDockedStackListeners.getBroadcastItem(i);
@@ -474,8 +475,7 @@
             stack.getDimBounds(mTmpRect);
             if (mTmpRect.height() > 0 && mTmpRect.width() > 0) {
                 mDimLayer.setBounds(mTmpRect);
-                mDimLayer.show(mService.mLayersController.getResizeDimLayer(),
-                        alpha, 0 /* duration */);
+                mDimLayer.show(getResizeDimLayer(), alpha, 0 /* duration */);
             } else {
                 visibleAndValid = false;
             }
@@ -487,6 +487,14 @@
     }
 
     /**
+     * @return The layer used for dimming the apps when dismissing docked/fullscreen stack. Just
+     *         above all application surfaces.
+     */
+    private int getResizeDimLayer() {
+        return (mWindow != null) ? mWindow.mLayer - 1 : LAYER_OFFSET_DIM;
+    }
+
+    /**
      * Notifies the docked stack divider controller of a visibility change that happens without
      * an animation.
      */
@@ -693,7 +701,7 @@
             return animateForIme(now);
         } else {
             if (mDimLayer != null && mDimLayer.isDimming()) {
-                mDimLayer.setLayer(mService.mLayersController.getResizeDimLayer());
+                mDimLayer.setLayer(getResizeDimLayer());
             }
             return false;
         }
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index 05ffe2d..bddf6e2 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -165,8 +165,11 @@
     ParcelFileDescriptor mSurfaceTraceFd;
     RemoteEventTrace mRemoteEventTrace;
 
+    private final WindowLayersController mLayersController;
+
     RootWindowContainer(WindowManagerService service) {
         mService = service;
+        mLayersController = new WindowLayersController(mService);
     }
 
     WindowState computeFocusedWindow() {
@@ -211,7 +214,7 @@
     }
 
     private DisplayContent createDisplayContent(final Display display) {
-        final DisplayContent dc = new DisplayContent(display, mService);
+        final DisplayContent dc = new DisplayContent(display, mService, mLayersController);
         final int displayId = display.getDisplayId();
 
         if (DEBUG_DISPLAY) Slog.v(TAG_WM, "Adding display=" + display);
@@ -1171,9 +1174,9 @@
                 }
             }
 
-            for (DisplayContent displayContent : displayList) {
-                mService.mLayersController.assignLayersLocked(displayContent.getWindowList());
-                displayContent.setLayoutNeeded();
+            for (int j = displayList.size() - 1; j >= 0; --j) {
+                final DisplayContent dc = displayList.get(j);
+                dc.assignWindowLayers(true /*setLayoutNeeded*/);
             }
         }
 
@@ -1250,8 +1253,7 @@
 
                 if ((dc.pendingLayoutChanges & FINISH_LAYOUT_REDO_WALLPAPER) != 0
                         && mService.mWallpaperControllerLocked.adjustWallpaperWindows()) {
-                    mService.mLayersController.assignLayersLocked(windows);
-                    dc.setLayoutNeeded();
+                    dc.assignWindowLayers(true /*setLayoutNeeded*/);
                 }
 
                 if (isDefaultDisplay
diff --git a/services/core/java/com/android/server/wm/WallpaperController.java b/services/core/java/com/android/server/wm/WallpaperController.java
index 0841231..972a0cb 100644
--- a/services/core/java/com/android/server/wm/WallpaperController.java
+++ b/services/core/java/com/android/server/wm/WallpaperController.java
@@ -742,8 +742,7 @@
         }
 
         if (adjust && adjustWallpaperWindows()) {
-            mService.mLayersController.assignLayersLocked(windows);
-            dc.setLayoutNeeded();
+            dc.assignWindowLayers(true /*setLayoutNeeded*/);
         }
     }
 
@@ -769,6 +768,10 @@
             pw.print("mLastWallpaperDisplayOffsetX="); pw.print(mLastWallpaperDisplayOffsetX);
             pw.print(" mLastWallpaperDisplayOffsetY="); pw.println(mLastWallpaperDisplayOffsetY);
         }
+
+        if (mWallpaperAnimLayerAdjustment != 0) {
+            pw.println(prefix + "mWallpaperAnimLayerAdjustment=" + mWallpaperAnimLayerAdjustment);
+        }
     }
 
     void dumpTokens(PrintWriter pw, String prefix, boolean dumpAll) {
diff --git a/services/core/java/com/android/server/wm/WindowLayersController.java b/services/core/java/com/android/server/wm/WindowLayersController.java
index 68c2be9..e184e39 100644
--- a/services/core/java/com/android/server/wm/WindowLayersController.java
+++ b/services/core/java/com/android/server/wm/WindowLayersController.java
@@ -48,12 +48,10 @@
  * <li>replaced windows, which need to live above their normal level, because they anticipate
  * an animation</li>.
  */
-public class WindowLayersController {
+class WindowLayersController {
     private final WindowManagerService mService;
 
-    private int mInputMethodAnimLayerAdjustment;
-
-    public WindowLayersController(WindowManagerService service) {
+    WindowLayersController(WindowManagerService service) {
         mService = service;
     }
 
@@ -65,7 +63,7 @@
     private WindowState mDockDivider = null;
     private ArrayDeque<WindowState> mReplacingWindows = new ArrayDeque<>();
 
-    final void assignLayersLocked(WindowList windows) {
+    final void assignWindowLayers(WindowList windows) {
         if (DEBUG_LAYERS) Slog.v(TAG_WM, "Assigning layers based on windows=" + windows,
                 new RuntimeException("here").fillInStackTrace());
 
@@ -87,7 +85,7 @@
 
             // TODO: Preserved old behavior of code here but not sure comparing
             // oldLayer to mAnimLayer and mLayer makes sense...though the
-            // worst case would be unintentionalp layer reassignment.
+            // worst case would be unintentional layer reassignment.
             if (w.mLayer != oldLayer || w.mWinAnimator.mAnimLayer != oldLayer) {
                 layerChanged = true;
                 anyLayerChanged = true;
@@ -115,41 +113,6 @@
         if (DEBUG_LAYERS) logDebugLayers(windows);
     }
 
-    void setInputMethodAnimLayerAdjustment(int adj) {
-        if (DEBUG_LAYERS) Slog.v(TAG_WM, "Setting im layer adj to " + adj);
-        mInputMethodAnimLayerAdjustment = adj;
-        final WindowState imw = mService.mInputMethodWindow;
-        if (imw != null) {
-            imw.adjustAnimLayer(adj);
-        }
-        for (int i = mService.mInputMethodDialogs.size() - 1; i >= 0; i--) {
-            final WindowState dialog = mService.mInputMethodDialogs.get(i);
-            // TODO: This and other places setting mAnimLayer can probably use WS.adjustAnimLayer,
-            // but need to make sure we are not setting things twice for child windows that are
-            // already in the list.
-            dialog.mWinAnimator.mAnimLayer = dialog.mLayer + adj;
-            if (DEBUG_LAYERS) Slog.v(TAG_WM, "IM win " + imw
-                    + " anim layer: " + dialog.mWinAnimator.mAnimLayer);
-        }
-    }
-
-    int getSpecialWindowAnimLayerAdjustment(WindowState win) {
-        if (win.mIsImWindow) {
-            return mInputMethodAnimLayerAdjustment;
-        } else if (win.mIsWallpaper) {
-            return mService.mWallpaperControllerLocked.getAnimLayerAdjustment();
-        }
-        return 0;
-    }
-
-    /**
-     * @return The layer used for dimming the apps when dismissing docked/fullscreen stack. Just
-     *         above all application surfaces.
-     */
-    int getResizeDimLayer() {
-        return (mDockDivider != null) ? mDockDivider.mLayer - 1 : LAYER_OFFSET_DIM;
-    }
-
     private void logDebugLayers(WindowList windows) {
         for (int i = 0, n = windows.size(); i < n; i++) {
             final WindowState w = windows.get(i);
@@ -250,21 +213,11 @@
 
     private void assignAnimLayer(WindowState w, int layer) {
         w.mLayer = layer;
-        w.mWinAnimator.mAnimLayer = w.mLayer + w.getAnimLayerAdjustment() +
-                    getSpecialWindowAnimLayerAdjustment(w);
+        w.mWinAnimator.mAnimLayer = w.getAnimLayerAdjustment()
+                + w.getSpecialWindowAnimLayerAdjustment();
         if (w.mAppToken != null && w.mAppToken.mAppAnimator.thumbnailForceAboveLayer > 0
                 && w.mWinAnimator.mAnimLayer > w.mAppToken.mAppAnimator.thumbnailForceAboveLayer) {
             w.mAppToken.mAppAnimator.thumbnailForceAboveLayer = w.mWinAnimator.mAnimLayer;
         }
     }
-
-    void dump(PrintWriter pw, String s) {
-        if (mInputMethodAnimLayerAdjustment != 0 ||
-                mService.mWallpaperControllerLocked.getAnimLayerAdjustment() != 0) {
-            pw.print("  mInputMethodAnimLayerAdjustment=");
-            pw.print(mInputMethodAnimLayerAdjustment);
-            pw.print("  mWallpaperAnimLayerAdjustment=");
-            pw.println(mService.mWallpaperControllerLocked.getAnimLayerAdjustment());
-        }
-    }
 }
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 02d04cc..b90dc93 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -675,8 +675,6 @@
 
     WallpaperController mWallpaperControllerLocked;
 
-    final WindowLayersController mLayersController;
-
     boolean mAnimateWallpaperWithTarget;
 
     // TODO: Move to RootWindowContainer
@@ -685,19 +683,19 @@
     PowerManager mPowerManager;
     PowerManagerInternal mPowerManagerInternal;
 
-    float mWindowAnimationScaleSetting = 1.0f;
-    float mTransitionAnimationScaleSetting = 1.0f;
-    float mAnimatorDurationScaleSetting = 1.0f;
-    boolean mAnimationsDisabled = false;
+    private float mWindowAnimationScaleSetting = 1.0f;
+    private float mTransitionAnimationScaleSetting = 1.0f;
+    private float mAnimatorDurationScaleSetting = 1.0f;
+    private boolean mAnimationsDisabled = false;
 
     final InputManagerService mInputManager;
     final DisplayManagerInternal mDisplayManagerInternal;
     final DisplayManager mDisplayManager;
-    final Display[] mDisplays;
+    private final Display[] mDisplays;
 
     // Who is holding the screen on.
-    Session mHoldingScreenOn;
-    PowerManager.WakeLock mHoldingScreenWakeLock;
+    private Session mHoldingScreenOn;
+    private PowerManager.WakeLock mHoldingScreenWakeLock;
 
     boolean mTurnOnScreen;
 
@@ -708,7 +706,7 @@
     DragState mDragState = null;
 
     // For frozen screen animations.
-    int mExitAnimId, mEnterAnimId;
+    private int mExitAnimId, mEnterAnimId;
 
     boolean mAnimationScheduled;
 
@@ -972,7 +970,6 @@
 
         mWallpaperControllerLocked = new WallpaperController(this);
         mWindowPlacerLocked = new WindowSurfacePlacer(this);
-        mLayersController = new WindowLayersController(this);
         mPolicy = policy;
 
         LocalServices.addService(WindowManagerPolicy.class, mPolicy);
@@ -1120,7 +1117,8 @@
         // TODO(multidisplay): Needs some serious rethought when the target and IME are not on the
         // same display. Or even when the current IME/target are not on the same screen as the next
         // IME/target. For now only look for input windows on the main screen.
-        WindowList windows = getDefaultWindowListLocked();
+        final DisplayContent dc = getDefaultDisplayContentLocked();
+        final WindowList windows = dc.getWindowList();
         WindowState w = null;
         int i;
         for (i = windows.size() - 1; i >= 0; --i) {
@@ -1235,10 +1233,10 @@
                 mInputMethodTarget = w;
                 mInputMethodTargetWaitingAnim = false;
                 if (w.mAppToken != null) {
-                    mLayersController.setInputMethodAnimLayerAdjustment(
+                    dc.setInputMethodAnimLayerAdjustment(
                             w.mAppToken.mAppAnimator.animLayerAdjustment);
                 } else {
-                    mLayersController.setInputMethodAnimLayerAdjustment(0);
+                    dc.setInputMethodAnimLayerAdjustment(0);
                 }
             }
 
@@ -1260,7 +1258,7 @@
             if (DEBUG_INPUT_METHOD) Slog.w(TAG_WM, "Moving IM target from " + curTarget + " to null."
                     + (SHOW_STACK_CRAWLS ? " Callers=" + Debug.getCallers(4) : ""));
             mInputMethodTarget = null;
-            mLayersController.setInputMethodAnimLayerAdjustment(0);
+            dc.setInputMethodAnimLayerAdjustment(0);
         }
         return -1;
     }
@@ -1426,7 +1424,7 @@
         }
 
         if (needAssignLayers) {
-            mLayersController.assignLayersLocked(windows);
+            getDefaultDisplayContentLocked().assignWindowLayers(false /* setLayoutNeeded */);
         }
 
         return true;
@@ -1804,9 +1802,9 @@
                 moveInputMethodWindowsIfNeededLocked(false);
             }
 
-            mLayersController.assignLayersLocked(displayContent.getWindowList());
             // Don't do layout here, the window must call
             // relayout to be displayed, so we'll do it there.
+            displayContent.assignWindowLayers(false /* setLayoutNeeded */);
 
             if (focusChanged) {
                 mInputMonitor.setInputFocusLw(mCurrentFocus, false /*updateInputWindows*/);
@@ -2019,8 +2017,7 @@
         if (windows != null) {
             windows.remove(win);
             if (!mWindowPlacerLocked.isInLayout()) {
-                mLayersController.assignLayersLocked(windows);
-                win.setDisplayLayoutNeeded();
+                win.getDisplayContent().assignWindowLayers(true /* setLayoutNeeded */);
                 mWindowPlacerLocked.performSurfacePlacement();
                 if (win.mAppToken != null) {
                     win.mAppToken.updateReportedVisibilityLocked();
@@ -2398,7 +2395,7 @@
                 // its layer recomputed.  However, if the IME was hidden
                 // and isn't actually moved in the list, its layer may be
                 // out of data so we make sure to recompute it.
-                mLayersController.assignLayersLocked(win.getWindowList());
+                win.getDisplayContent().assignWindowLayers(false /* setLayoutNeeded */);
             }
 
             if (wallpaperMayMove) {
@@ -3719,7 +3716,7 @@
 
         if (!updateFocusedWindowLocked(UPDATE_FOCUS_WILL_PLACE_SURFACES,
                 false /*updateInputWindows*/)) {
-            mLayersController.assignLayersLocked(displayContent.getWindowList());
+            displayContent.assignWindowLayers(false /* setLayoutNeeded */);
         }
 
         mInputMonitor.setUpdateInputWindowsNeededLw();
@@ -8098,7 +8095,7 @@
                 } else if (mode == UPDATE_FOCUS_WILL_PLACE_SURFACES) {
                     // Client will do the layout, but we need to assign layers
                     // for handleNewWindowLocked() below.
-                    mLayersController.assignLayersLocked(displayContent.getWindowList());
+                    displayContent.assignWindowLayers(false /* setLayoutNeeded */);
                 }
             }
 
@@ -8758,7 +8755,6 @@
             }
             mWindowPlacerLocked.dump(pw, "  ");
             mWallpaperControllerLocked.dump(pw, "  ");
-            mLayersController.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 fa4dbc4..617c145 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -1986,6 +1986,17 @@
         return 0;
     }
 
+    int getSpecialWindowAnimLayerAdjustment() {
+        int specialAdjustment = 0;
+        if (mIsImWindow) {
+            specialAdjustment = getDisplayContent().mInputMethodAnimLayerAdjustment;
+        } else if (mIsWallpaper) {
+            specialAdjustment = mService.mWallpaperControllerLocked.getAnimLayerAdjustment();
+        }
+
+        return mLayer + specialAdjustment;
+    }
+
     void scheduleAnimationIfDimming() {
         final DisplayContent dc = getDisplayContent();
         if (dc == null) {
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index 53fb99b..12e5bce 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -461,8 +461,7 @@
         if (mAnimator.mWindowDetachedWallpaper == mWin) {
             mAnimator.mWindowDetachedWallpaper = null;
         }
-        mAnimLayer = mWin.mLayer
-                + mService.mLayersController.getSpecialWindowAnimLayerAdjustment(mWin);
+        mAnimLayer = mWin.getSpecialWindowAnimLayerAdjustment();
         if (DEBUG_LAYERS) Slog.v(TAG, "Stepping win " + this + " anim layer: " + mAnimLayer);
         mHasTransformation = false;
         mHasLocalTransformation = false;
diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
index 285a75c..336bc68 100644
--- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
+++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
@@ -532,7 +532,7 @@
         // TODO(multidisplay): IMEs are only supported on the default display.
         if (windows == mService.getDefaultWindowListLocked()
                 && !mService.moveInputMethodWindowsIfNeededLocked(true)) {
-            mService.mLayersController.assignLayersLocked(windows);
+            mService.getDefaultDisplayContentLocked().assignWindowLayers(false /*setLayoutNeeded*/);
         }
         mService.updateFocusedWindowLocked(UPDATE_FOCUS_PLACING_SURFACES,
                 true /*updateInputWindows*/);
diff --git a/services/core/java/com/android/server/wm/WindowToken.java b/services/core/java/com/android/server/wm/WindowToken.java
index 218972a..afaaeb9 100644
--- a/services/core/java/com/android/server/wm/WindowToken.java
+++ b/services/core/java/com/android/server/wm/WindowToken.java
@@ -140,7 +140,7 @@
                 highestAnimLayer = winHighestAnimLayer;
             }
             if (w == mService.mInputMethodTarget && !mService.mInputMethodTargetWaitingAnim) {
-                mService.mLayersController.setInputMethodAnimLayerAdjustment(adj);
+                mDisplayContent.setInputMethodAnimLayerAdjustment(adj);
             }
         }
         return highestAnimLayer;