From 332b856cfec0d61b5227f1c6bea39d2c9d5f3205 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Thu, 9 Feb 2023 10:56:03 +0100 Subject: [PATCH] avoid IOException for ChatController#initMediaPlayer Exception java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:558) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:936) Caused by java.lang.reflect.InvocationTargetException: at java.lang.reflect.Method.invoke at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:548) Caused by java.io.IOException: Prepare failed.: status=0x1 at android.media.MediaPlayer._prepare at android.media.MediaPlayer.prepare (MediaPlayer.java:1309) at com.nextcloud.talk.controllers.ChatController.initMediaPlayer (ChatController.kt:1023) at com.nextcloud.talk.controllers.ChatController.startPlayback (ChatController.kt:981) at com.nextcloud.talk.controllers.ChatController.access$startPlayback (ChatController.kt:219) at com.nextcloud.talk.controllers.ChatController$downloadFileToCache$1.invoke (ChatController.kt:1111) at com.nextcloud.talk.controllers.ChatController$downloadFileToCache$1.invoke (ChatController.kt:1109) at com.nextcloud.talk.controllers.ChatController.downloadFileToCache$lambda$18 (ChatController.kt:1109) at com.nextcloud.talk.controllers.ChatController.$r8$lambda$6crsUAwqqfwhlukFd40yEwEwluI at com.nextcloud.talk.controllers.ChatController$$ExternalSyntheticLambda9.onChanged at androidx.lifecycle.LiveData.considerNotify (LiveData.java:133) at androidx.lifecycle.LiveData.dispatchingValue (LiveData.java:151) at androidx.lifecycle.LiveData.setValue (LiveData.java:309) at androidx.lifecycle.MutableLiveData.setValue (MutableLiveData.java:50) at androidx.lifecycle.LiveData$1.run (LiveData.java:93) at android.os.Handler.handleCallback (Handler.java:942) at android.os.Handler.dispatchMessage (Handler.java:99) at android.os.Looper.loopOnce (Looper.java:201) at android.os.Looper.loop (Looper.java:288) at android.app.ActivityThread.main (ActivityThread.java:7872) Signed-off-by: Marcel Hibbe --- .../talk/controllers/ChatController.kt | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt index a8eab8259..2324c0506 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -1004,6 +1004,7 @@ class ChatController(args: Bundle) : adapter?.update(message) } + @Suppress("Detekt.TooGenericExceptionCaught") private fun initMediaPlayer(message: ChatMessage) { if (message != currentlyPlayedVoiceMessage) { currentlyPlayedVoiceMessage?.let { stopMediaPlayer(it) } @@ -1012,15 +1013,22 @@ class ChatController(args: Bundle) : if (mediaPlayer == null) { val fileName = message.selectedIndividualHashMap!!["name"] val absolutePath = context.cacheDir.absolutePath + "/" + fileName - mediaPlayer = MediaPlayer().apply { - setDataSource(absolutePath) - prepare() - } - currentlyPlayedVoiceMessage = message - message.voiceMessageDuration = mediaPlayer!!.duration / VOICE_MESSAGE_SEEKBAR_BASE - mediaPlayer!!.setOnCompletionListener { - stopMediaPlayer(message) + try { + mediaPlayer = MediaPlayer().apply { + setDataSource(absolutePath) + prepare() + } + + currentlyPlayedVoiceMessage = message + message.voiceMessageDuration = mediaPlayer!!.duration / VOICE_MESSAGE_SEEKBAR_BASE + + mediaPlayer!!.setOnCompletionListener { + stopMediaPlayer(message) + } + } catch (e: Exception) { + Log.e(TAG, "failed to initialize mediaPlayer", e) + Toast.makeText(context, R.string.nc_common_error_sorry, Toast.LENGTH_LONG).show() } } else { Log.e(TAG, "mediaPlayer was not null. This should not happen!")