From 13131e74ea93d82c004ab1567351eadcedd799a5 Mon Sep 17 00:00:00 2001 From: Craig Mautner Date: Fri, 11 Jan 2013 11:03:33 -0800 Subject: [PATCH] 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 --- services/java/com/android/server/wm/DimLayer.java | 11 +++++++++++ .../java/com/android/server/wm/WindowAnimator.java | 8 ++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/services/java/com/android/server/wm/DimLayer.java b/services/java/com/android/server/wm/DimLayer.java index 4c7add96ac8ad..88efe2e21af9a 100644 --- a/services/java/com/android/server/wm/DimLayer.java +++ b/services/java/com/android/server/wm/DimLayer.java @@ -84,6 +84,17 @@ public class DimLayer { 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 d5144fb616ffd..d42221e4f087f 100644 --- a/services/java/com/android/server/wm/WindowAnimator.java +++ b/services/java/com/android/server/wm/WindowAnimator.java @@ -573,10 +573,13 @@ public class WindowAnimator { 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 @@ public class WindowAnimator { 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()) {