@@ -7542,7 +7542,10 @@ private final void assignLayersLocked() {
75427542 }
75437543
75447544 for (i =0 ; i <N ; i ++) {
7545- WindowState w = mWindows .get (i );
7545+ final WindowState w = mWindows .get (i );
7546+ final WindowStateAnimator winAnimator = w .mWinAnimator ;
7547+ boolean layerChanged = false ;
7548+ int oldLayer = w .mLayer ;
75467549 if (w .mBaseLayer == curBaseLayer || w .mIsImWindow
75477550 || (i > 0 && w .mIsWallpaper )) {
75487551 curLayer += WINDOW_LAYER_MULTIPLIER ;
@@ -7551,22 +7554,33 @@ private final void assignLayersLocked() {
75517554 curBaseLayer = curLayer = w .mBaseLayer ;
75527555 w .mLayer = curLayer ;
75537556 }
7557+ if (w .mLayer != oldLayer ) {
7558+ layerChanged = true ;
7559+ }
7560+ oldLayer = winAnimator .mAnimLayer ;
75547561 if (w .mTargetAppToken != null ) {
7555- w . mWinAnimator .mAnimLayer =
7562+ winAnimator .mAnimLayer =
75567563 w .mLayer + w .mTargetAppToken .mAppAnimator .animLayerAdjustment ;
75577564 } else if (w .mAppToken != null ) {
7558- w . mWinAnimator .mAnimLayer =
7565+ winAnimator .mAnimLayer =
75597566 w .mLayer + w .mAppToken .mAppAnimator .animLayerAdjustment ;
75607567 } else {
7561- w . mWinAnimator .mAnimLayer = w .mLayer ;
7568+ winAnimator .mAnimLayer = w .mLayer ;
75627569 }
75637570 if (w .mIsImWindow ) {
7564- w . mWinAnimator .mAnimLayer += mInputMethodAnimLayerAdjustment ;
7571+ winAnimator .mAnimLayer += mInputMethodAnimLayerAdjustment ;
75657572 } else if (w .mIsWallpaper ) {
7566- w .mWinAnimator .mAnimLayer += mWallpaperAnimLayerAdjustment ;
7573+ winAnimator .mAnimLayer += mWallpaperAnimLayerAdjustment ;
7574+ }
7575+ if (winAnimator .mAnimLayer != oldLayer ) {
7576+ layerChanged = true ;
7577+ }
7578+ if (layerChanged && mAnimator .isDimming (winAnimator )) {
7579+ // Force an animation pass just to update the mDimAnimator layer.
7580+ scheduleAnimationLocked ();
75677581 }
75687582 if (DEBUG_LAYERS ) Slog .v (TAG , "Assign layer " + w + ": "
7569- + w . mWinAnimator .mAnimLayer );
7583+ + winAnimator .mAnimLayer );
75707584 //System.out.println(
75717585 // "Assigned layer " + curLayer + " to " + w.mClient.asBinder());
75727586 }
@@ -8270,7 +8284,8 @@ private void handleNotObscuredLocked(final WindowState w, final long currentTime
82708284 if (!mInnerFields .mDimming ) {
82718285 //Slog.i(TAG, "DIM BEHIND: " + w);
82728286 mInnerFields .mDimming = true ;
8273- if (!mAnimator .isDimming ()) {
8287+ final WindowStateAnimator winAnimator = w .mWinAnimator ;
8288+ if (!mAnimator .isDimming (winAnimator )) {
82748289 final int width , height ;
82758290 if (attrs .type == WindowManager .LayoutParams .TYPE_BOOT_PROGRESS ) {
82768291 width = mCurDisplayWidth ;
@@ -8279,7 +8294,7 @@ private void handleNotObscuredLocked(final WindowState w, final long currentTime
82798294 width = innerDw ;
82808295 height = innerDh ;
82818296 }
8282- mAnimator .startDimming (w . mWinAnimator , w .mExiting ? 0 : w .mAttrs .dimAmount ,
8297+ mAnimator .startDimming (winAnimator , w .mExiting ? 0 : w .mAttrs .dimAmount ,
82838298 width , height );
82848299 }
82858300 }
0 commit comments