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

Bugfix/noid/fix exceptions
This commit is contained in:
Marcel Hibbe 2023-02-09 14:00:43 +01:00 committed by GitHub
commit 608c66c9d2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 60 additions and 34 deletions

View File

@ -1318,7 +1318,9 @@ public class CallActivity extends CallBaseActivity {
@Override @Override
public void onDestroy() { public void onDestroy() {
signalingMessageReceiver.removeListener(offerMessageListener); if (signalingMessageReceiver != null) {
signalingMessageReceiver.removeListener(offerMessageListener);
}
if (localStream != null) { if (localStream != null) {
localStream.dispose(); localStream.dispose();
@ -2591,12 +2593,18 @@ public class CallActivity extends CallBaseActivity {
private void stopCallingSound() { private void stopCallingSound() {
if (mediaPlayer != null) { if (mediaPlayer != null) {
if (mediaPlayer.isPlaying()) { try {
mediaPlayer.stop(); 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;
} }
} }

View File

@ -846,8 +846,10 @@ class ChatController(args: Bundle) :
showRecordAudioUi(true) showRecordAudioUi(true)
if (sliderInitX == 0.0F) { binding?.messageInputView?.slideToCancelDescription?.x?.let {
sliderInitX = binding?.messageInputView?.slideToCancelDescription?.x!! if (sliderInitX == 0.0F) {
sliderInitX = it
}
} }
val movedX: Float = event.x val movedX: Float = event.x
@ -1002,6 +1004,7 @@ class ChatController(args: Bundle) :
adapter?.update(message) adapter?.update(message)
} }
@Suppress("Detekt.TooGenericExceptionCaught")
private fun initMediaPlayer(message: ChatMessage) { private fun initMediaPlayer(message: ChatMessage) {
if (message != currentlyPlayedVoiceMessage) { if (message != currentlyPlayedVoiceMessage) {
currentlyPlayedVoiceMessage?.let { stopMediaPlayer(it) } currentlyPlayedVoiceMessage?.let { stopMediaPlayer(it) }
@ -1010,15 +1013,22 @@ class ChatController(args: Bundle) :
if (mediaPlayer == null) { if (mediaPlayer == null) {
val fileName = message.selectedIndividualHashMap!!["name"] val fileName = message.selectedIndividualHashMap!!["name"]
val absolutePath = context.cacheDir.absolutePath + "/" + fileName val absolutePath = context.cacheDir.absolutePath + "/" + fileName
mediaPlayer = MediaPlayer().apply {
setDataSource(absolutePath)
prepare()
}
currentlyPlayedVoiceMessage = message
message.voiceMessageDuration = mediaPlayer!!.duration / VOICE_MESSAGE_SEEKBAR_BASE
mediaPlayer!!.setOnCompletionListener { try {
stopMediaPlayer(message) 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 { } else {
Log.e(TAG, "mediaPlayer was not null. This should not happen!") Log.e(TAG, "mediaPlayer was not null. This should not happen!")
@ -1034,9 +1044,18 @@ class ChatController(args: Bundle) :
mediaPlayerHandler.removeCallbacksAndMessages(null) mediaPlayerHandler.removeCallbacksAndMessages(null)
mediaPlayer?.stop() try {
mediaPlayer?.release() mediaPlayer?.let {
mediaPlayer = null 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) { override fun updateMediaPlayerProgressBySlider(messageWithSlidedProgress: ChatMessage, progress: Int) {
@ -2492,11 +2511,15 @@ class ChatController(args: Bundle) :
if (previousMessageId > NO_PREVIOUS_MESSAGE_ID) { if (previousMessageId > NO_PREVIOUS_MESSAGE_ID) {
chatMessage.previousMessageId = previousMessageId chatMessage.previousMessageId = previousMessageId
} else if (adapter?.isEmpty != true) { } else {
if (adapter!!.items[0].item is ChatMessage) { adapter?.let {
chatMessage.previousMessageId = (adapter!!.items[0].item as ChatMessage).jsonMessageId if (!it.isEmpty) {
} else if (adapter!!.items.size > 1 && adapter!!.items[1].item is ChatMessage) { if (it.items[0].item is ChatMessage) {
chatMessage.previousMessageId = (adapter!!.items[1].item as ChatMessage).jsonMessageId 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_RECORD_CANCEL_SLIDER_X: Int = -50
private const val VOICE_MESSAGE_META_DATA = "{\"messageType\":\"voice-message\"}" private const val VOICE_MESSAGE_META_DATA = "{\"messageType\":\"voice-message\"}"
private const val VOICE_MESSAGE_FILE_SUFFIX = ".mp3" private const val VOICE_MESSAGE_FILE_SUFFIX = ".mp3"
// Samplingrate 22050 was chosen because somehow 44100 failed to playback on safari when recorded on android. // 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. // Please test with firefox, chrome, safari and mobile clients if changing anything regarding the sound.
private const val VOICE_MESSAGE_SAMPLING_RATE = 22050 private const val VOICE_MESSAGE_SAMPLING_RATE = 22050

View File

@ -543,7 +543,7 @@ class ConversationInfoController(args: Bundle) :
.java .java
).setInputData(it).build() ).setInputData(it).build()
) )
popTwoLastControllers() router.popToRoot()
} }
} }
@ -613,16 +613,10 @@ class ConversationInfoController(args: Bundle) :
DeleteConversationWorker::class.java DeleteConversationWorker::class.java
).setInputData(it).build() ).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() { private fun fetchRoomInfo() {
var apiVersion = 1 var apiVersion = 1
// FIXME Fix API checking with guests? // FIXME Fix API checking with guests?

View File

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

View File

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