Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ac34f7a4 authored by Michael Mikhail's avatar Michael Mikhail
Browse files

Fix media crash when removing UMO

Flag: com.android.systemui.media_controls_in_compose
Fixes: 430235885
Test: atest SystemUiTests:MediaRepositoryTest
Change-Id: I1f1e80a111992d8d5ca7de70410aa9a9ad949378
parent 6efeb791
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -106,6 +106,28 @@ class MediaRepositoryTest : SysuiTestCase() {
            assertThat(underTest.removeCurrentUserMediaEntry(instanceId)).isEqualTo(userMedia)
        }

    @Test
    fun addMultipleCurrentUserMediaEntries_thenRemove_returnsValues() =
        testScope.runTest {
            val currentUserEntries by collectLastValue(underTest.currentUserEntries)

            val firstInstanceId = InstanceId.fakeInstanceId(123)
            val secondInstanceId = InstanceId.fakeInstanceId(321)
            val firstUserMedia = createMediaData("app1", false, LOCAL, false, firstInstanceId)
            val secondUserMedia = createMediaData("app2", true, LOCAL, false, secondInstanceId)

            addCurrentUserMediaEntry(firstUserMedia)
            addCurrentUserMediaEntry(secondUserMedia)

            assertThat(currentUserEntries?.get(firstInstanceId)).isEqualTo(firstUserMedia)
            assertThat(currentUserEntries?.get(secondInstanceId)).isEqualTo(secondUserMedia)

            assertThat(underTest.removeCurrentUserMediaEntry(firstInstanceId))
                .isEqualTo(firstUserMedia)
            assertThat(underTest.removeCurrentUserMediaEntry(secondInstanceId))
                .isEqualTo(secondUserMedia)
        }

    @Test
    fun addMediaEntry_activeThenInactivate() =
        testScope.runTest {
+5 −7
Original line number Diff line number Diff line
@@ -127,9 +127,7 @@ constructor(
        val sortedMap = TreeMap<MediaSortKeyModel, MediaDataModel>(comparator)
        val currentModel = sortedMedia.values.find { it.instanceId == data.instanceId }

        sortedMap.putAll(
            sortedMedia.filter { (keyModel, _) -> keyModel.instanceId != data.instanceId }
        )
        sortedMap.putAll(sortedMedia.filter { (_, model) -> model.instanceId != data.instanceId })

        mutableUserEntries.value[data.instanceId]?.let { mediaData ->
            with(mediaData) {
@@ -186,7 +184,9 @@ constructor(
    private fun removeFromSortedMedia(data: MediaData) {
        currentMedia.removeIf { model -> data.instanceId == model.instanceId }
        sortedMedia =
            TreeMap(sortedMedia.filter { (keyModel, _) -> keyModel.instanceId != data.instanceId })
            TreeMap<MediaSortKeyModel, MediaDataModel>(comparator).apply {
                putAll(sortedMedia.filter { (_, model) -> model.instanceId != data.instanceId })
            }
        clearControllerState(data.instanceId)
    }

@@ -437,9 +437,7 @@ constructor(
                ?.let {
                    val sortedMap = TreeMap<MediaSortKeyModel, MediaDataModel>(comparator)
                    sortedMap.putAll(
                        sortedMedia.filter { (keyModel, _) ->
                            keyModel.instanceId != newModel.instanceId
                        }
                        sortedMedia.filter { (_, model) -> model.instanceId != newModel.instanceId }
                    )
                    sortedMap[it] = newModel
                    sortedMedia = sortedMap