Skip to content

Commit acafd19

Browse files
author
Craig Mautner
committed
Update DimAnimator layer when its window changes.
Prior to this fix once dimming had been turned on it stayed at the same layer and associated with the same window until it was turned off. Now the DimAnimator layer is updated if either the window layer changes or the dimming window changes. Fixes bug 6467865. Change-Id: I3e1765b92b51be26e3718c8a87e2583041a36af9
1 parent a76f823 commit acafd19

File tree

2 files changed

+28
-9
lines changed

2 files changed

+28
-9
lines changed

services/java/com/android/server/wm/WindowAnimator.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,10 @@ boolean isDimming() {
548548
return mDimParams != null;
549549
}
550550

551+
boolean isDimming(final WindowStateAnimator winAnimator) {
552+
return mDimParams != null && mDimParams.mDimWinAnimator == winAnimator;
553+
}
554+
551555
public void dump(PrintWriter pw, String prefix, boolean dumpAll) {
552556
if (mWindowDetachedWallpaper != null) {
553557
pw.print(" mWindowDetachedWallpaper="); pw.println(mWindowDetachedWallpaper);

services/java/com/android/server/wm/WindowManagerService.java

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)