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()) {