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

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

Use same Icon and background when media is updated

We shouldn't use new instances of Icons when media data is updated and the background remains unchanged

Flag: com.android.systemui.media_controls_in_compose
Bug: 430243900
Test: Checked UI.
Change-Id: I1d16d39bc62d3e75a8f6b0b77929e0a1d693013f
parent e60d1401
Loading
Loading
Loading
Loading
+25 −3
Original line number Diff line number Diff line
@@ -17,8 +17,12 @@
package com.android.systemui.common.shared.model

import android.annotation.DrawableRes
import android.graphics.drawable.BitmapDrawable
import android.graphics.drawable.Drawable
import androidx.compose.runtime.Stable
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.asImageBitmap
import androidx.core.graphics.drawable.toBitmap
import com.android.systemui.common.shared.model.Icon.Loaded

/**
@@ -88,3 +92,21 @@ fun Drawable.asIcon(
    contentDescription: ContentDescription? = null,
    @DrawableRes res: Int? = null,
): Loaded = Loaded(this, contentDescription, res)

/**
 * Creates [ImageBitmap] for a given [Icon.Loaded]. It avoids IllegalArgumentException by providing
 * 1x1 bitmap if [Drawable.getIntrinsicWidth] or [Drawable.getIntrinsicHeight] is <= 0
 */
fun Loaded.asImageBitmap(): ImageBitmap {
    return with(drawable) {
        if (this is BitmapDrawable) {
            bitmap.asImageBitmap()
        } else {
            toBitmap(
                    width = intrinsicWidth.takeIf { it > 0 } ?: 1,
                    height = intrinsicWidth.takeIf { it > 0 } ?: 1,
                )
                .asImageBitmap()
        }
    }
}
+15 −5
Original line number Diff line number Diff line
@@ -16,12 +16,15 @@

package com.android.systemui.media.controls.data.repository

import android.content.Context
import com.android.internal.logging.InstanceId
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.media.controls.data.model.MediaSortKeyModel
import com.android.systemui.media.controls.shared.model.MediaCommonModel
import com.android.systemui.media.controls.shared.model.MediaData
import com.android.systemui.media.controls.shared.model.MediaDataLoadingModel
import com.android.systemui.media.remedia.data.model.UpdateArtInfoModel
import com.android.systemui.media.remedia.data.repository.MediaPipelineRepository
import com.android.systemui.util.time.SystemClock
import java.util.TreeMap
@@ -31,8 +34,12 @@ import kotlinx.coroutines.flow.asStateFlow

/** A repository that holds the state of filtered media data on the device. */
@SysUISingleton
class MediaFilterRepository @Inject constructor(private val systemClock: SystemClock) :
    MediaPipelineRepository() {
class MediaFilterRepository
@Inject
constructor(
    @Application private val applicationContext: Context,
    private val systemClock: SystemClock,
) : MediaPipelineRepository(applicationContext) {

    private val _currentMedia: MutableStateFlow<List<MediaCommonModel>> =
        MutableStateFlow(mutableListOf())
@@ -40,9 +47,12 @@ class MediaFilterRepository @Inject constructor(private val systemClock: SystemC

    private var sortedMedia = TreeMap<MediaSortKeyModel, MediaCommonModel>(comparator)

    override fun addCurrentUserMediaEntry(data: MediaData): Boolean {
        return super.addCurrentUserMediaEntry(data).also {
            addMediaDataLoadingState(MediaDataLoadingModel.Loaded(data.instanceId), it)
    override fun addCurrentUserMediaEntry(data: MediaData): UpdateArtInfoModel? {
        return super.addCurrentUserMediaEntry(data).also { updateModel ->
            addMediaDataLoadingState(
                MediaDataLoadingModel.Loaded(data.instanceId),
                isUpdate = updateModel != null,
            )
        }
    }

+2 −0
Original line number Diff line number Diff line
@@ -49,6 +49,8 @@ import com.android.systemui.media.controls.domain.pipeline.MediaDataManager.Comp
import com.android.systemui.media.controls.domain.resume.MediaResumeListener
import com.android.systemui.media.controls.domain.resume.ResumeMediaBrowser
import com.android.systemui.media.controls.shared.MediaLogger
import com.android.systemui.media.controls.shared.getActiveTimestamp
import com.android.systemui.media.controls.shared.isSameMediaData
import com.android.systemui.media.controls.shared.model.MediaAction
import com.android.systemui.media.controls.shared.model.MediaButton
import com.android.systemui.media.controls.shared.model.MediaData
+2 −0
Original line number Diff line number Diff line
@@ -50,6 +50,8 @@ import com.android.systemui.media.controls.domain.pipeline.MediaDataManager.Comp
import com.android.systemui.media.controls.domain.pipeline.interactor.MediaCarouselInteractor
import com.android.systemui.media.controls.domain.resume.ResumeMediaBrowser
import com.android.systemui.media.controls.shared.MediaLogger
import com.android.systemui.media.controls.shared.getActiveTimestamp
import com.android.systemui.media.controls.shared.isSameMediaData
import com.android.systemui.media.controls.shared.model.MediaAction
import com.android.systemui.media.controls.shared.model.MediaButton
import com.android.systemui.media.controls.shared.model.MediaData
+1 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.media.NotificationMediaManager.isPlayingState
import com.android.systemui.media.controls.shared.areCustomActionListsEqual
import com.android.systemui.media.controls.shared.model.MediaData
import com.android.systemui.media.controls.util.MediaControllerFactory
import com.android.systemui.plugins.statusbar.StatusBarStateController
Loading