diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/media/MediaViewController.kt | 6 | ||||
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/systemui/media/MediaViewControllerTest.kt | 20 |
2 files changed, 24 insertions, 2 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaViewController.kt b/packages/SystemUI/src/com/android/systemui/media/MediaViewController.kt index 1437c965512e..7eccb3b91bb5 100644 --- a/packages/SystemUI/src/com/android/systemui/media/MediaViewController.kt +++ b/packages/SystemUI/src/com/android/systemui/media/MediaViewController.kt @@ -278,13 +278,14 @@ class MediaViewController @Inject constructor( /** * Apply squishFraction to a copy of viewState such that the cached version is untouched. */ - private fun squishViewState( + @VisibleForTesting + internal fun squishViewState( viewState: TransitionViewState, squishFraction: Float ): TransitionViewState { val squishedViewState = viewState.copy() squishedViewState.height = (squishedViewState.height * squishFraction).toInt() - val albumArtViewState = viewState.widgetStates.get(R.id.album_art) + val albumArtViewState = squishedViewState.widgetStates.get(R.id.album_art) if (albumArtViewState != null) { albumArtViewState.height = squishedViewState.height } @@ -317,6 +318,7 @@ class MediaViewController @Inject constructor( 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( diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/MediaViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/media/MediaViewControllerTest.kt index 604e1f3ac9eb..18178097d5e3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/MediaViewControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/media/MediaViewControllerTest.kt @@ -4,16 +4,22 @@ 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}. @@ -31,6 +37,9 @@ class MediaViewControllerTest : SysuiTestCase() { 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() { @@ -63,4 +72,15 @@ class MediaViewControllerTest : SysuiTestCase() { 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 |