am 0af894d2: Merge "Update DimLayer sizes on rotation." into klp-modular-dev
* commit '0af894d25133890e7765e6c582b3ac4829070de8': Update DimLayer sizes on rotation.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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
|
||||
@@ -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() {
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
out.set(mBounds);
|
||||
}
|
||||
|
||||
void updateDisplayInfo() {
|
||||
if (mFullscreen && mDisplayContent != null) {
|
||||
mDisplayContent.getLogicalDisplayRect(mTmpRect);
|
||||
setBounds(mTmpRect);
|
||||
}
|
||||
}
|
||||
|
||||
boolean isFullscreen() {
|
||||
return mBounds.isEmpty();
|
||||
return mFullscreen;
|
||||
}
|
||||
|
||||
boolean isAnimating() {
|
||||
@@ -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.
|
||||
@@ -233,6 +228,7 @@ public class TaskStack {
|
||||
mDisplayContent = displayContent;
|
||||
mDimLayer = new DimLayer(mService, this, displayContent);
|
||||
mAnimationBackgroundSurface = new DimLayer(mService, this, displayContent);
|
||||
updateDisplayInfo();
|
||||
}
|
||||
|
||||
void detachDisplay() {
|
||||
|
||||
@@ -4990,6 +4990,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
+ " not found.");
|
||||
}
|
||||
if (stack.setBounds(bounds)) {
|
||||
stack.resizeWindows();
|
||||
stack.getDisplayContent().layoutNeeded = true;
|
||||
performLayoutAndPlaceSurfacesLocked();
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user