diff options
3 files changed, 17 insertions, 12 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 8bbc5a9..da7eeb0 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -244,20 +244,19 @@ class DisplayContent { mTapDetector.setTouchExcludeRegion(mTouchExcludeRegion); } - void switchUserStacks(int newUserId) { + void switchUserStacks() { final WindowList windows = getWindowList(); for (int i = 0; i < windows.size(); i++) { final WindowState win = windows.get(i); if (win.isHiddenFromUserLocked()) { - if (DEBUG_VISIBILITY) Slog.w(TAG, "user changing " + newUserId + " hiding " - + win + ", attrs=" + win.mAttrs.type + ", belonging to " - + win.mOwnerUid); + if (DEBUG_VISIBILITY) Slog.w(TAG, "user changing, hiding " + win + + ", attrs=" + win.mAttrs.type + ", belonging to " + win.mOwnerUid); win.hideLw(false); } } for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) { - mStacks.get(stackNdx).switchUser(newUserId); + mStacks.get(stackNdx).switchUser(); } } diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java index c677e2c..8988a91 100644 --- a/services/core/java/com/android/server/wm/TaskStack.java +++ b/services/core/java/com/android/server/wm/TaskStack.java @@ -420,18 +420,24 @@ public class TaskStack { void startDimmingIfNeeded(WindowStateAnimator newWinAnimator) { // Only set dim params on the highest dimmed layer. - final WindowStateAnimator existingDimWinAnimator = mDimWinAnimator; // Don't turn on for an unshown surface, or for any layer but the highest dimmed layer. - if (newWinAnimator.mSurfaceShown && (existingDimWinAnimator == null - || !existingDimWinAnimator.mSurfaceShown - || existingDimWinAnimator.mAnimLayer < newWinAnimator.mAnimLayer)) { + if (newWinAnimator.mSurfaceShown && (mDimWinAnimator == null + || !mDimWinAnimator.mSurfaceShown + || mDimWinAnimator.mAnimLayer < newWinAnimator.mAnimLayer)) { mDimWinAnimator = newWinAnimator; + if (mDimWinAnimator.mWin.mAppToken == null + && !mFullscreen && mDisplayContent != null) { + // Dim should cover the entire screen for system windows. + mDisplayContent.getLogicalDisplayRect(mTmpRect); + mDimLayer.setBounds(mTmpRect); + } } } void stopDimmingIfNeeded() { if (!mDimmingTag && isDimming()) { mDimWinAnimator = null; + mDimLayer.setBounds(mBounds); } } @@ -446,7 +452,7 @@ public class TaskStack { } } - void switchUser(int userId) { + void switchUser() { int top = mTasks.size(); for (int taskNdx = 0; taskNdx < top; ++taskNdx) { Task task = mTasks.get(taskNdx); @@ -475,7 +481,7 @@ public class TaskStack { } if (mDimLayer.isDimming()) { pw.print(prefix); pw.println("mDimLayer:"); - mDimLayer.printTo(prefix, pw); + mDimLayer.printTo(prefix + " ", pw); pw.print(prefix); pw.print("mDimWinAnimator="); pw.println(mDimWinAnimator); } if (!mExitingAppTokens.isEmpty()) { diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 02a4f4d..8e3adf1 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -5479,7 +5479,7 @@ public class WindowManagerService extends IWindowManager.Stub final int numDisplays = mDisplayContents.size(); for (int displayNdx = 0; displayNdx < numDisplays; ++displayNdx) { final DisplayContent displayContent = mDisplayContents.valueAt(displayNdx); - displayContent.switchUserStacks(newUserId); + displayContent.switchUserStacks(); rebuildAppWindowListLocked(displayContent); } performLayoutAndPlaceSurfacesLocked(); |