Merge "Fix Bubbles flying away and never returning." into rvc-dev am: 0740585abf

Change-Id: I7a1173606a6110c71be2c2527275dfdf6d7e3b34
This commit is contained in:
TreeHugger Robot
2020-04-16 19:34:20 +00:00
committed by Automerger Merge Worker
3 changed files with 29 additions and 13 deletions

View File

@@ -956,6 +956,8 @@ public class BubbleStackView extends FrameLayout {
mVerticalPosPercentBeforeRotation = mVerticalPosPercentBeforeRotation =
(mStackAnimationController.getStackPosition().y - allowablePos.top) (mStackAnimationController.getStackPosition().y - allowablePos.top)
/ (allowablePos.bottom - allowablePos.top); / (allowablePos.bottom - allowablePos.top);
mVerticalPosPercentBeforeRotation =
Math.max(0f, Math.min(1f, mVerticalPosPercentBeforeRotation));
addOnLayoutChangeListener(mOrientationChangedListener); addOnLayoutChangeListener(mOrientationChangedListener);
hideFlyoutImmediate(); hideFlyoutImmediate();
} }

View File

@@ -168,6 +168,7 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
void synchronizePinnedStackBounds() { void synchronizePinnedStackBounds() {
cancelAnimations(); cancelAnimations();
mBounds.set(mPipTaskOrganizer.getLastReportedBounds()); mBounds.set(mPipTaskOrganizer.getLastReportedBounds());
mFloatingContentCoordinator.onContentMoved(this);
} }
/** /**

View File

@@ -187,16 +187,23 @@ class FloatingContentCoordinator @Inject constructor() {
// Tell that content to get out of the way, and save the bounds it says it's moving // Tell that content to get out of the way, and save the bounds it says it's moving
// (or animating) to. // (or animating) to.
.forEach { (content, bounds) -> .forEach { (content, bounds) ->
content.moveToBounds( val newBounds = content.calculateNewBoundsOnOverlap(
content.calculateNewBoundsOnOverlap( conflictingNewBounds,
conflictingNewBounds, // Pass all of the content bounds except the bounds of the
// Pass all of the content bounds except the bounds of the // content we're asking to move, and the conflicting new bounds
// content we're asking to move, and the conflicting new bounds // (since those are passed separately).
// (since those are passed separately). otherContentBounds = allContentBounds.values
otherContentBounds = allContentBounds.values .minus(bounds)
.minus(bounds) .minus(conflictingNewBounds))
.minus(conflictingNewBounds)))
allContentBounds[content] = content.getFloatingBoundsOnScreen() // If the new bounds are empty, it means there's no non-overlapping position
// that is in bounds. Just leave the content where it is. This should normally
// not happen, but sometimes content like PIP reports incorrect bounds
// temporarily.
if (!newBounds.isEmpty) {
content.moveToBounds(newBounds)
allContentBounds[content] = content.getFloatingBoundsOnScreen()
}
} }
currentlyResolvingConflicts = false currentlyResolvingConflicts = false
@@ -229,8 +236,8 @@ class FloatingContentCoordinator @Inject constructor() {
* @param allowedBounds The area within which we're allowed to find new bounds for the * @param allowedBounds The area within which we're allowed to find new bounds for the
* content. * content.
* @return New bounds for the content that don't intersect the exclusion rects or the * @return New bounds for the content that don't intersect the exclusion rects or the
* newly overlapping rect, and that is within bounds unless no possible in-bounds position * newly overlapping rect, and that is within bounds - or an empty Rect if no in-bounds
* exists. * position exists.
*/ */
@JvmStatic @JvmStatic
fun findAreaForContentVertically( fun findAreaForContentVertically(
@@ -274,7 +281,13 @@ class FloatingContentCoordinator @Inject constructor() {
!overlappingContentPushingDown && !positionAboveInBounds !overlappingContentPushingDown && !positionAboveInBounds
// Return the content rect, but offset to reflect the new position. // Return the content rect, but offset to reflect the new position.
return if (usePositionBelow) newContentBoundsBelow else newContentBoundsAbove val newBounds = if (usePositionBelow) newContentBoundsBelow else newContentBoundsAbove
// If the new bounds are within the allowed bounds, return them. If not, it means that
// there are no legal new bounds. This can happen if the new content's bounds are too
// large (for example, full-screen PIP). Since there is no reasonable action to take
// here, return an empty Rect and we will just not move the content.
return if (allowedBounds.contains(newBounds)) newBounds else Rect()
} }
/** /**