From 4fa6dd261649ae5f5f17ea466c0216f82e53aa9b Mon Sep 17 00:00:00 2001 From: advplyr Date: Fri, 6 May 2022 18:57:05 -0500 Subject: [PATCH] Fix:Cover crashing when using in media notification. Convert content uri for local image to File and pass main activity context instead of player service context #35 #164 --- .../app/player/AbMediaDescriptionAdapter.kt | 24 ++++++++++++++++--- .../app/player/PlayerNotificationService.kt | 4 ++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/android/app/src/main/java/com/audiobookshelf/app/player/AbMediaDescriptionAdapter.kt b/android/app/src/main/java/com/audiobookshelf/app/player/AbMediaDescriptionAdapter.kt index b3117b77..653bb38c 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/player/AbMediaDescriptionAdapter.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/player/AbMediaDescriptionAdapter.kt @@ -5,6 +5,9 @@ import android.graphics.Bitmap import android.net.Uri import android.support.v4.media.session.MediaControllerCompat import android.util.Log +import androidx.documentfile.provider.DocumentFile +import com.anggrayudi.storage.file.getAbsolutePath +import com.anggrayudi.storage.file.toRawFile import com.audiobookshelf.app.R import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy @@ -60,10 +63,25 @@ class AbMediaDescriptionAdapter constructor(private val controller: MediaControl private suspend fun resolveUriAsBitmap(uri: Uri): Bitmap? { return withContext(Dispatchers.IO) { // Block on downloading artwork. + val context = playerNotificationService.getContext() + + // Fix attempt for #35 local cover crashing + // Convert content uri to a file and pass to Glide + var urival:Any = uri + if (uri.toString().startsWith("content:")) { + val imageDocFile = DocumentFile.fromSingleUri(context, uri) + Log.d(tag, "Converting local content url $uri to file with path ${imageDocFile?.getAbsolutePath(context)}") + val file = imageDocFile?.toRawFile(context) + file?.let { + Log.d(tag, "Using local file image instead of content uri ${it.absolutePath}") + urival = it + } + } + try { - Glide.with(playerNotificationService).applyDefaultRequestOptions(glideOptions) + Glide.with(context).applyDefaultRequestOptions(glideOptions) .asBitmap() - .load(uri) + .load(urival) .placeholder(R.drawable.icon) .error(R.drawable.icon) .submit(NOTIFICATION_LARGE_ICON_SIZE, NOTIFICATION_LARGE_ICON_SIZE) @@ -71,7 +89,7 @@ class AbMediaDescriptionAdapter constructor(private val controller: MediaControl } catch (e: Exception) { e.printStackTrace() - Glide.with(playerNotificationService).applyDefaultRequestOptions(glideOptions) + Glide.with(context).applyDefaultRequestOptions(glideOptions) .asBitmap() .load(Uri.parse("android.resource://com.audiobookshelf.app/" + R.drawable.icon)) .submit(NOTIFICATION_LARGE_ICON_SIZE, NOTIFICATION_LARGE_ICON_SIZE) diff --git a/android/app/src/main/java/com/audiobookshelf/app/player/PlayerNotificationService.kt b/android/app/src/main/java/com/audiobookshelf/app/player/PlayerNotificationService.kt index 24bc94ed..ea98d963 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/player/PlayerNotificationService.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/player/PlayerNotificationService.kt @@ -539,6 +539,10 @@ class PlayerNotificationService : MediaBrowserServiceCompat() { return if(currentPlayer == castPlayer) "cast-player" else "exo-player" } + fun getContext():Context { + return ctx + } + // // MEDIA BROWSER STUFF (ANDROID AUTO) //