From eacf3cc2f13fc028f2fc79370fd7b12baae135d2 Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Thu, 26 Oct 2023 19:41:13 +0200 Subject: [PATCH] fix: Move lastRecording to AppSettings --- .../java/app/myzel394/alibi/db/AppSettings.kt | 5 ++++ .../alibi/services/IntervalRecorderService.kt | 2 +- .../AudioRecorder/molecules/StartRecording.kt | 4 +-- .../organisms/RecordingStatus.kt | 3 +- .../alibi/ui/models/AudioRecorderModel.kt | 10 +------ .../alibi/ui/screens/AudioRecorder.kt | 29 +++++++++++++++---- 6 files changed, 34 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/app/myzel394/alibi/db/AppSettings.kt b/app/src/main/java/app/myzel394/alibi/db/AppSettings.kt index ea04802..505f1a7 100644 --- a/app/src/main/java/app/myzel394/alibi/db/AppSettings.kt +++ b/app/src/main/java/app/myzel394/alibi/db/AppSettings.kt @@ -18,6 +18,7 @@ data class AppSettings( val hasSeenOnboarding: Boolean = false, val showAdvancedSettings: Boolean = false, val theme: Theme = Theme.SYSTEM, + val lastRecording: RecordingInformation? = null, ) { fun setShowAdvancedSettings(showAdvancedSettings: Boolean): AppSettings { return copy(showAdvancedSettings = showAdvancedSettings) @@ -39,6 +40,10 @@ data class AppSettings( return copy(theme = theme) } + fun setLastRecording(lastRecording: RecordingInformation?): AppSettings { + return copy(lastRecording = lastRecording) + } + enum class Theme { SYSTEM, LIGHT, diff --git a/app/src/main/java/app/myzel394/alibi/services/IntervalRecorderService.kt b/app/src/main/java/app/myzel394/alibi/services/IntervalRecorderService.kt index 262aceb..88d2bca 100644 --- a/app/src/main/java/app/myzel394/alibi/services/IntervalRecorderService.kt +++ b/app/src/main/java/app/myzel394/alibi/services/IntervalRecorderService.kt @@ -30,7 +30,7 @@ abstract class IntervalRecorderService : ExtraRecorderInformationService() { protected val outputFolder: File get() = AudioRecorderExporter.getFolder(this) - fun createLastRecording(): RecordingInformation = RecordingInformation( + fun getRecordingInformation(): RecordingInformation = RecordingInformation( folderPath = outputFolder.absolutePath, recordingStart = recordingStart, maxDuration = settings!!.maxDuration, diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/AudioRecorder/molecules/StartRecording.kt b/app/src/main/java/app/myzel394/alibi/ui/components/AudioRecorder/molecules/StartRecording.kt index 2c7580b..ef76128 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/components/AudioRecorder/molecules/StartRecording.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/components/AudioRecorder/molecules/StartRecording.kt @@ -148,7 +148,7 @@ fun StartRecording( .fillMaxWidth(), textAlign = TextAlign.Center, ) - if (audioRecorder.lastRecording != null && audioRecorder.lastRecording!!.hasRecordingsAvailable) { + if (appSettings.lastRecording?.hasRecordingsAvailable == true) { Column( modifier = Modifier.weight(1f), horizontalAlignment = Alignment.CenterHorizontally, @@ -157,7 +157,7 @@ fun StartRecording( val label = stringResource( R.string.ui_audioRecorder_action_saveOldRecording_label, DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL) - .format(audioRecorder.lastRecording!!.recordingStart), + .format(appSettings.lastRecording.recordingStart), ) Button( modifier = Modifier diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/AudioRecorder/organisms/RecordingStatus.kt b/app/src/main/java/app/myzel394/alibi/ui/components/AudioRecorder/organisms/RecordingStatus.kt index 878c51c..7aabe6e 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/components/AudioRecorder/organisms/RecordingStatus.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/components/AudioRecorder/organisms/RecordingStatus.kt @@ -106,7 +106,8 @@ fun RecordingStatus( ) { DeleteButton( onDelete = { - audioRecorder.stopRecording(context, saveAsLastRecording = false) + audioRecorder.stopRecording(context) + AudioRecorderExporter.clearAllRecordings(context) } ) diff --git a/app/src/main/java/app/myzel394/alibi/ui/models/AudioRecorderModel.kt b/app/src/main/java/app/myzel394/alibi/ui/models/AudioRecorderModel.kt index 2df981f..7c9724a 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/models/AudioRecorderModel.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/models/AudioRecorderModel.kt @@ -42,9 +42,6 @@ class AudioRecorderModel : ViewModel() { var recorderService: AudioRecorderService? = null private set - var lastRecording: RecordingInformation? by mutableStateOf(null) - private set - var onRecordingSave: () -> Unit = {} var onError: () -> Unit = {} var notificationDetails: RecorderNotificationHelper.NotificationDetails? = null @@ -73,7 +70,6 @@ class AudioRecorderModel : ViewModel() { onAmplitudeChange() } recorder.onError = { - recorderService!!.createLastRecording() onError() } recorder.onSelectedMicrophoneChange = { microphone -> @@ -132,11 +128,7 @@ class AudioRecorderModel : ViewModel() { context.bindService(intent, connection, Context.BIND_AUTO_CREATE) } - fun stopRecording(context: Context, saveAsLastRecording: Boolean = true) { - if (saveAsLastRecording) { - lastRecording = recorderService!!.createLastRecording() - } - + fun stopRecording(context: Context) { runCatching { context.unbindService(connection) } diff --git a/app/src/main/java/app/myzel394/alibi/ui/screens/AudioRecorder.kt b/app/src/main/java/app/myzel394/alibi/ui/screens/AudioRecorder.kt index 8346c0d..6c9c0db 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/screens/AudioRecorder.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/screens/AudioRecorder.kt @@ -50,6 +50,7 @@ fun AudioRecorder( ) { val context = LocalContext.current + val dataStore = context.dataStore val settings = rememberSettings() val scope = rememberCoroutineScope() @@ -64,8 +65,22 @@ fun AudioRecorder( var isProcessingAudio by remember { mutableStateOf(false) } var showRecorderError by remember { mutableStateOf(false) } - DisposableEffect(key1 = audioRecorder, key2 = settings.audioRecorderSettings) { - audioRecorder.onRecordingSave = { + fun saveAsLastRecording() { + if (!settings.audioRecorderSettings.deleteRecordingsImmediately) { + scope.launch { + dataStore.updateData { + it.setLastRecording( + audioRecorder.recorderService!!.getRecordingInformation() + ) + } + } + } + } + + DisposableEffect(key1 = audioRecorder, key2 = settings) { + audioRecorder.onRecordingSave = onRecordingSave@{ + val recordingInformation = audioRecorder.recorderService!!.getRecordingInformation() + scope.launch { isProcessingAudio = true @@ -73,10 +88,11 @@ fun AudioRecorder( delay(100) try { - val file = - AudioRecorderExporter(audioRecorder.lastRecording!!).concatenateFiles() + val file = AudioRecorderExporter(recordingInformation).concatenateFiles() saveFile(file, file.name) + + saveAsLastRecording() } catch (error: Exception) { Log.getStackTraceString(error) } finally { @@ -85,8 +101,9 @@ fun AudioRecorder( } } audioRecorder.onError = { - // No need to save last recording as it's done automatically on error - audioRecorder.stopRecording(context, saveAsLastRecording = false) + saveAsLastRecording() + + audioRecorder.stopRecording(context) showRecorderError = true }