Merge pull request #6967 from vector-im/feature/bma/fix_crashes

Fix crashes
This commit is contained in:
Benoit Marty 2022-08-31 15:25:57 +02:00 committed by GitHub
commit 0950e41526
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 27 additions and 9 deletions

1
changelog.d/6967.bugfix Normal file
View file

@ -0,0 +1 @@
Fix low occurrence crashes.

View file

@ -16,6 +16,7 @@
package im.vector.app.core.error
import android.content.ActivityNotFoundException
import im.vector.app.R
import im.vector.app.core.resources.StringProvider
import im.vector.app.features.call.dialpad.DialPadLookup
@ -134,6 +135,8 @@ class DefaultErrorFormatter @Inject constructor(
is MatrixIdFailure.InvalidMatrixId ->
stringProvider.getString(R.string.login_signin_matrix_id_error_invalid_matrix_id)
is VoiceFailure -> voiceMessageError(throwable)
is ActivityNotFoundException ->
stringProvider.getString(R.string.error_no_external_application_found)
else -> throwable.localizedMessage
}
?: stringProvider.getString(R.string.unknown_error)

View file

@ -16,6 +16,7 @@
package im.vector.app.features.attachments
import android.app.Activity
import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
import android.net.Uri
@ -44,6 +45,7 @@ class AttachmentsHelper(
interface Callback {
fun onContactAttachmentReady(contactAttachment: ContactAttachment)
fun onContentAttachmentsReady(attachments: List<ContentAttachmentData>)
fun onAttachmentError(throwable: Throwable)
}
// Capture path allows to handle camera image picking. It must be restored if the activity gets killed.
@ -73,21 +75,21 @@ class AttachmentsHelper(
/**
* Starts the process for handling file picking.
*/
fun selectFile(activityResultLauncher: ActivityResultLauncher<Intent>) {
fun selectFile(activityResultLauncher: ActivityResultLauncher<Intent>) = doSafe {
MultiPicker.get(MultiPicker.FILE).startWith(activityResultLauncher)
}
/**
* Starts the process for handling image/video picking.
*/
fun selectGallery(activityResultLauncher: ActivityResultLauncher<Intent>) {
fun selectGallery(activityResultLauncher: ActivityResultLauncher<Intent>) = doSafe {
MultiPicker.get(MultiPicker.MEDIA).startWith(activityResultLauncher)
}
/**
* Starts the process for handling audio picking.
*/
fun selectAudio(activityResultLauncher: ActivityResultLauncher<Intent>) {
fun selectAudio(activityResultLauncher: ActivityResultLauncher<Intent>) = doSafe {
MultiPicker.get(MultiPicker.AUDIO).startWith(activityResultLauncher)
}
@ -101,11 +103,11 @@ class AttachmentsHelper(
cameraVideoActivityResultLauncher: ActivityResultLauncher<Intent>
) {
PhotoOrVideoDialog(activity, vectorPreferences).show(object : PhotoOrVideoDialog.PhotoOrVideoDialogListener {
override fun takePhoto() {
override fun takePhoto() = doSafe {
captureUri = MultiPicker.get(MultiPicker.CAMERA).startWithExpectingFile(context, cameraActivityResultLauncher)
}
override fun takeVideo() {
override fun takeVideo() = doSafe {
captureUri = MultiPicker.get(MultiPicker.CAMERA_VIDEO).startWithExpectingFile(context, cameraVideoActivityResultLauncher)
}
})
@ -114,10 +116,18 @@ class AttachmentsHelper(
/**
* Starts the process for handling contact picking.
*/
fun selectContact(activityResultLauncher: ActivityResultLauncher<Intent>) {
fun selectContact(activityResultLauncher: ActivityResultLauncher<Intent>) = doSafe {
MultiPicker.get(MultiPicker.CONTACT).startWith(activityResultLauncher)
}
private fun doSafe(function: () -> Unit) {
try {
function()
} catch (activityNotFound: ActivityNotFoundException) {
callback.onAttachmentError(activityNotFound)
}
}
/**
* This methods aims to handle the result data.
*/

View file

@ -2658,6 +2658,10 @@ class TimelineFragment :
messageComposerViewModel.handle(MessageComposerAction.SendMessage(formattedContact, false))
}
override fun onAttachmentError(throwable: Throwable) {
showFailure(throwable)
}
private fun onViewWidgetsClicked() {
RoomWidgetsBottomSheet.newInstance()
.show(childFragmentManager, "ROOM_WIDGETS_BOTTOM_SHEET")

View file

@ -1046,7 +1046,7 @@ class TimelineViewModel @AssistedInject constructor(
val event = try {
room.reportingService().reportContent(action.eventId, -100, action.reason)
RoomDetailViewEvents.ActionSuccess(action)
} catch (failure: Exception) {
} catch (failure: Throwable) {
RoomDetailViewEvents.ActionFailure(action, failure)
}
_viewEvents.post(event)

View file

@ -271,7 +271,7 @@ class RoomListViewModel @AssistedInject constructor(
viewModelScope.launch {
try {
room.roomPushRuleService().setRoomNotificationState(action.notificationState)
} catch (failure: Exception) {
} catch (failure: Throwable) {
_viewEvents.post(RoomListViewEvents.Failure(failure))
}
}

View file

@ -289,7 +289,7 @@ class HomeRoomListViewModel @AssistedInject constructor(
viewModelScope.launch {
try {
room.roomPushRuleService().setRoomNotificationState(action.notificationState)
} catch (failure: Exception) {
} catch (failure: Throwable) {
_viewEvents.post(HomeRoomListViewEvents.Failure(failure))
}
}