From 6b6a19ead36abc5391bb7590c3c5b91cabb80020 Mon Sep 17 00:00:00 2001
From: Myzel394 <50424412+Myzel394@users.noreply.github.com>
Date: Thu, 26 Oct 2023 18:50:15 +0200
Subject: [PATCH] feat: Add DeleteRecordingsImmediately to settings
---
.../java/app/myzel394/alibi/db/AppSettings.kt | 5 ++
.../organisms/RecordingStatus.kt | 2 +
.../atoms/DeleteRecordingsImmediatelyTile.kt | 52 +++++++++++++++++++
.../alibi/ui/screens/SettingsScreen.kt | 2 +
app/src/main/res/values/strings.xml | 2 +
5 files changed, 63 insertions(+)
create mode 100644 app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/DeleteRecordingsImmediatelyTile.kt
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 62e99ed..ea04802 100644
--- a/app/src/main/java/app/myzel394/alibi/db/AppSettings.kt
+++ b/app/src/main/java/app/myzel394/alibi/db/AppSettings.kt
@@ -88,6 +88,7 @@ data class AudioRecorderSettings(
val outputFormat: Int? = null,
val encoder: Int? = null,
val showAllMicrophones: Boolean = false,
+ val deleteRecordingsImmediately: Boolean = false,
) {
fun getOutputFormat(): Int {
if (outputFormat != null) {
@@ -219,6 +220,10 @@ data class AudioRecorderSettings(
return copy(showAllMicrophones = showAllMicrophones)
}
+ fun setDeleteRecordingsImmediately(deleteRecordingsImmediately: Boolean): AudioRecorderSettings {
+ return copy(deleteRecordingsImmediately = deleteRecordingsImmediately)
+ }
+
fun isEncoderCompatible(encoder: Int): Boolean {
if (outputFormat == null || outputFormat == MediaRecorder.OutputFormat.DEFAULT) {
return true
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 ba4d330..878c51c 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
@@ -26,6 +26,7 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import app.myzel394.alibi.dataStore
import app.myzel394.alibi.db.AppSettings
+import app.myzel394.alibi.helpers.AudioRecorderExporter
import app.myzel394.alibi.ui.components.AudioRecorder.atoms.DeleteButton
import app.myzel394.alibi.ui.components.AudioRecorder.atoms.MicrophoneDisconnectedDialog
import app.myzel394.alibi.ui.components.AudioRecorder.atoms.MicrophoneReconnectedDialog
@@ -106,6 +107,7 @@ fun RecordingStatus(
DeleteButton(
onDelete = {
audioRecorder.stopRecording(context, saveAsLastRecording = false)
+ AudioRecorderExporter.clearAllRecordings(context)
}
)
}
diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/DeleteRecordingsImmediatelyTile.kt b/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/DeleteRecordingsImmediatelyTile.kt
new file mode 100644
index 0000000..453f9b6
--- /dev/null
+++ b/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/DeleteRecordingsImmediatelyTile.kt
@@ -0,0 +1,52 @@
+package app.myzel394.alibi.ui.components.SettingsScreen.atoms
+
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.DeleteSweep
+import androidx.compose.material3.Icon
+import androidx.compose.material3.Switch
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.stringResource
+import app.myzel394.alibi.R
+import app.myzel394.alibi.dataStore
+import app.myzel394.alibi.db.AppSettings
+import app.myzel394.alibi.ui.components.atoms.SettingsTile
+import kotlinx.coroutines.launch
+
+@Composable
+fun DeleteRecordingsImmediatelyTile() {
+ val scope = rememberCoroutineScope()
+
+ val dataStore = LocalContext.current.dataStore
+ val settings = dataStore
+ .data
+ .collectAsState(initial = AppSettings.getDefaultInstance())
+ .value
+
+ SettingsTile(
+ title = stringResource(R.string.ui_settings_option_deleteRecordingsImmediately_title),
+ description = stringResource(R.string.ui_settings_option_deleteRecordingsImmediately_description),
+ leading = {
+ Icon(
+ Icons.Default.DeleteSweep,
+ contentDescription = null,
+ )
+ },
+ trailing = {
+ Switch(
+ checked = settings.audioRecorderSettings.deleteRecordingsImmediately,
+ onCheckedChange = {
+ scope.launch {
+ dataStore.updateData {
+ it.setAudioRecorderSettings(
+ it.audioRecorderSettings.setDeleteRecordingsImmediately(it.audioRecorderSettings.deleteRecordingsImmediately.not())
+ )
+ }
+ }
+ }
+ )
+ }
+ )
+}
\ No newline at end of file
diff --git a/app/src/main/java/app/myzel394/alibi/ui/screens/SettingsScreen.kt b/app/src/main/java/app/myzel394/alibi/ui/screens/SettingsScreen.kt
index abdac0a..f9e8ab8 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/screens/SettingsScreen.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/screens/SettingsScreen.kt
@@ -42,6 +42,7 @@ import app.myzel394.alibi.ui.SUPPORTS_DARK_MODE_NATIVELY
import app.myzel394.alibi.ui.components.SettingsScreen.atoms.AboutTile
import app.myzel394.alibi.ui.components.SettingsScreen.atoms.BitrateTile
import app.myzel394.alibi.ui.components.SettingsScreen.atoms.CustomNotificationTile
+import app.myzel394.alibi.ui.components.SettingsScreen.atoms.DeleteRecordingsImmediatelyTile
import app.myzel394.alibi.ui.components.SettingsScreen.atoms.EncoderTile
import app.myzel394.alibi.ui.components.SettingsScreen.atoms.ForceExactMaxDurationTile
import app.myzel394.alibi.ui.components.SettingsScreen.atoms.ImportExport
@@ -148,6 +149,7 @@ fun SettingsScreen(
IntervalDurationTile()
ForceExactMaxDurationTile()
InAppLanguagePicker()
+ DeleteRecordingsImmediatelyTile()
CustomNotificationTile(navController = navController)
AboutTile(navController = navController)
AnimatedVisibility(visible = settings.showAdvancedSettings) {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index bfa6fb6..76c30ab 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -107,4 +107,6 @@
You can copy my GPG key here. This key only exists once and I can use it to prove to you that I\'m really who I am. Please save it now so that you can verify my signature later.
Copy GPG Key
Become a GitHub Sponsor
+ Delete Recordings Immediately
+ If enabled, Alibi will immediately delete recordings after you have saved the file.
\ No newline at end of file