diff --git a/services/java/com/android/server/wm/WindowAnimator.java b/services/java/com/android/server/wm/WindowAnimator.java index 480992beaa150..cf3a5d2845f0e 100644 --- a/services/java/com/android/server/wm/WindowAnimator.java +++ b/services/java/com/android/server/wm/WindowAnimator.java @@ -538,8 +538,16 @@ public class WindowAnimator { if (mDimAnimator == null) { mDimAnimator = new DimAnimator(mService.mFxSession); } - mService.mH.sendMessage(mService.mH.obtainMessage(SET_DIM_PARAMETERS, - new DimAnimator.Parameters(winAnimator, width, height, target))); + // Only set dim params on the highest dimmed layer. + final WindowStateAnimator dimWinAnimator = mDimParams == null + ? null : mDimParams.mDimWinAnimator; + // Don't turn on for an unshown surface, or for any layer but the highest dimmed one. + if (winAnimator.mSurfaceShown && + (dimWinAnimator == null || !dimWinAnimator.mSurfaceShown + || dimWinAnimator.mAnimLayer < winAnimator.mAnimLayer)) { + mService.mH.sendMessage(mService.mH.obtainMessage(SET_DIM_PARAMETERS, + new DimAnimator.Parameters(winAnimator, width, height, target))); + } } // TODO(cmautner): Move into Handler