From fa5cd6fbcae8506b16e198c891d69db703391bb3 Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Fri, 15 Dec 2023 19:54:42 +0100 Subject: [PATCH] fix: Differentiate between stopping and destroying -> destroy service after stoppind and saving last recording information --- .../alibi/services/RecorderService.kt | 12 +++-- .../atoms/RecorderEventsHandler.kt | 48 +++++++++++++------ .../organisms/AudioRecordingStatus.kt | 5 +- .../organisms/VideoRecordingStatus.kt | 5 +- .../alibi/ui/models/BaseRecorderModel.kt | 15 ++++-- 5 files changed, 52 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/app/myzel394/alibi/services/RecorderService.kt b/app/src/main/java/app/myzel394/alibi/services/RecorderService.kt index cb55177..db2fa7b 100644 --- a/app/src/main/java/app/myzel394/alibi/services/RecorderService.kt +++ b/app/src/main/java/app/myzel394/alibi/services/RecorderService.kt @@ -55,11 +55,6 @@ abstract class RecorderService : LifecycleService() { protected open suspend fun stop() { recordingTimeTimer.shutdown() - - NotificationManagerCompat.from(this) - .cancel(NotificationHelper.RECORDER_CHANNEL_NOTIFICATION_ID) - stopForeground(STOP_FOREGROUND_REMOVE) - stopSelf() } protected abstract fun startForegroundService() @@ -85,6 +80,13 @@ abstract class RecorderService : LifecycleService() { changeState(RecorderState.RECORDING) } + fun destroy() { + NotificationManagerCompat.from(this) + .cancel(NotificationHelper.RECORDER_CHANNEL_NOTIFICATION_ID) + stopForeground(STOP_FOREGROUND_REMOVE) + stopSelf() + } + override fun onBind(intent: Intent): IBinder? { super.onBind(intent) return binder diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/atoms/RecorderEventsHandler.kt b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/atoms/RecorderEventsHandler.kt index 434cd99..0862f1a 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/atoms/RecorderEventsHandler.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/atoms/RecorderEventsHandler.kt @@ -82,16 +82,14 @@ fun RecorderEventsHandler( } } - fun saveAsLastRecording( + suspend fun saveAsLastRecording( recorder: RecorderModel ) { if (!settings.deleteRecordingsImmediately) { - scope.launch { - dataStore.updateData { - it.setLastRecording( - recorder.recorderService!!.getRecordingInformation() - ) - } + dataStore.updateData { + it.setLastRecording( + recorder.recorderService!!.getRecordingInformation() + ) } } } @@ -189,14 +187,24 @@ fun RecorderEventsHandler( // Register audio recorder events DisposableEffect(key1 = audioRecorder, key2 = settings) { audioRecorder.onRecordingSave = { - saveAsLastRecording(audioRecorder as RecorderModel) + scope.launch { + audioRecorder.stopRecording(context) - saveRecording(audioRecorder) + kotlin.runCatching { + saveAsLastRecording(audioRecorder as RecorderModel) + + saveRecording(audioRecorder) + } + + audioRecorder.destroyService(context) + } } audioRecorder.onError = { - saveAsLastRecording(audioRecorder as RecorderModel) + scope.launch { + saveAsLastRecording(audioRecorder as RecorderModel) - showRecorderError = true + showRecorderError = true + } } onDispose { @@ -208,14 +216,24 @@ fun RecorderEventsHandler( // Register video recorder events DisposableEffect(key1 = videoRecorder, key2 = settings) { videoRecorder.onRecordingSave = { - saveAsLastRecording(videoRecorder as RecorderModel) + scope.launch { + videoRecorder.stopRecording(context) - saveRecording(videoRecorder) + kotlin.runCatching { + saveAsLastRecording(videoRecorder as RecorderModel) + + saveRecording(videoRecorder) + } + + videoRecorder.destroyService(context) + } } videoRecorder.onError = { - saveAsLastRecording(videoRecorder as RecorderModel) + scope.launch { + saveAsLastRecording(videoRecorder as RecorderModel) - showRecorderError = true + showRecorderError = true + } } onDispose { diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/AudioRecordingStatus.kt b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/AudioRecordingStatus.kt index 71d55e8..cb7612a 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/AudioRecordingStatus.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/AudioRecordingStatus.kt @@ -89,10 +89,7 @@ fun AudioRecordingStatus( } }, onSave = { - scope.launch { - audioRecorder.stopRecording(context) - audioRecorder.onRecordingSave() - } + audioRecorder.onRecordingSave() } ) diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/VideoRecordingStatus.kt b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/VideoRecordingStatus.kt index 6eeab95..6061eea 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/VideoRecordingStatus.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/components/RecorderScreen/organisms/VideoRecordingStatus.kt @@ -115,10 +115,7 @@ fun VideoRecordingStatus( } }, onSave = { - scope.launch { - videoRecorder.stopRecording(context) - videoRecorder.onRecordingSave() - } + videoRecorder.onRecordingSave() } ) } 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 b43929c..ce7b3dc 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 @@ -136,14 +136,9 @@ abstract class BaseRecorderModel