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
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;
}
}

View File

@ -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

View File

@ -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?

View File

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

View File

@ -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));