Loading services/core/java/com/android/server/wm/DimLayer.java +5 −0 Original line number Diff line number Diff line Loading @@ -127,6 +127,11 @@ public class DimLayer { void setBounds(Rect bounds) { mBounds.set(bounds); if (isDimming() && !mLastBounds.equals(bounds)) { // Clearing mAlpha forces show to redisplay with new size. mAlpha = 0; show(); } } /** Loading services/core/java/com/android/server/wm/DisplayContent.java +5 −13 Original line number Diff line number Diff line Loading @@ -170,22 +170,13 @@ class DisplayContent { } void updateDisplayInfo() { // Save old size. int oldWidth = mDisplayInfo.logicalWidth; int oldHeight = mDisplayInfo.logicalHeight; mDisplay.getDisplayInfo(mDisplayInfo); for (int i = mStacks.size() - 1; i >= 0; --i) { final TaskStack stack = mStacks.get(i); if (!stack.isFullscreen()) { stack.resizeBounds(oldWidth, oldHeight, mDisplayInfo.logicalWidth, mDisplayInfo.logicalHeight); } mStacks.get(i).updateDisplayInfo(); } } void getLogicalDisplayRect(Rect out) { updateDisplayInfo(); // Uses same calculation as in LogicalDisplay#configureDisplayInTransactionLocked. final int orientation = mDisplayInfo.rotation; boolean rotated = (orientation == Surface.ROTATION_90 Loading Loading @@ -291,11 +282,12 @@ class DisplayContent { } boolean isDimming() { boolean result = false; for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) { result |= mStacks.get(stackNdx).isDimming(); if (mStacks.get(stackNdx).isDimming()) { return true; } return result; } return false; } void stopDimmingIfNeeded() { Loading services/core/java/com/android/server/wm/TaskStack.java +26 −30 Original line number Diff line number Diff line Loading @@ -47,12 +47,17 @@ public class TaskStack { * mTaskHistory in the ActivityStack with the same mStackId */ private final ArrayList<Task> mTasks = new ArrayList<Task>(); /** Content limits relative to the DisplayContent this sits in. Empty indicates fullscreen, * Nonempty is size of this TaskStack but is also used to scale if DisplayContent changes. */ Rect mBounds = new Rect(); /** For comparison with DisplayContent bounds. */ private Rect mTmpRect = new Rect(); /** Content limits relative to the DisplayContent this sits in. */ private Rect mBounds = new Rect(); /** Whether mBounds is fullscreen */ private boolean mFullscreen = true; /** Used to support {@link android.view.WindowManager.LayoutParams#FLAG_DIM_BEHIND} */ DimLayer mDimLayer; private DimLayer mDimLayer; /** The particular window with FLAG_DIM_BEHIND set. If null, hide mDimLayer. */ WindowStateAnimator mDimWinAnimator; Loading Loading @@ -86,7 +91,7 @@ public class TaskStack { return mTasks; } private void resizeWindows() { void resizeWindows() { final boolean underStatusBar = mBounds.top == 0; final ArrayList<WindowState> resizingWindows = mService.mResizingWindows; Loading @@ -108,7 +113,13 @@ public class TaskStack { } boolean setBounds(Rect bounds) { if (mBounds.equals(bounds)) { boolean oldFullscreen = mFullscreen; if (mDisplayContent != null) { mDisplayContent.getLogicalDisplayRect(mTmpRect); mFullscreen = mTmpRect.equals(bounds); } if (mBounds.equals(bounds) && oldFullscreen == mFullscreen) { return false; } Loading @@ -116,25 +127,22 @@ public class TaskStack { mAnimationBackgroundSurface.setBounds(bounds); mBounds.set(bounds); resizeWindows(); return true; } void getBounds(Rect out) { if (mDisplayContent != null) { if (mBounds.isEmpty()) { mDisplayContent.getLogicalDisplayRect(out); } else { out.set(mBounds); } out.intersect(mDisplayContent.mContentRect); } else { out.set(mBounds); void updateDisplayInfo() { if (mFullscreen && mDisplayContent != null) { mDisplayContent.getLogicalDisplayRect(mTmpRect); setBounds(mTmpRect); } } boolean isFullscreen() { return mBounds.isEmpty(); return mFullscreen; } boolean isAnimating() { Loading @@ -152,19 +160,6 @@ public class TaskStack { return false; } void resizeBounds(float oldWidth, float oldHeight, float newWidth, float newHeight) { if (oldWidth == newWidth && oldHeight == newHeight) { return; } float widthScale = newWidth / oldWidth; float heightScale = newHeight / oldHeight; mBounds.left = (int)(mBounds.left * widthScale + 0.5); mBounds.top = (int)(mBounds.top * heightScale + 0.5); mBounds.right = (int)(mBounds.right * widthScale + 0.5); mBounds.bottom = (int)(mBounds.bottom * heightScale + 0.5); resizeWindows(); } /** * Put a Task in this stack. Used for adding and moving. * @param task The task to add. Loading Loading @@ -233,6 +228,7 @@ public class TaskStack { mDisplayContent = displayContent; mDimLayer = new DimLayer(mService, this, displayContent); mAnimationBackgroundSurface = new DimLayer(mService, this, displayContent); updateDisplayInfo(); } void detachDisplay() { Loading services/core/java/com/android/server/wm/WindowManagerService.java +2 −0 Original line number Diff line number Diff line Loading @@ -4990,6 +4990,7 @@ public class WindowManagerService extends IWindowManager.Stub + " not found."); } if (stack.setBounds(bounds)) { stack.resizeWindows(); stack.getDisplayContent().layoutNeeded = true; performLayoutAndPlaceSurfacesLocked(); } Loading Loading @@ -9961,6 +9962,7 @@ public class WindowManagerService extends IWindowManager.Stub } // TODO(multidisplay): rotation on main screen only. displayContent.updateDisplayInfo(); screenRotationAnimation = new ScreenRotationAnimation(mContext, displayContent, mFxSession, inTransaction, mPolicy.isDefaultOrientationForced()); mAnimator.setScreenRotationAnimationLocked(displayId, screenRotationAnimation); Loading Loading
services/core/java/com/android/server/wm/DimLayer.java +5 −0 Original line number Diff line number Diff line Loading @@ -127,6 +127,11 @@ public class DimLayer { void setBounds(Rect bounds) { mBounds.set(bounds); if (isDimming() && !mLastBounds.equals(bounds)) { // Clearing mAlpha forces show to redisplay with new size. mAlpha = 0; show(); } } /** Loading
services/core/java/com/android/server/wm/DisplayContent.java +5 −13 Original line number Diff line number Diff line Loading @@ -170,22 +170,13 @@ class DisplayContent { } void updateDisplayInfo() { // Save old size. int oldWidth = mDisplayInfo.logicalWidth; int oldHeight = mDisplayInfo.logicalHeight; mDisplay.getDisplayInfo(mDisplayInfo); for (int i = mStacks.size() - 1; i >= 0; --i) { final TaskStack stack = mStacks.get(i); if (!stack.isFullscreen()) { stack.resizeBounds(oldWidth, oldHeight, mDisplayInfo.logicalWidth, mDisplayInfo.logicalHeight); } mStacks.get(i).updateDisplayInfo(); } } void getLogicalDisplayRect(Rect out) { updateDisplayInfo(); // Uses same calculation as in LogicalDisplay#configureDisplayInTransactionLocked. final int orientation = mDisplayInfo.rotation; boolean rotated = (orientation == Surface.ROTATION_90 Loading Loading @@ -291,11 +282,12 @@ class DisplayContent { } boolean isDimming() { boolean result = false; for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) { result |= mStacks.get(stackNdx).isDimming(); if (mStacks.get(stackNdx).isDimming()) { return true; } return result; } return false; } void stopDimmingIfNeeded() { Loading
services/core/java/com/android/server/wm/TaskStack.java +26 −30 Original line number Diff line number Diff line Loading @@ -47,12 +47,17 @@ public class TaskStack { * mTaskHistory in the ActivityStack with the same mStackId */ private final ArrayList<Task> mTasks = new ArrayList<Task>(); /** Content limits relative to the DisplayContent this sits in. Empty indicates fullscreen, * Nonempty is size of this TaskStack but is also used to scale if DisplayContent changes. */ Rect mBounds = new Rect(); /** For comparison with DisplayContent bounds. */ private Rect mTmpRect = new Rect(); /** Content limits relative to the DisplayContent this sits in. */ private Rect mBounds = new Rect(); /** Whether mBounds is fullscreen */ private boolean mFullscreen = true; /** Used to support {@link android.view.WindowManager.LayoutParams#FLAG_DIM_BEHIND} */ DimLayer mDimLayer; private DimLayer mDimLayer; /** The particular window with FLAG_DIM_BEHIND set. If null, hide mDimLayer. */ WindowStateAnimator mDimWinAnimator; Loading Loading @@ -86,7 +91,7 @@ public class TaskStack { return mTasks; } private void resizeWindows() { void resizeWindows() { final boolean underStatusBar = mBounds.top == 0; final ArrayList<WindowState> resizingWindows = mService.mResizingWindows; Loading @@ -108,7 +113,13 @@ public class TaskStack { } boolean setBounds(Rect bounds) { if (mBounds.equals(bounds)) { boolean oldFullscreen = mFullscreen; if (mDisplayContent != null) { mDisplayContent.getLogicalDisplayRect(mTmpRect); mFullscreen = mTmpRect.equals(bounds); } if (mBounds.equals(bounds) && oldFullscreen == mFullscreen) { return false; } Loading @@ -116,25 +127,22 @@ public class TaskStack { mAnimationBackgroundSurface.setBounds(bounds); mBounds.set(bounds); resizeWindows(); return true; } void getBounds(Rect out) { if (mDisplayContent != null) { if (mBounds.isEmpty()) { mDisplayContent.getLogicalDisplayRect(out); } else { out.set(mBounds); } out.intersect(mDisplayContent.mContentRect); } else { out.set(mBounds); void updateDisplayInfo() { if (mFullscreen && mDisplayContent != null) { mDisplayContent.getLogicalDisplayRect(mTmpRect); setBounds(mTmpRect); } } boolean isFullscreen() { return mBounds.isEmpty(); return mFullscreen; } boolean isAnimating() { Loading @@ -152,19 +160,6 @@ public class TaskStack { return false; } void resizeBounds(float oldWidth, float oldHeight, float newWidth, float newHeight) { if (oldWidth == newWidth && oldHeight == newHeight) { return; } float widthScale = newWidth / oldWidth; float heightScale = newHeight / oldHeight; mBounds.left = (int)(mBounds.left * widthScale + 0.5); mBounds.top = (int)(mBounds.top * heightScale + 0.5); mBounds.right = (int)(mBounds.right * widthScale + 0.5); mBounds.bottom = (int)(mBounds.bottom * heightScale + 0.5); resizeWindows(); } /** * Put a Task in this stack. Used for adding and moving. * @param task The task to add. Loading Loading @@ -233,6 +228,7 @@ public class TaskStack { mDisplayContent = displayContent; mDimLayer = new DimLayer(mService, this, displayContent); mAnimationBackgroundSurface = new DimLayer(mService, this, displayContent); updateDisplayInfo(); } void detachDisplay() { Loading
services/core/java/com/android/server/wm/WindowManagerService.java +2 −0 Original line number Diff line number Diff line Loading @@ -4990,6 +4990,7 @@ public class WindowManagerService extends IWindowManager.Stub + " not found."); } if (stack.setBounds(bounds)) { stack.resizeWindows(); stack.getDisplayContent().layoutNeeded = true; performLayoutAndPlaceSurfacesLocked(); } Loading Loading @@ -9961,6 +9962,7 @@ public class WindowManagerService extends IWindowManager.Stub } // TODO(multidisplay): rotation on main screen only. displayContent.updateDisplayInfo(); screenRotationAnimation = new ScreenRotationAnimation(mContext, displayContent, mFxSession, inTransaction, mPolicy.isDefaultOrientationForced()); mAnimator.setScreenRotationAnimationLocked(displayId, screenRotationAnimation); Loading