@roitium/expo-orpheus 0.7.1 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -43,10 +43,12 @@ android {
43
43
  }
44
44
 
45
45
  dependencies {
46
- implementation "androidx.media3:media3-exoplayer:1.8.0"
47
- implementation "androidx.media3:media3-session:1.8.0"
46
+ implementation "androidx.media3:media3-exoplayer:1.9.0"
47
+ implementation "androidx.media3:media3-session:1.9.0"
48
+ implementation("androidx.media3:media3-exoplayer-dash:1.9.0")
48
49
  implementation "com.squareup.retrofit2:retrofit:2.9.0"
49
50
  implementation "com.google.code.gson:gson:2.13.2"
50
51
  implementation "com.squareup.retrofit2:converter-gson:2.9.0"
51
52
  implementation 'com.tencent:mmkv:2.3.0'
53
+ implementation "com.github.bumptech.glide:glide:5.0.5"
52
54
  }
@@ -19,6 +19,7 @@ import com.google.common.util.concurrent.ListenableFuture
19
19
  import expo.modules.orpheus.utils.DownloadUtil
20
20
  import expo.modules.orpheus.utils.SleepTimeController
21
21
  import expo.modules.orpheus.utils.GeneralStorage
22
+ import expo.modules.orpheus.utils.GlideBitmapLoader
22
23
  import expo.modules.orpheus.utils.LoudnessStorage
23
24
  import expo.modules.orpheus.utils.calculateLoudnessGain
24
25
  import expo.modules.orpheus.utils.fadeInTo
@@ -111,6 +112,7 @@ class OrpheusMusicService : MediaLibraryService() {
111
112
  mediaSession = MediaLibrarySession.Builder(this, player!!, callback)
112
113
  .setId("OrpheusSession")
113
114
  .setSessionActivity(contentIntent)
115
+ .setBitmapLoader(GlideBitmapLoader(this))
114
116
  .build()
115
117
 
116
118
  restorePlayerState(GeneralStorage.isRestoreEnabled())
@@ -0,0 +1,58 @@
1
+ package expo.modules.orpheus.utils
2
+
3
+ import android.content.Context
4
+ import android.graphics.Bitmap
5
+ import android.net.Uri
6
+ import android.util.Log
7
+ import androidx.media3.common.MediaMetadata
8
+ import androidx.media3.common.util.BitmapLoader
9
+ import com.bumptech.glide.Glide
10
+ import com.bumptech.glide.load.engine.DiskCacheStrategy
11
+ import com.google.common.util.concurrent.ListenableFuture
12
+ import com.google.common.util.concurrent.ListeningExecutorService
13
+ import com.google.common.util.concurrent.MoreExecutors
14
+ import java.util.concurrent.Executors
15
+
16
+ @androidx.media3.common.util.UnstableApi
17
+ class GlideBitmapLoader(private val context: Context) : BitmapLoader {
18
+ private val executorService: ListeningExecutorService =
19
+ MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor())
20
+
21
+ override fun loadBitmapFromMetadata(metadata: MediaMetadata): ListenableFuture<Bitmap> {
22
+ val uri = metadata.artworkUri ?:
23
+ return executorService.submit<Bitmap> {
24
+ throw IllegalArgumentException("Metadata artworkUri is null")
25
+ }
26
+ return loadBitmap(uri)
27
+ }
28
+
29
+ override fun supportsMimeType(mimeType: String): Boolean {
30
+ return true
31
+ }
32
+
33
+ override fun decodeBitmap(data: ByteArray): ListenableFuture<Bitmap> {
34
+ return executorService.submit<Bitmap> {
35
+ throw UnsupportedOperationException("Not implemented for raw bytes")
36
+ }
37
+ }
38
+
39
+ override fun loadBitmap(uri: Uri): ListenableFuture<Bitmap> {
40
+ return executorService.submit<Bitmap> {
41
+ Log.d("GlideBitmapLoader", "load image $uri")
42
+ val glideBitmap = Glide.with(context)
43
+ .asBitmap()
44
+ .load(uri)
45
+ .diskCacheStrategy(DiskCacheStrategy.NONE)
46
+ .submit(512, 512)
47
+ .get()
48
+
49
+ if (glideBitmap != null && !glideBitmap.isRecycled) {
50
+ val safeBitmap = glideBitmap.copy(Bitmap.Config.ARGB_8888, false)
51
+
52
+ return@submit safeBitmap
53
+ } else {
54
+ throw IllegalStateException("Bitmap load failed or recycled")
55
+ }
56
+ }
57
+ }
58
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@roitium/expo-orpheus",
3
- "version": "0.7.1",
3
+ "version": "0.7.2",
4
4
  "description": "A player for bbplayer",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",