Merge "Fix Bubbles flying away and never returning." into rvc-dev am: 0740585abf
Change-Id: I7a1173606a6110c71be2c2527275dfdf6d7e3b34
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user