Ensure final height of UMO transition is the hostView's height

Since the targetHost should be measured correctly, and it sets
the child view's size when it is added (either by remeasuring
or by directly setting it), setting it again to the target bounds
is unnessecary and potentially buggy.

Additionally, when we obtain a view state, we always obtain it
at an expansion of 1f. This prevents any squishiness from being
applied when remeasuring.

Test: Manual
Bug: 232528163
Change-Id: I0a4e6c457663dfe376ad7754f6d151f47d3aeaf3
This commit is contained in:
Hawkwood Glazier
2022-11-23 17:04:48 +00:00
committed by Selim Cinek
parent 96c4978054
commit 876efc4b26
2 changed files with 5 additions and 12 deletions

View File

@@ -1043,18 +1043,9 @@ constructor(
rootOverlay!!.add(mediaFrame)
} else {
val targetHost = getHost(newLocation)!!.hostView
// When adding back to the host, let's make sure to reset the bounds.
// Usually adding the view will trigger a layout that does this automatically,
// but we sometimes suppress this.
// This will either do a full layout pass and remeasure, or it will bypass
// that and directly set the mediaFrame's bounds within the premeasured host.
targetHost.addView(mediaFrame)
val left = targetHost.paddingLeft
val top = targetHost.paddingTop
mediaFrame.setLeftTopRightBottom(
left,
top,
left + currentBounds.width(),
top + currentBounds.height()
)
if (mediaFrame.childCount > 0) {
val child = mediaFrame.getChildAt(0)

View File

@@ -420,7 +420,9 @@ constructor(
*/
fun getMeasurementsForState(hostState: MediaHostState): MeasurementOutput? =
traceSection("MediaViewController#getMeasurementsForState") {
val viewState = obtainViewState(hostState) ?: return null
// measurements should never factor in the squish fraction
val viewState =
obtainViewState(hostState.copy().also { it.squishFraction = 1.0f }) ?: return null
measurement.measuredWidth = viewState.width
measurement.measuredHeight = viewState.height
return measurement