Browse Source

Merge pull request #2745 from nextcloud/bugfix/noid/fixExceptions

Bugfix/noid/fix exceptions
Marcel Hibbe 2 years ago
parent
commit
608c66c9d2

+ 14 - 6
app/src/main/java/com/nextcloud/talk/activities/CallActivity.java

@@ -1318,7 +1318,9 @@ public class CallActivity extends CallBaseActivity {
 
     @Override
     public void onDestroy() {
-        signalingMessageReceiver.removeListener(offerMessageListener);
+        if (signalingMessageReceiver != null) {
+            signalingMessageReceiver.removeListener(offerMessageListener);
+        }
 
         if (localStream != null) {
             localStream.dispose();
@@ -2591,12 +2593,18 @@ public class CallActivity extends CallBaseActivity {
 
     private void stopCallingSound() {
         if (mediaPlayer != null) {
-            if (mediaPlayer.isPlaying()) {
-                mediaPlayer.stop();
+            try {
+                if (mediaPlayer.isPlaying()) {
+                    mediaPlayer.stop();
+                }
+            } catch (IllegalStateException e) {
+                Log.e(TAG, "mediaPlayer was not initialized", e);
+            } finally {
+                if (mediaPlayer != null) {
+                    mediaPlayer.release();
+                }
+                mediaPlayer = null;
             }
-
-            mediaPlayer.release();
-            mediaPlayer = null;
         }
     }
 

+ 42 - 18
app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt

@@ -846,8 +846,10 @@ class ChatController(args: Bundle) :
 
                         showRecordAudioUi(true)
 
-                        if (sliderInitX == 0.0F) {
-                            sliderInitX = binding?.messageInputView?.slideToCancelDescription?.x!!
+                        binding?.messageInputView?.slideToCancelDescription?.x?.let {
+                            if (sliderInitX == 0.0F) {
+                                sliderInitX = it
+                            }
                         }
 
                         val movedX: Float = event.x
@@ -1002,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) }
@@ -1010,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!")
@@ -1034,9 +1044,18 @@ class ChatController(args: Bundle) :
 
         mediaPlayerHandler.removeCallbacksAndMessages(null)
 
-        mediaPlayer?.stop()
-        mediaPlayer?.release()
-        mediaPlayer = null
+        try {
+            mediaPlayer?.let {
+                if (it.isPlaying) {
+                    it.stop()
+                }
+            }
+        } catch (e: IllegalStateException) {
+            Log.e(TAG, "mediaPlayer was not initialized", e)
+        } finally {
+            mediaPlayer?.release()
+            mediaPlayer = null
+        }
     }
 
     override fun updateMediaPlayerProgressBySlider(messageWithSlidedProgress: ChatMessage, progress: Int) {
@@ -2492,11 +2511,15 @@ class ChatController(args: Bundle) :
 
             if (previousMessageId > NO_PREVIOUS_MESSAGE_ID) {
                 chatMessage.previousMessageId = previousMessageId
-            } else if (adapter?.isEmpty != true) {
-                if (adapter!!.items[0].item is ChatMessage) {
-                    chatMessage.previousMessageId = (adapter!!.items[0].item as ChatMessage).jsonMessageId
-                } else if (adapter!!.items.size > 1 && adapter!!.items[1].item is ChatMessage) {
-                    chatMessage.previousMessageId = (adapter!!.items[1].item as ChatMessage).jsonMessageId
+            } else {
+                adapter?.let {
+                    if (!it.isEmpty) {
+                        if (it.items[0].item is ChatMessage) {
+                            chatMessage.previousMessageId = (it.items[0].item as ChatMessage).jsonMessageId
+                        } else if (it.items.size > 1 && it.items[1].item is ChatMessage) {
+                            chatMessage.previousMessageId = (it.items[1].item as ChatMessage).jsonMessageId
+                        }
+                    }
                 }
             }
 
@@ -3420,6 +3443,7 @@ class ChatController(args: Bundle) :
         private const val VOICE_RECORD_CANCEL_SLIDER_X: Int = -50
         private const val VOICE_MESSAGE_META_DATA = "{\"messageType\":\"voice-message\"}"
         private const val VOICE_MESSAGE_FILE_SUFFIX = ".mp3"
+
         // Samplingrate 22050 was chosen because somehow 44100 failed to playback on safari when recorded on android.
         // Please test with firefox, chrome, safari and mobile clients if changing anything regarding the sound.
         private const val VOICE_MESSAGE_SAMPLING_RATE = 22050

+ 2 - 8
app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt

@@ -543,7 +543,7 @@ class ConversationInfoController(args: Bundle) :
                         .java
                 ).setInputData(it).build()
             )
-            popTwoLastControllers()
+            router.popToRoot()
         }
     }
 
@@ -613,16 +613,10 @@ class ConversationInfoController(args: Bundle) :
                     DeleteConversationWorker::class.java
                 ).setInputData(it).build()
             )
-            popTwoLastControllers()
+            router.popToRoot()
         }
     }
 
-    private fun popTwoLastControllers() {
-        var backstack = router.backstack
-        backstack = backstack.subList(0, backstack.size - 2)
-        router.setBackstack(backstack, HorizontalChangeHandler())
-    }
-
     private fun fetchRoomInfo() {
         var apiVersion = 1
         // FIXME Fix API checking with guests?

+ 1 - 1
app/src/main/java/com/nextcloud/talk/controllers/LockedController.kt

@@ -144,7 +144,7 @@ class LockedController : BaseController(R.layout.controller_locked) {
                     "popCurrentController because 'we are authenticated'. backstacksize= " +
                         router.backstack.size
                 )
-                router.popCurrentController()
+                router.popToRoot()
             }
         }
     }

+ 1 - 1
app/src/main/java/com/nextcloud/talk/webrtc/PeerConnectionWrapper.java

@@ -269,7 +269,7 @@ public class PeerConnectionWrapper {
 
     public void sendChannelData(DataChannelMessage dataChannelMessage) {
         ByteBuffer buffer;
-        if (dataChannel != null) {
+        if (dataChannel != null && dataChannelMessage != null) {
             try {
                 buffer = ByteBuffer.wrap(LoganSquare.serialize(dataChannelMessage).getBytes());
                 dataChannel.send(new DataChannel.Buffer(buffer, false));