@@ -7510,7 +7510,10 @@ private final void assignLayersLocked() {
75107510 }
75117511
75127512 for (i =0 ; i <N ; i ++) {
7513- WindowState w = mWindows .get (i );
7513+ final WindowState w = mWindows .get (i );
7514+ final WindowStateAnimator winAnimator = w .mWinAnimator ;
7515+ boolean layerChanged = false ;
7516+ int oldLayer = w .mLayer ;
75147517 if (w .mBaseLayer == curBaseLayer || w .mIsImWindow
75157518 || (i > 0 && w .mIsWallpaper )) {
75167519 curLayer += WINDOW_LAYER_MULTIPLIER ;
@@ -7519,22 +7522,33 @@ private final void assignLayersLocked() {
75197522 curBaseLayer = curLayer = w .mBaseLayer ;
75207523 w .mLayer = curLayer ;
75217524 }
7525+ if (w .mLayer != oldLayer ) {
7526+ layerChanged = true ;
7527+ }
7528+ oldLayer = winAnimator .mAnimLayer ;
75227529 if (w .mTargetAppToken != null ) {
7523- w . mWinAnimator .mAnimLayer =
7530+ winAnimator .mAnimLayer =
75247531 w .mLayer + w .mTargetAppToken .mAppAnimator .animLayerAdjustment ;
75257532 } else if (w .mAppToken != null ) {
7526- w . mWinAnimator .mAnimLayer =
7533+ winAnimator .mAnimLayer =
75277534 w .mLayer + w .mAppToken .mAppAnimator .animLayerAdjustment ;
75287535 } else {
7529- w . mWinAnimator .mAnimLayer = w .mLayer ;
7536+ winAnimator .mAnimLayer = w .mLayer ;
75307537 }
75317538 if (w .mIsImWindow ) {
7532- w . mWinAnimator .mAnimLayer += mInputMethodAnimLayerAdjustment ;
7539+ winAnimator .mAnimLayer += mInputMethodAnimLayerAdjustment ;
75337540 } else if (w .mIsWallpaper ) {
7534- w .mWinAnimator .mAnimLayer += mWallpaperAnimLayerAdjustment ;
7541+ winAnimator .mAnimLayer += mWallpaperAnimLayerAdjustment ;
7542+ }
7543+ if (winAnimator .mAnimLayer != oldLayer ) {
7544+ layerChanged = true ;
7545+ }
7546+ if (layerChanged && mAnimator .isDimming (winAnimator )) {
7547+ // Force an animation pass just to update the mDimAnimator layer.
7548+ scheduleAnimationLocked ();
75357549 }
75367550 if (DEBUG_LAYERS ) Slog .v (TAG , "Assign layer " + w + ": "
7537- + w . mWinAnimator .mAnimLayer );
7551+ + winAnimator .mAnimLayer );
75387552 //System.out.println(
75397553 // "Assigned layer " + curLayer + " to " + w.mClient.asBinder());
75407554 }
@@ -8237,7 +8251,8 @@ private void handleNotObscuredLocked(final WindowState w, final long currentTime
82378251 if (!mInnerFields .mDimming ) {
82388252 //Slog.i(TAG, "DIM BEHIND: " + w);
82398253 mInnerFields .mDimming = true ;
8240- if (!mAnimator .isDimming ()) {
8254+ final WindowStateAnimator winAnimator = w .mWinAnimator ;
8255+ if (!mAnimator .isDimming (winAnimator )) {
82418256 final int width , height ;
82428257 if (attrs .type == WindowManager .LayoutParams .TYPE_BOOT_PROGRESS ) {
82438258 width = mCurDisplayWidth ;
@@ -8246,7 +8261,7 @@ private void handleNotObscuredLocked(final WindowState w, final long currentTime
82468261 width = innerDw ;
82478262 height = innerDh ;
82488263 }
8249- mAnimator .startDimming (w . mWinAnimator , w .mExiting ? 0 : w .mAttrs .dimAmount ,
8264+ mAnimator .startDimming (winAnimator , w .mExiting ? 0 : w .mAttrs .dimAmount ,
82508265 width , height );
82518266 }
82528267 }
0 commit comments