Loading packages/SystemUI/src/com/android/systemui/common/shared/model/Icon.kt +25 −3 Original line number Diff line number Diff line Loading @@ -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 /** Loading Loading @@ -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() } } } packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt +15 −5 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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()) Loading @@ -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, ) } } Loading packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/LegacyMediaDataManagerImpl.kt +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaDataProcessor.kt +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaTimeoutListener.kt +1 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
packages/SystemUI/src/com/android/systemui/common/shared/model/Icon.kt +25 −3 Original line number Diff line number Diff line Loading @@ -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 /** Loading Loading @@ -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() } } }
packages/SystemUI/src/com/android/systemui/media/controls/data/repository/MediaFilterRepository.kt +15 −5 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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()) Loading @@ -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, ) } } Loading
packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/LegacyMediaDataManagerImpl.kt +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaDataProcessor.kt +2 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
packages/SystemUI/src/com/android/systemui/media/controls/domain/pipeline/MediaTimeoutListener.kt +1 −0 Original line number Diff line number Diff line Loading @@ -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