From 68f3f0e2767235ae0731b43656f5fa72e5ac296a Mon Sep 17 00:00:00 2001 From: advplyr Date: Mon, 4 Jul 2022 12:47:18 -0500 Subject: [PATCH] Fix:Prevent crashes and catch exceptions for crash reports --- .../app/player/PlayerNotificationService.kt | 14 ++++++++++++-- .../audiobookshelf/app/plugins/AbsDownloader.kt | 10 +++++++--- 2 files changed, 19 insertions(+), 5 deletions(-) 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 2fd52a1b..407c64c0 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 @@ -226,6 +226,11 @@ class PlayerNotificationService : MediaBrowserServiceCompat() { mediaSessionConnector = MediaSessionConnector(mediaSession) val queueNavigator: TimelineQueueNavigator = object : TimelineQueueNavigator(mediaSession) { override fun getMediaDescription(player: Player, windowIndex: Int): MediaDescriptionCompat { + if (currentPlaybackSession == null) { + Log.e(tag,"Playback session is not set - returning blank MediaDescriptionCompat") + return MediaDescriptionCompat.Builder().build() + } + val coverUri = currentPlaybackSession!!.getCoverUri() // Fix for local images crashing on Android 11 for specific devices @@ -643,8 +648,13 @@ class PlayerNotificationService : MediaBrowserServiceCompat() { fun closePlayback() { Log.d(tag, "closePlayback") - currentPlayer.clearMediaItems() - currentPlayer.stop() + try { + currentPlayer.stop() + currentPlayer.clearMediaItems() + } catch(e:Exception) { + Log.e(tag, "Exception clearing exoplayer $e") + } + currentPlaybackSession = null clientEventEmitter?.onPlaybackClosed() PlayerListener.lastPauseTime = 0 diff --git a/android/app/src/main/java/com/audiobookshelf/app/plugins/AbsDownloader.kt b/android/app/src/main/java/com/audiobookshelf/app/plugins/AbsDownloader.kt index 3e6c0e70..53a5a2fc 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/plugins/AbsDownloader.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/plugins/AbsDownloader.kt @@ -401,9 +401,13 @@ class AbsDownloader : Plugin() { Log.d(tag, "DOWNLOAD: Move file to final destination path: ${downloadItemPart.finalDestinationPath}") val localFolderFile = DocumentFileCompat.fromUri(mainActivity,Uri.parse(downloadItemPart.localFolderUrl)) - val mimetype = if (downloadItemPart.audioTrack != null) MimeType.AUDIO else MimeType.IMAGE - val fileDescription = FileDescription(downloadItemPart.filename, downloadItemPart.itemTitle, mimetype) - file?.moveFileTo(mainActivity,localFolderFile!!,fileDescription,fcb) + if (localFolderFile == null) { + Log.e(tag, "Local Folder File from uri is null") + } else { + val mimetype = if (downloadItemPart.audioTrack != null) MimeType.AUDIO else MimeType.IMAGE + val fileDescription = FileDescription(downloadItemPart.filename, downloadItemPart.itemTitle, mimetype) + file?.moveFileTo(mainActivity,localFolderFile,fileDescription,fcb) + } } else { // Why is kotlin requiring an else here.. }