@@ -14,21 +14,23 @@ import androidx.media3.common.Player
1414import androidx.media3.ui.PlayerNotificationManager
1515import androidx.media3.ui.PlayerNotificationManager.MediaDescriptionAdapter
1616import androidx.media3.ui.R
17+ import kotlinx.coroutines.CoroutineScope
1718import kotlinx.coroutines.Dispatchers
18- import kotlinx.coroutines.runBlocking
19+ import kotlinx.coroutines.MainScope
20+ import kotlinx.coroutines.launch
1921import java.net.URL
2022
2123/* *
2224 * Pillarbox media description adapter
2325 *
2426 * @param pendingIntent [PendingIntent] to use when a user click the notification.
2527 * @param context Context of the application.
26- *
27- * @constructor
28+ * @param coroutineScope The [CoroutineScope] used to download image.
2829 */
2930class PillarboxMediaDescriptionAdapter (
3031 private val pendingIntent : PendingIntent ? ,
31- context : Context
32+ context : Context ,
33+ private val coroutineScope : CoroutineScope = MainScope ()
3234) : MediaDescriptionAdapter {
3335 private val imageMaxWidth: Int = context.resources.getDimensionPixelSize(R .dimen.compat_notification_large_icon_max_width)
3436 private val imageMaxHeight: Int = context.resources.getDimensionPixelSize(R .dimen.compat_notification_large_icon_max_height)
@@ -67,11 +69,11 @@ class PillarboxMediaDescriptionAdapter(
6769 val imageUri = player.mediaMetadata.artworkUri!!
6870 val artworkBitmap = bitmapCache.get(imageUri)
6971 if (artworkBitmap == null ) {
70- loadBitmapFromUri(imageUri, callback)
71- bitmapCache.get(imageUri) // FIXME could return placeholder.
72- } else {
73- artworkBitmap
72+ coroutineScope.launch(Dispatchers .IO ) {
73+ loadBitmapFromUri(imageUri, callback)
74+ }
7475 }
76+ artworkBitmap // FIXME could return placeholder.
7577 }
7678
7779 else -> {
@@ -86,16 +88,14 @@ class PillarboxMediaDescriptionAdapter(
8688 outWidth = imageMaxWidth
8789 outHeight = imageMaxHeight
8890 }
89- runBlocking(Dispatchers .IO ) {
90- val result = runCatching {
91- imageUrl.openStream().use {
92- BitmapFactory .decodeStream(it, null , opts)
93- }
94- }
95- result.getOrNull()?.let {
96- bitmapCache.put(imageUri, it)
97- callback.onBitmap(it)
91+ val result = runCatching {
92+ imageUrl.openStream().use {
93+ BitmapFactory .decodeStream(it, null , opts)
9894 }
9995 }
96+ result.getOrNull()?.let {
97+ bitmapCache.put(imageUri, it)
98+ callback.onBitmap(it)
99+ }
100100 }
101101}
0 commit comments