mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2024-11-22 01:15:54 +03:00
Merge pull request #6967 from vector-im/feature/bma/fix_crashes
Fix crashes
This commit is contained in:
commit
0950e41526
7 changed files with 27 additions and 9 deletions
1
changelog.d/6967.bugfix
Normal file
1
changelog.d/6967.bugfix
Normal file
|
@ -0,0 +1 @@
|
|||
Fix low occurrence crashes.
|
|
@ -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)
|
||||
|
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue