From 1b006ba45c97168ec04912384e0641d9bdb308b5 Mon Sep 17 00:00:00 2001
From: Myzel394 <50424412+Myzel394@users.noreply.github.com>
Date: Fri, 22 Mar 2024 22:06:25 +0100
Subject: [PATCH] fix: Improve error handling
Signed-off-by: Myzel394 <50424412+Myzel394@users.noreply.github.com>
---
.../alibi/services/VideoRecorderService.kt | 25 +++++++++++--------
.../atoms/RecorderErrorDialog.kt | 12 ++-------
.../organisms/RecorderEventsHandler.kt | 25 ++++++++++++++++---
app/src/main/res/values/strings.xml | 2 +-
4 files changed, 40 insertions(+), 24 deletions(-)
diff --git a/app/src/main/java/app/myzel394/alibi/services/VideoRecorderService.kt b/app/src/main/java/app/myzel394/alibi/services/VideoRecorderService.kt
index aa74867..06bcac8 100644
--- a/app/src/main/java/app/myzel394/alibi/services/VideoRecorderService.kt
+++ b/app/src/main/java/app/myzel394/alibi/services/VideoRecorderService.kt
@@ -191,17 +191,22 @@ class VideoRecorderService :
videoCapture = buildVideoCapture(recorder)
runOnMain {
- camera = cameraProvider!!.bindToLifecycle(
- this,
- selectedCamera,
- videoCapture
- )
- cameraControl = CameraControl(camera!!).also {
- it.init()
- }
- onCameraControlAvailable()
+ try {
+ camera = cameraProvider!!.bindToLifecycle(
+ this,
+ selectedCamera,
+ videoCapture
+ )
- _cameraAvailableListener.complete(Unit)
+ cameraControl = CameraControl(camera!!).also {
+ it.init()
+ }
+ onCameraControlAvailable()
+
+ _cameraAvailableListener.complete(Unit)
+ } catch (error: IllegalArgumentException) {
+ onError()
+ }
}
}
diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/atoms/RecorderErrorDialog.kt b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/atoms/RecorderErrorDialog.kt
index 92da619..a05306c 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/atoms/RecorderErrorDialog.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/atoms/RecorderErrorDialog.kt
@@ -3,8 +3,6 @@ package app.myzel394.alibi.ui.components.RecorderScreen.atoms
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Warning
import androidx.compose.material3.AlertDialog
-import androidx.compose.material3.Button
-import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
@@ -15,7 +13,6 @@ import app.myzel394.alibi.R
@Composable
fun RecorderErrorDialog(
onClose: () -> Unit,
- onSave: () -> Unit,
) {
AlertDialog(
onDismissRequest = onClose,
@@ -31,14 +28,9 @@ fun RecorderErrorDialog(
text = {
Text(stringResource(R.string.ui_recorder_error_recording_description))
},
- dismissButton = {
- TextButton(onClick = onClose) {
- Text(stringResource(R.string.dialog_close_cancel_label))
- }
- },
confirmButton = {
- TextButton(onClick = onSave) {
- Text(stringResource(R.string.ui_recorder_action_save_label))
+ TextButton(onClick = onClose) {
+ Text(stringResource(R.string.dialog_close_neutral_label))
}
}
)
diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/RecorderEventsHandler.kt b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/RecorderEventsHandler.kt
index 6db673d..688a33a 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/RecorderEventsHandler.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/RecorderEventsHandler.kt
@@ -93,9 +93,16 @@ fun RecorderEventsHandler(
recorder: RecorderModel
) {
if (!settings.deleteRecordingsImmediately) {
+ val information = recorder.recorderService?.getRecordingInformation()
+
+ if (information == null) {
+ Log.e("RecorderEventsHandler", "Recording information is null")
+ return
+ }
+
dataStore.updateData {
it.setLastRecording(
- recorder.recorderService!!.getRecordingInformation()
+ information
)
}
}
@@ -247,6 +254,13 @@ fun RecorderEventsHandler(
scope.launch {
saveAsLastRecording(audioRecorder as RecorderModel)
+ runCatching {
+ audioRecorder.stopRecording(context)
+ }
+ runCatching {
+ audioRecorder.destroyService(context)
+ }
+
showRecorderError = true
}
}
@@ -290,6 +304,13 @@ fun RecorderEventsHandler(
scope.launch {
saveAsLastRecording(videoRecorder as RecorderModel)
+ runCatching {
+ videoRecorder.stopRecording(context)
+ }
+ runCatching {
+ videoRecorder.destroyService(context)
+ }
+
showRecorderError = true
}
}
@@ -324,8 +345,6 @@ fun RecorderEventsHandler(
onClose = {
showRecorderError = false
},
- onSave = {
- },
)
if (showBatchesInaccessibleError)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 79cab07..ec7cd34 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -80,7 +80,7 @@
Recording paused
Alibi is paused
An error occurred
- Alibi encountered an error during recording. Would you like to try saving the recording?
+ Alibi encountered an error during recording. Try using different settings or restart the app.
Language
Change
Device Microphone