diff options
| -rw-r--r-- | services/java/com/android/server/wm/DimLayer.java | 11 | ||||
| -rw-r--r-- | services/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 4c7add96ac8a..88efe2e21af9 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 d5144fb616ff..d42221e4f087 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()) { |