Make DimLayer track changes to WindowState layer.

The DimLayer behind popups was not changing when the popup layer
changed. It will now.

Fixes bug 7974415.

Change-Id: Ia486efa83d623716a09d73a22493a4222823c573
diff --git a/services/java/com/android/server/wm/DimLayer.java b/services/java/com/android/server/wm/DimLayer.java
index 4c7add9..88efe2e 100644
--- a/services/java/com/android/server/wm/DimLayer.java
+++ b/services/java/com/android/server/wm/DimLayer.java
@@ -84,6 +84,17 @@
         return mTargetAlpha;
     }
 
+    void setLayer(int layer) {
+        if (mLayer != layer) {
+            mLayer = layer;
+            mDimSurface.setLayer(layer);
+        }
+    }
+
+    int getLayer() {
+        return mLayer;
+    }
+
     private void setAlpha(float alpha) {
         if (mAlpha != alpha) {
             if (DEBUG) Slog.v(TAG, "setAlpha alpha=" + alpha);
diff --git a/services/java/com/android/server/wm/WindowAnimator.java b/services/java/com/android/server/wm/WindowAnimator.java
index d5144fb..d42221e 100644
--- a/services/java/com/android/server/wm/WindowAnimator.java
+++ b/services/java/com/android/server/wm/WindowAnimator.java
@@ -573,10 +573,13 @@
 
                 final DimLayer dimAnimator = displayAnimator.mDimAnimator;
                 final WindowStateAnimator winAnimator = displayAnimator.mDimWinAnimator;
+                final int dimLayer;
                 final float dimAmount;
                 if (winAnimator == null) {
+                    dimLayer = dimAnimator.getLayer();
                     dimAmount = 0;
                 } else {
+                    dimLayer = winAnimator.mAnimLayer - WindowManagerService.LAYER_OFFSET_DIM;
                     dimAmount = winAnimator.mWin.mAttrs.dimAmount;
                 }
                 final float targetAlpha = dimAnimator.getTargetAlpha();
@@ -590,9 +593,10 @@
                         if (targetAlpha > dimAmount) {
                             duration = getDimBehindFadeDuration(duration);
                         }
-                        dimAnimator.show(winAnimator.mAnimLayer -
-                                WindowManagerService.LAYER_OFFSET_DIM, dimAmount, duration);
+                        dimAnimator.show(dimLayer, dimAmount, duration);
                     }
+                } else if (dimAnimator.getLayer() != dimLayer) {
+                    dimAnimator.setLayer(dimLayer);
                 }
                 if (dimAnimator.isAnimating()) {
                     if (!mService.okToDisplay()) {