Merge "Fix wallpaper cropped too soon when unminimizing dock" into nyc-dev

am: daa0d214dd

* commit 'daa0d214dd07caa8dc99abe635211ed94200bc2e':
  Fix wallpaper cropped too soon when unminimizing dock

Change-Id: I74f7eb8fb8eed0157ef1278241b1f22164e600b5
This commit is contained in:
Chong Zhang
2016-05-17 23:39:42 +00:00
committed by android-build-merger
2 changed files with 74 additions and 13 deletions

View File

@@ -606,12 +606,7 @@ public class DockedStackDividerController implements DimLayerUser {
private void setMinimizedDockedStack(boolean minimized) {
final TaskStack stack = mDisplayContent.getDockedStackVisibleForUserLocked();
notifyDockedStackMinimizedChanged(minimized, 0);
if (stack == null) {
return;
}
if (stack.setAdjustedForMinimizedDock(minimized ? 1f : 0f)) {
mService.mWindowPlacerLocked.performSurfacePlacement();
}
setMinimizeAmount(stack, minimized ? 1f : 0f);
}
private boolean isAnimationMaximizing() {
@@ -695,11 +690,8 @@ public class DockedStackDividerController implements DimLayerUser {
float t = Math.min(1f, (float) (now - mAnimationStartTime) / mAnimationDuration);
t = (isAnimationMaximizing() ? TOUCH_RESPONSE_INTERPOLATOR : mMinimizedDockInterpolator)
.getInterpolation(t);
if (stack != null) {
if (stack.setAdjustedForMinimizedDock(getMinimizeAmount(stack, t))) {
mService.mWindowPlacerLocked.performSurfacePlacement();
}
}
setMinimizeAmount(stack, getMinimizeAmount(stack, t));
if (t >= 1.0f) {
mAnimatingForMinimizedDockedStack = false;
return false;
@@ -708,6 +700,42 @@ public class DockedStackDividerController implements DimLayerUser {
}
}
void setMinimizeAmount(TaskStack dockedStack, float minimizeAmount) {
final ArrayList<TaskStack> stacks = mDisplayContent.getStacks();
// If the docked stack is not visible, clear the complementary stack on all stacks.
if (dockedStack == null) {
for (int i = stacks.size() - 1; i >= 0; --i) {
final TaskStack stack = stacks.get(i);
stack.resetAdjustedForComplementDock();
}
return;
}
// Otherwise if the docked stack minimize amount has changed, update the adjusted bounds
// on the other stack that's currently visible, so that the stack's getDimBounds()
// occupies what's left by the docked stack. This is needed so that stuff like wallpaper
// gets cropped properly to the area left by the dock.
if (dockedStack.setAdjustedForMinimizedDock(minimizeAmount)) {
final boolean adjusted =
dockedStack.isVisibleForUserLocked() && minimizeAmount != 0.0f;
dockedStack.getDimBounds(mTmpRect2);
int dockSide = dockedStack.getDockSide();
for (int i = stacks.size() - 1; i >= 0; --i) {
final TaskStack stack = stacks.get(i);
if (stack == dockedStack) {
continue;
}
if (stack.isVisibleLocked() && adjusted) {
stack.setAdjustedForComplementDock(mTmpRect2, dockSide);
} else {
stack.resetAdjustedForComplementDock();
}
}
mService.mWindowPlacerLocked.performSurfacePlacement();
}
}
private float getInterpolatedAnimationValue(float t) {
return t * mAnimationTarget + (1 - t) * mAnimationStart;
}

View File

@@ -122,6 +122,7 @@ public class TaskStack implements DimLayer.DimLayerUser,
private float mAdjustImeAmount;
private float mAdjustDividerAmount;
private final int mDockedStackMinimizeThickness;
private boolean mAdjustedForForComplementDock;
// If this is true, we are in the bounds animating mode.
// The task will be down or upscaled to perfectly fit the
@@ -247,7 +248,9 @@ public class TaskStack implements DimLayer.DimLayerUser,
insetBounds = mFullyAdjustedImeBounds;
}
}
alignTasksToAdjustedBounds(adjusted ? mAdjustedBounds : mBounds, insetBounds);
if (!mAdjustedForForComplementDock) {
alignTasksToAdjustedBounds(adjusted ? mAdjustedBounds : mBounds, insetBounds);
}
mDisplayContent.layoutNeeded = true;
}
@@ -854,6 +857,7 @@ public class TaskStack implements DimLayer.DimLayerUser,
mImeWin = imeWin;
mImeGoingAway = false;
if (!mAdjustedForIme || forceUpdate) {
mAdjustedForForComplementDock = false;
mAdjustedForIme = true;
mAdjustImeAmount = 0f;
mAdjustDividerAmount = 0f;
@@ -916,10 +920,12 @@ public class TaskStack implements DimLayer.DimLayerUser,
* @return Whether the amount has changed and a layout is needed.
*/
boolean setAdjustedForMinimizedDock(float minimizeAmount) {
mAdjustedForForComplementDock = false;
if (minimizeAmount != mMinimizeAmount) {
mMinimizeAmount = minimizeAmount;
updateAdjustedBounds();
return isVisibleForUserLocked();
return true;
} else {
return false;
}
@@ -929,6 +935,33 @@ public class TaskStack implements DimLayer.DimLayerUser,
return mMinimizeAmount != 0f;
}
void setAdjustedForComplementDock(Rect dockBounds, int dockSide) {
if (mMinimizeAmount != 0f || mAdjustedForIme) {
return;
}
mTmpAdjustedBounds.set(mBounds);
if (dockSide == DOCKED_TOP) {
mTmpAdjustedBounds.top = dockBounds.bottom;
} else if (dockSide == DOCKED_LEFT) {
mTmpAdjustedBounds.left = dockBounds.right;
} else if (dockSide == DOCKED_RIGHT) {
mTmpAdjustedBounds.right = dockBounds.left;
} else {
Slog.w(TAG_WM, "setAdjustedForComplementDock: invalid dock side " + dockSide);
return;
}
mAdjustedForForComplementDock = true;
setAdjustedBounds(mTmpAdjustedBounds);
}
void resetAdjustedForComplementDock() {
if (mAdjustedForForComplementDock) {
mAdjustedForForComplementDock = false;
mTmpAdjustedBounds.setEmpty();
setAdjustedBounds(mTmpAdjustedBounds);
}
}
/**
* Puts all visible tasks that are adjusted for IME into resizing mode and adds the windows
* to the list of to be drawn windows the service is waiting for.