From cf6c653ad3d6360ed68034d22060bbc6ae0b4545 Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Mon, 1 Jan 2024 00:23:51 +0100 Subject: [PATCH] feat: Show error dialog when batches folder is inaccessible --- .../java/app/myzel394/alibi/ui/Constants.kt | 1 - .../atoms/BatchesInaccessibleDialog.kt | 42 +++++++++++++++++++ .../organisms/RecorderEventsHandler.kt | 33 +++++++++++++++ .../alibi/ui/models/BaseRecorderModel.kt | 8 +++- app/src/main/res/values/strings.xml | 1 + 5 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/atoms/BatchesInaccessibleDialog.kt diff --git a/app/src/main/java/app/myzel394/alibi/ui/Constants.kt b/app/src/main/java/app/myzel394/alibi/ui/Constants.kt index 5c4615e..9b2aac8 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/Constants.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/Constants.kt @@ -11,7 +11,6 @@ val SUPPORTS_DARK_MODE_NATIVELY = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q val MEDIA_SUBFOLDER_NAME = "alibi" -// TODO: Fix! val SUPPORTS_SCOPED_STORAGE = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O val MEDIA_RECORDINGS_PREFIX = "alibi-recording-" val RECORDER_MEDIA_SELECTED_VALUE = "_'media" diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/atoms/BatchesInaccessibleDialog.kt b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/atoms/BatchesInaccessibleDialog.kt new file mode 100644 index 0000000..e9cda66 --- /dev/null +++ b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/atoms/BatchesInaccessibleDialog.kt @@ -0,0 +1,42 @@ +package app.myzel394.alibi.ui.components.RecorderScreen.atoms + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Error +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.runtime.Composable +import androidx.compose.ui.res.stringResource +import app.myzel394.alibi.R + +@Composable +fun BatchesInaccessibleDialog( + onClose: () -> Unit, +) { + AlertDialog( + onDismissRequest = onClose, + icon = { + Icon( + Icons.Default.Error, + contentDescription = null, + ) + }, + title = { + Text(stringResource(R.string.ui_audioRecorder_error_recording_title)) + }, + text = { + Text(stringResource(R.string.ui_audioRecorder_error_batchesInaccessible_description)) + }, + confirmButton = { + Button( + onClick = onClose, + colors = ButtonDefaults.textButtonColors(), + ) { + Text(stringResource(R.string.dialog_close_neutral_label)) + } + } + ) +} \ No newline at end of file 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 20dd06c..49d21b9 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 @@ -23,6 +23,7 @@ import app.myzel394.alibi.helpers.AudioBatchesFolder import app.myzel394.alibi.helpers.BatchesFolder import app.myzel394.alibi.helpers.VideoBatchesFolder import app.myzel394.alibi.services.IntervalRecorderService +import app.myzel394.alibi.ui.components.RecorderScreen.atoms.BatchesInaccessibleDialog import app.myzel394.alibi.ui.components.RecorderScreen.atoms.RecorderErrorDialog import app.myzel394.alibi.ui.components.RecorderScreen.atoms.RecorderProcessingDialog import app.myzel394.alibi.ui.models.AudioRecorderModel @@ -51,6 +52,7 @@ fun RecorderEventsHandler( var isProcessing by remember { mutableStateOf(false) } var showRecorderError by remember { mutableStateOf(false) } + var showBatchesInaccessibleError by remember { mutableStateOf(false) } val saveAudioFile = rememberFileSaverDialog(settings.audioRecorderSettings.getMimeType()) { if (settings.deleteRecordingsImmediately) { @@ -235,6 +237,18 @@ fun RecorderEventsHandler( showRecorderError = true } } + audioRecorder.onBatchesFolderNotAccessible = { + scope.launch { + showBatchesInaccessibleError = true + + runCatching { + audioRecorder.stopRecording(context) + } + runCatching { + audioRecorder.destroyService(context) + } + } + } onDispose { audioRecorder.onRecordingSave = {} @@ -266,6 +280,18 @@ fun RecorderEventsHandler( showRecorderError = true } } + videoRecorder.onBatchesFolderNotAccessible = { + scope.launch { + showBatchesInaccessibleError = true + + runCatching { + videoRecorder.stopRecording(context) + } + runCatching { + videoRecorder.destroyService(context) + } + } + } onDispose { videoRecorder.onRecordingSave = {} @@ -284,4 +310,11 @@ fun RecorderEventsHandler( onSave = { }, ) + + if (showBatchesInaccessibleError) + BatchesInaccessibleDialog( + onClose = { + showBatchesInaccessibleError = false + }, + ) } \ No newline at end of file diff --git a/app/src/main/java/app/myzel394/alibi/ui/models/BaseRecorderModel.kt b/app/src/main/java/app/myzel394/alibi/ui/models/BaseRecorderModel.kt index 29c8da4..a7f93ba 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/models/BaseRecorderModel.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/models/BaseRecorderModel.kt @@ -47,6 +47,7 @@ abstract class BaseRecorderModel Unit = {} var onError: () -> Unit = {} + var onBatchesFolderNotAccessible: () -> Unit = {} abstract var batchesFolder: B? private var notificationDetails: RecorderNotificationHelper.NotificationDetails? = null @@ -70,11 +71,14 @@ abstract class BaseRecorderModelPermission required To access the DCIM folder, you need to grant Alibi the permission to access external storage. Alibi will only use this permission to write your recordings to the DCIM folder. Grant permission + Alibi couldn\'t access or write to the batches folder. Try to choose a different folder or use the internal storage instead. The recording has been aborted. \ No newline at end of file