diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaHost.kt b/packages/SystemUI/src/com/android/systemui/media/MediaHost.kt index 864592238b73d..bffb0fdec7071 100644 --- a/packages/SystemUI/src/com/android/systemui/media/MediaHost.kt +++ b/packages/SystemUI/src/com/android/systemui/media/MediaHost.kt @@ -203,14 +203,6 @@ class MediaHost constructor( } } - override var squishFraction: Float = 1.0f - set(value) { - if (!value.equals(field)) { - field = value - changedListener?.invoke() - } - } - override var showsOnlyActiveMedia: Boolean = false set(value) { if (!value.equals(field)) { @@ -261,7 +253,6 @@ class MediaHost constructor( override fun copy(): MediaHostState { val mediaHostState = MediaHostStateHolder() mediaHostState.expansion = expansion - mediaHostState.squishFraction = squishFraction mediaHostState.showsOnlyActiveMedia = showsOnlyActiveMedia mediaHostState.measurementInput = measurementInput?.copy() mediaHostState.visible = visible @@ -280,9 +271,6 @@ class MediaHost constructor( if (expansion != other.expansion) { return false } - if (squishFraction != other.squishFraction) { - return false - } if (showsOnlyActiveMedia != other.showsOnlyActiveMedia) { return false } @@ -301,7 +289,6 @@ class MediaHost constructor( override fun hashCode(): Int { var result = measurementInput?.hashCode() ?: 0 result = 31 * result + expansion.hashCode() - result = 31 * result + squishFraction.hashCode() result = 31 * result + falsingProtectionNeeded.hashCode() result = 31 * result + showsOnlyActiveMedia.hashCode() result = 31 * result + if (visible) 1 else 2 @@ -341,11 +328,6 @@ interface MediaHostState { */ var expansion: Float - /** - * Fraction of the height animation. - */ - var squishFraction: Float - /** * Is this host only showing active media or is it showing all of them including resumption? */ diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaViewController.kt b/packages/SystemUI/src/com/android/systemui/media/MediaViewController.kt index 731e348edca4d..ac59175d46469 100644 --- a/packages/SystemUI/src/com/android/systemui/media/MediaViewController.kt +++ b/packages/SystemUI/src/com/android/systemui/media/MediaViewController.kt @@ -18,7 +18,6 @@ package com.android.systemui.media import android.content.Context import android.content.res.Configuration -import androidx.annotation.VisibleForTesting import androidx.constraintlayout.widget.ConstraintSet import com.android.systemui.R import com.android.systemui.statusbar.policy.ConfigurationController @@ -279,80 +278,54 @@ class MediaViewController @Inject constructor( } } - /** - * Apply squishFraction to a copy of viewState such that the cached version is untouched. - */ - @VisibleForTesting - internal fun squishViewState( - viewState: TransitionViewState, - squishFraction: Float - ): TransitionViewState { - val squishedViewState = viewState.copy() - squishedViewState.height = (squishedViewState.height * squishFraction).toInt() - val albumArtViewState = squishedViewState.widgetStates.get(R.id.album_art) - if (albumArtViewState != null) { - albumArtViewState.height = squishedViewState.height - } - return squishedViewState - } - /** * Obtain a new viewState for a given media state. This usually returns a cached state, but if * it's not available, it will recreate one by measuring, which may be expensive. */ - @VisibleForTesting - public fun obtainViewState(state: MediaHostState?): TransitionViewState? { + private fun obtainViewState(state: MediaHostState?): TransitionViewState? { if (state == null || state.measurementInput == null) { return null } // Only a subset of the state is relevant to get a valid viewState. Let's get the cachekey var cacheKey = getKey(state, isGutsVisible, tmpKey) val viewState = viewStates[cacheKey] - if (viewState != null) { // we already have cached this measurement, let's continue - if (state.squishFraction < 1f) { - return squishViewState(viewState, state.squishFraction) - } return viewState } // Copy the key since this might call recursively into it and we're using tmpKey cacheKey = cacheKey.copy() val result: TransitionViewState? - if (transitionLayout == null) { - return null - } - // Not cached. Let's create a new measurement - if (state.expansion == 0.0f || state.expansion == 1.0f) { - result = transitionLayout!!.calculateViewState( - state.measurementInput!!, - constraintSetForExpansion(state.expansion), - TransitionViewState()) - // We don't want to cache interpolated or null states as this could quickly fill up - // our cache. We only cache the start and the end states since the interpolation - // is cheap - setGutsViewState(result) - viewStates[cacheKey] = result - logger.logMediaSize("measured new viewState", result.width, result.height) + if (transitionLayout != null) { + // Let's create a new measurement + if (state.expansion == 0.0f || state.expansion == 1.0f) { + result = transitionLayout!!.calculateViewState( + state.measurementInput!!, + constraintSetForExpansion(state.expansion), + TransitionViewState()) + + setGutsViewState(result) + // We don't want to cache interpolated or null states as this could quickly fill up + // our cache. We only cache the start and the end states since the interpolation + // is cheap + viewStates[cacheKey] = result + } else { + // This is an interpolated state + val startState = state.copy().also { it.expansion = 0.0f } + + // Given that we have a measurement and a view, let's get (guaranteed) viewstates + // from the start and end state and interpolate them + val startViewState = obtainViewState(startState) as TransitionViewState + val endState = state.copy().also { it.expansion = 1.0f } + val endViewState = obtainViewState(endState) as TransitionViewState + result = layoutController.getInterpolatedState( + startViewState, + endViewState, + state.expansion) + } } else { - // This is an interpolated state - val startState = state.copy().also { it.expansion = 0.0f } - - // Given that we have a measurement and a view, let's get (guaranteed) viewstates - // from the start and end state and interpolate them - val startViewState = obtainViewState(startState) as TransitionViewState - val endState = state.copy().also { it.expansion = 1.0f } - - val endViewState = obtainViewState(endState) as TransitionViewState - result = layoutController.getInterpolatedState( - startViewState, - endViewState, - state.expansion) - logger.logMediaSize("interpolated viewState", result.width, result.height) - } - if (state.squishFraction < 1f) { - return squishViewState(result, state.squishFraction) + result = null } return result } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java index 3820500c6de3e..b3e6f8ab3de61 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java @@ -691,7 +691,6 @@ public class QSFragment extends LifecycleFragment implements QS, CommandQueue.Ca if (mQSAnimator != null) { mQSAnimator.setPosition(expansion); } - mQqsMediaHost.setSquishFraction(mSquishinessFraction); } private void setAlphaAnimationProgress(float progress) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/MediaViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/MediaViewControllerTest.kt deleted file mode 100644 index 18178097d5e39..0000000000000 --- a/packages/SystemUI/tests/src/com/android/systemui/media/MediaViewControllerTest.kt +++ /dev/null @@ -1,86 +0,0 @@ -package com.android.systemui.media - -import android.testing.AndroidTestingRunner -import android.testing.TestableLooper -import android.view.View -import androidx.test.filters.SmallTest -import com.android.systemui.R -import com.android.systemui.SysuiTestCase -import com.android.systemui.util.animation.MeasurementInput -import com.android.systemui.util.animation.TransitionLayout -import com.android.systemui.util.animation.TransitionViewState -import com.android.systemui.util.animation.WidgetState -import junit.framework.Assert.assertTrue -import org.junit.Before -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.Mock -import org.mockito.Mockito.times -import org.mockito.Mockito.verify -import org.mockito.Mockito.verifyNoMoreInteractions -import org.mockito.MockitoAnnotations -import org.mockito.Mockito.`when` as whenever - -/** - * Tests for {@link MediaViewController}. - */ -@SmallTest -@RunWith(AndroidTestingRunner::class) -@TestableLooper.RunWithLooper -class MediaViewControllerTest : SysuiTestCase() { - @Mock - private lateinit var logger: MediaViewLogger - - private val configurationController = - com.android.systemui.statusbar.phone.ConfigurationControllerImpl(context) - private val mediaHostStatesManager = MediaHostStatesManager() - private lateinit var mediaViewController: MediaViewController - private val mediaHostStateHolder = MediaHost.MediaHostStateHolder() - private var transitionLayout = TransitionLayout(context, /* attrs */ null, /* defStyleAttr */ 0) - @Mock private lateinit var mockViewState: TransitionViewState - @Mock private lateinit var mockCopiedState: TransitionViewState - @Mock private lateinit var mockWidgetState: WidgetState - - @Before - fun setUp() { - MockitoAnnotations.initMocks(this) - mediaViewController = MediaViewController( - context, - configurationController, - mediaHostStatesManager, - logger - ) - mediaViewController.attach(transitionLayout, MediaViewController.TYPE.PLAYER) - } - - @Test - fun testObtainViewState_applySquishFraction_toTransitionViewState_height() { - transitionLayout.measureState = TransitionViewState().apply { - this.height = 100 - } - mediaHostStateHolder.expansion = 1f - val widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.EXACTLY) - val heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(100, View.MeasureSpec.EXACTLY) - mediaHostStateHolder.measurementInput = - MeasurementInput(widthMeasureSpec, heightMeasureSpec) - - // Test no squish - mediaHostStateHolder.squishFraction = 1f - assertTrue(mediaViewController.obtainViewState(mediaHostStateHolder)!!.height == 100) - - // Test half squish - mediaHostStateHolder.squishFraction = 0.5f - assertTrue(mediaViewController.obtainViewState(mediaHostStateHolder)!!.height == 50) - } - - @Test - fun testSquish_DoesNotMutateViewState() { - whenever(mockViewState.copy()).thenReturn(mockCopiedState) - whenever(mockCopiedState.widgetStates) - .thenReturn(mutableMapOf(R.id.album_art to mockWidgetState)) - - mediaViewController.squishViewState(mockViewState, 0.5f) - verify(mockViewState, times(1)).copy() - verifyNoMoreInteractions(mockViewState) - } -} \ No newline at end of file