Set correct bounds when offset and expanded

This bug occured when offset during pip window expanding animation.
curBounds value is still not expand bounds values, fix it by reset
curBounds if it should be expanded status.

Fix: 154647477
Test: Move pip widnow near and above IME then touch it.
Change-Id: I3d0215b96643c7d33d8d922d41ac12cd6291270e
This commit is contained in:
Tony Huang
2020-05-15 19:27:54 +08:00
parent 799b92b2d5
commit 5ebe019b41
2 changed files with 25 additions and 4 deletions

View File

@@ -170,9 +170,9 @@ public class PipAnimationController {
private final @AnimationType int mAnimationType;
private final Rect mDestinationBounds = new Rect();
private T mStartValue;
protected T mCurrentValue;
protected T mStartValue;
private T mEndValue;
private T mCurrentValue;
private PipAnimationCallback mPipAnimationCallback;
private PipSurfaceTransactionHelper.SurfaceControlTransactionFactory
mSurfaceControlTransactionFactory;
@@ -288,7 +288,6 @@ public class PipAnimationController {
*/
void updateEndValue(T endValue) {
mEndValue = endValue;
mStartValue = mCurrentValue;
}
SurfaceControl.Transaction newSurfaceControlTransaction() {
@@ -337,6 +336,12 @@ public class PipAnimationController {
tx.show(leash);
tx.apply();
}
@Override
void updateEndValue(Float endValue) {
super.updateEndValue(endValue);
mStartValue = mCurrentValue;
}
};
}
@@ -392,6 +397,14 @@ public class PipAnimationController {
getSurfaceTransactionHelper().resetScale(tx, leash, getDestinationBounds())
.crop(tx, leash, getDestinationBounds());
}
@Override
void updateEndValue(Rect endValue) {
super.updateEndValue(endValue);
if (mStartValue != null && mCurrentValue != null) {
mStartValue.set(mCurrentValue);
}
}
};
}
}

View File

@@ -431,13 +431,21 @@ public class PipTouchHandler {
} else {
final float offsetBufferPx = BOTTOM_OFFSET_BUFFER_DP
* mContext.getResources().getDisplayMetrics().density;
final Rect toMovementBounds = mMenuState == MENU_STATE_FULL && willResizeMenu()
final boolean isExpanded = mMenuState == MENU_STATE_FULL && willResizeMenu();
final Rect toMovementBounds = isExpanded
? new Rect(expandedMovementBounds)
: new Rect(normalMovementBounds);
final int prevBottom = mMovementBounds.bottom - mMovementBoundsExtraOffsets;
final int toBottom = toMovementBounds.bottom < toMovementBounds.top
? toMovementBounds.bottom
: toMovementBounds.bottom - extraOffset;
if (isExpanded) {
curBounds.set(mExpandedBounds);
mSnapAlgorithm.applySnapFraction(curBounds, toMovementBounds,
mSavedSnapFraction);
}
if ((Math.min(prevBottom, toBottom) - offsetBufferPx) <= curBounds.top
&& curBounds.top <= (Math.max(prevBottom, toBottom) + offsetBufferPx)) {
mMotionHelper.animateToOffset(curBounds, toBottom - curBounds.top);