am 0af894d2: Merge "Update DimLayer sizes on rotation." into klp-modular-dev

* commit '0af894d25133890e7765e6c582b3ac4829070de8':
  Update DimLayer sizes on rotation.
This commit is contained in:
Craig Mautner
2014-02-13 19:05:18 +00:00
committed by Android Git Automerger
4 changed files with 38 additions and 43 deletions

View File

@@ -127,6 +127,11 @@ public class DimLayer {
void setBounds(Rect bounds) { void setBounds(Rect bounds) {
mBounds.set(bounds); mBounds.set(bounds);
if (isDimming() && !mLastBounds.equals(bounds)) {
// Clearing mAlpha forces show to redisplay with new size.
mAlpha = 0;
show();
}
} }
/** /**

View File

@@ -170,22 +170,13 @@ class DisplayContent {
} }
void updateDisplayInfo() { void updateDisplayInfo() {
// Save old size.
int oldWidth = mDisplayInfo.logicalWidth;
int oldHeight = mDisplayInfo.logicalHeight;
mDisplay.getDisplayInfo(mDisplayInfo); mDisplay.getDisplayInfo(mDisplayInfo);
for (int i = mStacks.size() - 1; i >= 0; --i) { for (int i = mStacks.size() - 1; i >= 0; --i) {
final TaskStack stack = mStacks.get(i); mStacks.get(i).updateDisplayInfo();
if (!stack.isFullscreen()) {
stack.resizeBounds(oldWidth, oldHeight, mDisplayInfo.logicalWidth,
mDisplayInfo.logicalHeight);
}
} }
} }
void getLogicalDisplayRect(Rect out) { void getLogicalDisplayRect(Rect out) {
updateDisplayInfo();
// Uses same calculation as in LogicalDisplay#configureDisplayInTransactionLocked. // Uses same calculation as in LogicalDisplay#configureDisplayInTransactionLocked.
final int orientation = mDisplayInfo.rotation; final int orientation = mDisplayInfo.rotation;
boolean rotated = (orientation == Surface.ROTATION_90 boolean rotated = (orientation == Surface.ROTATION_90
@@ -291,11 +282,12 @@ class DisplayContent {
} }
boolean isDimming() { boolean isDimming() {
boolean result = false;
for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) { 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() { void stopDimmingIfNeeded() {

View File

@@ -47,12 +47,17 @@ public class TaskStack {
* mTaskHistory in the ActivityStack with the same mStackId */ * mTaskHistory in the ActivityStack with the same mStackId */
private final ArrayList<Task> mTasks = new ArrayList<Task>(); private final ArrayList<Task> mTasks = new ArrayList<Task>();
/** Content limits relative to the DisplayContent this sits in. Empty indicates fullscreen, /** For comparison with DisplayContent bounds. */
* Nonempty is size of this TaskStack but is also used to scale if DisplayContent changes. */ private Rect mTmpRect = new Rect();
Rect mBounds = 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} */ /** 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. */ /** The particular window with FLAG_DIM_BEHIND set. If null, hide mDimLayer. */
WindowStateAnimator mDimWinAnimator; WindowStateAnimator mDimWinAnimator;
@@ -86,7 +91,7 @@ public class TaskStack {
return mTasks; return mTasks;
} }
private void resizeWindows() { void resizeWindows() {
final boolean underStatusBar = mBounds.top == 0; final boolean underStatusBar = mBounds.top == 0;
final ArrayList<WindowState> resizingWindows = mService.mResizingWindows; final ArrayList<WindowState> resizingWindows = mService.mResizingWindows;
@@ -108,7 +113,13 @@ public class TaskStack {
} }
boolean setBounds(Rect bounds) { 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; return false;
} }
@@ -116,25 +127,22 @@ public class TaskStack {
mAnimationBackgroundSurface.setBounds(bounds); mAnimationBackgroundSurface.setBounds(bounds);
mBounds.set(bounds); mBounds.set(bounds);
resizeWindows();
return true; return true;
} }
void getBounds(Rect out) { void getBounds(Rect out) {
if (mDisplayContent != null) {
if (mBounds.isEmpty()) {
mDisplayContent.getLogicalDisplayRect(out);
} else {
out.set(mBounds); out.set(mBounds);
} }
out.intersect(mDisplayContent.mContentRect);
} else { void updateDisplayInfo() {
out.set(mBounds); if (mFullscreen && mDisplayContent != null) {
mDisplayContent.getLogicalDisplayRect(mTmpRect);
setBounds(mTmpRect);
} }
} }
boolean isFullscreen() { boolean isFullscreen() {
return mBounds.isEmpty(); return mFullscreen;
} }
boolean isAnimating() { boolean isAnimating() {
@@ -152,19 +160,6 @@ public class TaskStack {
return false; 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. * Put a Task in this stack. Used for adding and moving.
* @param task The task to add. * @param task The task to add.
@@ -233,6 +228,7 @@ public class TaskStack {
mDisplayContent = displayContent; mDisplayContent = displayContent;
mDimLayer = new DimLayer(mService, this, displayContent); mDimLayer = new DimLayer(mService, this, displayContent);
mAnimationBackgroundSurface = new DimLayer(mService, this, displayContent); mAnimationBackgroundSurface = new DimLayer(mService, this, displayContent);
updateDisplayInfo();
} }
void detachDisplay() { void detachDisplay() {

View File

@@ -4990,6 +4990,7 @@ public class WindowManagerService extends IWindowManager.Stub
+ " not found."); + " not found.");
} }
if (stack.setBounds(bounds)) { if (stack.setBounds(bounds)) {
stack.resizeWindows();
stack.getDisplayContent().layoutNeeded = true; stack.getDisplayContent().layoutNeeded = true;
performLayoutAndPlaceSurfacesLocked(); performLayoutAndPlaceSurfacesLocked();
} }
@@ -9961,6 +9962,7 @@ public class WindowManagerService extends IWindowManager.Stub
} }
// TODO(multidisplay): rotation on main screen only. // TODO(multidisplay): rotation on main screen only.
displayContent.updateDisplayInfo();
screenRotationAnimation = new ScreenRotationAnimation(mContext, displayContent, screenRotationAnimation = new ScreenRotationAnimation(mContext, displayContent,
mFxSession, inTransaction, mPolicy.isDefaultOrientationForced()); mFxSession, inTransaction, mPolicy.isDefaultOrientationForced());
mAnimator.setScreenRotationAnimationLocked(displayId, screenRotationAnimation); mAnimator.setScreenRotationAnimationLocked(displayId, screenRotationAnimation);