summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Robert Carr <racarr@google.com> 2016-04-07 23:32:28 -0700
committer Robert Carr <racarr@google.com> 2016-04-13 11:50:21 -0700
commit9fe459da7ee3fd462a646b638f647c917c229eb4 (patch)
tree95371eaee9d8ae8c550870c87bfdb4d7b6c899d2
parentdcdca58cd5eb60a32de583eda5a334eb17f38034 (diff)
Replace DimLayers with windows.
When replacing windows seamlessly we should also replace their DimLayers. Bug: 26668339 Change-Id: I44d8dbacf1b2213cfb882a40a1c878666a1ebef0
-rw-r--r--services/core/java/com/android/server/wm/DimLayerController.java6
-rw-r--r--services/core/java/com/android/server/wm/WindowState.java14
2 files changed, 18 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/wm/DimLayerController.java b/services/core/java/com/android/server/wm/DimLayerController.java
index 3ec02b9f66fc..c240d0733a0a 100644
--- a/services/core/java/com/android/server/wm/DimLayerController.java
+++ b/services/core/java/com/android/server/wm/DimLayerController.java
@@ -169,6 +169,10 @@ class DimLayerController {
+ " dimLayerUser=" + dimLayerUser.toShortString()
+ " state.continueDimming=" + state.continueDimming
+ " state.dimLayer.isDimming=" + state.dimLayer.isDimming());
+ if (state.animator != null && state.animator.mWin.mWillReplaceWindow) {
+ return;
+ }
+
if (!state.continueDimming && state.dimLayer.isDimming()) {
state.animator = null;
dimLayerUser.getDimBounds(mTmpBounds);
@@ -303,7 +307,7 @@ class DimLayerController {
applyDim(dimLayerUser, animator, true /* aboveApp */);
}
- private void applyDim(
+ void applyDim(
DimLayer.DimLayerUser dimLayerUser, WindowStateAnimator animator, boolean aboveApp) {
if (dimLayerUser == null) {
Slog.e(TAG, "Trying to apply dim layer for: " + this
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 331536f01687..3a76f2f60562 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -1554,7 +1554,7 @@ final class WindowState implements WindowManagerPolicy.WindowState {
// If app died visible, apply a dim over the window to indicate that it's inactive
mDisplayContent.mDimLayerController.applyDimAbove(getDimLayerUser(), mWinAnimator);
} else if ((mAttrs.flags & FLAG_DIM_BEHIND) != 0
- && mDisplayContent != null && !mAnimatingExit && isDisplayedLw()) {
+ && mDisplayContent != null && !mAnimatingExit && isVisibleUnchecked()) {
mDisplayContent.mDimLayerController.applyDimBehind(getDimLayerUser(), mWinAnimator);
}
}
@@ -1575,6 +1575,9 @@ final class WindowState implements WindowManagerPolicy.WindowState {
final WindowState win = mAppToken.allAppWindows.get(i);
if (win.mWillReplaceWindow && win.mReplacingWindow == this && hasDrawnLw()) {
if (DEBUG_ADD_REMOVE) Slog.d(TAG, "Removing replaced window: " + win);
+ if (win.isDimming()) {
+ win.transferDimToReplacement();
+ }
win.mWillReplaceWindow = false;
win.mAnimateReplacingWindow = false;
win.mReplacingRemoveRequested = false;
@@ -2712,6 +2715,15 @@ final class WindowState implements WindowManagerPolicy.WindowState {
return winY;
}
+ void transferDimToReplacement() {
+ final DimLayer.DimLayerUser dimLayerUser = getDimLayerUser();
+ if (dimLayerUser != null && mDisplayContent != null) {
+ mDisplayContent.mDimLayerController.applyDim(dimLayerUser,
+ mReplacingWindow.mWinAnimator,
+ (mAttrs.flags & FLAG_DIM_BEHIND) != 0 ? true : false);
+ }
+ }
+
// During activity relaunch due to resize, we sometimes use window replacement
// for only child windows (as the main window is handled by window preservation)
// and the big surface.