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 be44487..a91b4ab 100644
--- a/app/src/main/java/app/myzel394/alibi/db/AppSettings.kt
+++ b/app/src/main/java/app/myzel394/alibi/db/AppSettings.kt
@@ -8,7 +8,6 @@ import com.arthenica.ffmpegkit.FFmpegKit
import com.arthenica.ffmpegkit.ReturnCode
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
-import org.json.JSONObject
import java.io.File
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter.ISO_DATE_TIME
@@ -427,23 +426,41 @@ data class NotificationSettings(
val titleID: Int,
val messageID: Int,
val showOngoing: Boolean,
+ val iconID: Int,
) {
data object Default : Preset(
R.string.ui_audioRecorder_state_recording_title,
R.string.ui_audioRecorder_state_recording_description,
true,
+ R.drawable.launcher_monochrome_noopacity,
)
data object Weather : Preset(
R.string.ui_audioRecorder_state_recording_fake_weather_title,
R.string.ui_audioRecorder_state_recording_fake_weather_description,
false,
+ R.drawable.ic_cloud
)
data object Player : Preset(
- R.string.ui_audioRecorder_state_recording_fake_weather_title,
- R.string.ui_audioRecorder_state_recording_fake_weather_description,
+ R.string.ui_audioRecorder_state_recording_fake_player_title,
+ R.string.ui_audioRecorder_state_recording_fake_player_description,
+ true,
+ R.drawable.ic_note,
+ )
+
+ data object Browser : Preset(
+ R.string.ui_audioRecorder_state_recording_fake_browser_title,
+ R.string.ui_audioRecorder_state_recording_fake_browser_description,
+ true,
+ R.drawable.ic_download,
+ )
+
+ data object VPN : Preset(
+ R.string.ui_audioRecorder_state_recording_fake_vpn_title,
+ R.string.ui_audioRecorder_state_recording_fake_vpn_description,
false,
+ R.drawable.ic_vpn,
)
}
@@ -456,5 +473,13 @@ data class NotificationSettings(
preset = preset,
)
}
+
+ val PRESETS = listOf(
+ Preset.Default,
+ Preset.Weather,
+ Preset.Player,
+ Preset.Browser,
+ Preset.VPN,
+ )
}
}
diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/atoms/NotificationPresetSelect.kt b/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/atoms/NotificationPresetSelect.kt
new file mode 100644
index 0000000..f90bbe2
--- /dev/null
+++ b/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/atoms/NotificationPresetSelect.kt
@@ -0,0 +1,61 @@
+package app.myzel394.alibi.ui.components.CustomRecordingNotificationsScreen.atoms
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.dp
+import app.myzel394.alibi.db.NotificationSettings
+
+@Composable
+fun NotificationPresetSelect(
+ modifier: Modifier = Modifier,
+ preset: NotificationSettings.Preset
+) {
+ Row(
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.spacedBy(16.dp),
+ modifier = Modifier
+ .clip(MaterialTheme.shapes.large)
+ .background(MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.4f))
+ .border(
+ width = 1.dp,
+ shape = MaterialTheme.shapes.large,
+ color = MaterialTheme.colorScheme.outline.copy(alpha = 0.4f)
+ )
+ .padding(horizontal = 16.dp, vertical = 8.dp)
+ .then(modifier),
+ ) {
+ PreviewIcon(
+ modifier = Modifier.size(32.dp),
+ painter = painterResource(id = preset.iconID),
+ )
+ Column(
+ horizontalAlignment = Alignment.Start,
+ verticalArrangement = Arrangement.spacedBy(4.dp),
+ ) {
+ Text(
+ text = stringResource(preset.titleID),
+ style = MaterialTheme.typography.titleMedium,
+ fontWeight = FontWeight.Bold,
+ )
+ Text(
+ text = stringResource(preset.messageID),
+ style = MaterialTheme.typography.bodyMedium,
+ fontWeight = FontWeight.Normal,
+ )
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/atoms/PreviewIcon.kt b/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/atoms/PreviewIcon.kt
new file mode 100644
index 0000000..89b02dc
--- /dev/null
+++ b/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/atoms/PreviewIcon.kt
@@ -0,0 +1,42 @@
+package app.myzel394.alibi.ui.components.CustomRecordingNotificationsScreen.atoms
+
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.shape.CircleShape
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.ColorFilter
+import androidx.compose.ui.graphics.painter.Painter
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.unit.dp
+import app.myzel394.alibi.R
+
+@Composable
+fun PreviewIcon(
+ modifier: Modifier = Modifier,
+ painter: Painter,
+) {
+ Column(
+ horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = Arrangement.Center,
+ modifier = Modifier
+ .then(modifier)
+ .clip(CircleShape)
+ .background(MaterialTheme.colorScheme.secondary)
+ .padding(1.dp)
+ ) {
+ Image(
+ painter = painter,
+ contentDescription = null,
+ colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.onPrimary),
+ )
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/atoms/EditNotificationInput.kt b/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/molecules/EditNotificationInput.kt
similarity index 93%
rename from app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/atoms/EditNotificationInput.kt
rename to app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/molecules/EditNotificationInput.kt
index 1ae7f19..73e2960 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/atoms/EditNotificationInput.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/molecules/EditNotificationInput.kt
@@ -1,4 +1,4 @@
-package app.myzel394.alibi.ui.components.CustomRecordingNotificationsScreen.atoms
+package app.myzel394.alibi.ui.components.CustomRecordingNotificationsScreen.molecules
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.animation.core.tween
@@ -41,6 +41,7 @@ import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.unit.dp
import app.myzel394.alibi.R
+import app.myzel394.alibi.ui.components.CustomRecordingNotificationsScreen.atoms.PreviewIcon
import app.myzel394.alibi.ui.effects.rememberForceUpdate
import com.maxkeppeler.sheets.input.models.InputText
import java.time.Duration
@@ -72,19 +73,11 @@ fun EditNotificationInput(
) {
val headlineSize = 22.dp
- Box(
- modifier = Modifier
- .size(headlineSize)
- .clip(CircleShape)
- .background(MaterialTheme.colorScheme.secondary)
- .padding(1.dp),
- ) {
- Image(
- painter = painterResource(id = R.drawable.launcher_foreground),
- contentDescription = null,
- colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.onPrimary),
- )
- }
+ PreviewIcon(
+ modifier = Modifier.size(headlineSize),
+ painter = painterResource(id = R.drawable.launcher_foreground)
+ )
+
Column(
horizontalAlignment = Alignment.Start,
verticalArrangement = Arrangement.spacedBy(16.dp),
diff --git a/app/src/main/java/app/myzel394/alibi/ui/screens/CustomRecordingNotificationsScreen.kt b/app/src/main/java/app/myzel394/alibi/ui/screens/CustomRecordingNotificationsScreen.kt
index 3dd8bcd..a2cc7a2 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/screens/CustomRecordingNotificationsScreen.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/screens/CustomRecordingNotificationsScreen.kt
@@ -1,33 +1,25 @@
package app.myzel394.alibi.ui.screens
-import androidx.compose.animation.AnimatedVisibility
+import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.rememberScrollState
-import androidx.compose.foundation.verticalScroll
+import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
-import androidx.compose.material3.Divider
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
-import androidx.compose.material3.LargeTopAppBar
-import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
-import androidx.compose.material3.Snackbar
-import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.rememberTopAppBarState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
-import androidx.compose.runtime.rememberCoroutineScope
-import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalContext
@@ -37,24 +29,9 @@ import androidx.navigation.NavController
import app.myzel394.alibi.R
import app.myzel394.alibi.dataStore
import app.myzel394.alibi.db.AppSettings
-import app.myzel394.alibi.ui.SUPPORTS_DARK_MODE_NATIVELY
-import app.myzel394.alibi.ui.components.CustomRecordingNotificationsScreen.atoms.EditNotificationInput
-import app.myzel394.alibi.ui.components.CustomRecordingNotificationsScreen.atoms.LandingElement
-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.EncoderTile
-import app.myzel394.alibi.ui.components.SettingsScreen.atoms.ForceExactMaxDurationTile
-import app.myzel394.alibi.ui.components.SettingsScreen.atoms.ImportExport
-import app.myzel394.alibi.ui.components.SettingsScreen.atoms.InAppLanguagePicker
-import app.myzel394.alibi.ui.components.SettingsScreen.atoms.IntervalDurationTile
-import app.myzel394.alibi.ui.components.SettingsScreen.atoms.MaxDurationTile
-import app.myzel394.alibi.ui.components.SettingsScreen.atoms.OutputFormatTile
-import app.myzel394.alibi.ui.components.SettingsScreen.atoms.SamplingRateTile
-import app.myzel394.alibi.ui.components.SettingsScreen.atoms.ThemeSelector
-import app.myzel394.alibi.ui.components.atoms.GlobalSwitch
-import app.myzel394.alibi.ui.components.atoms.MessageBox
-import app.myzel394.alibi.ui.components.atoms.MessageType
-import kotlinx.coroutines.launch
+import app.myzel394.alibi.db.NotificationSettings
+import app.myzel394.alibi.ui.components.CustomRecordingNotificationsScreen.atoms.NotificationPresetSelect
+import app.myzel394.alibi.ui.components.CustomRecordingNotificationsScreen.molecules.EditNotificationInput
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -93,10 +70,12 @@ fun CustomRecordingNotificationsScreen(
) { padding ->
if (settings.notificationSettings == null) {
}
- Box(
+ Column(
modifier = Modifier
+ .fillMaxSize()
.padding(padding)
- .padding(vertical = 64.dp)
+ .padding(vertical = 64.dp, horizontal = 16.dp),
+ verticalArrangement = Arrangement.SpaceBetween,
) {
EditNotificationInput(
modifier = Modifier
@@ -109,7 +88,22 @@ fun CustomRecordingNotificationsScreen(
onTitleChange = {},
onDescriptionChange = {},
)
+ LazyColumn(
+ verticalArrangement = Arrangement.spacedBy(8.dp),
+ ) {
+ items(NotificationSettings.PRESETS.size) {
+ val preset = NotificationSettings.PRESETS[it]
+ NotificationPresetSelect(
+ modifier = Modifier
+ .fillMaxWidth()
+ .clickable {
+
+ },
+ preset = preset,
+ )
+ }
+ }
}
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_cloud.xml b/app/src/main/res/drawable/ic_cloud.xml
new file mode 100644
index 0000000..a860632
--- /dev/null
+++ b/app/src/main/res/drawable/ic_cloud.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_download.xml b/app/src/main/res/drawable/ic_download.xml
new file mode 100644
index 0000000..987f215
--- /dev/null
+++ b/app/src/main/res/drawable/ic_download.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_note.xml b/app/src/main/res/drawable/ic_note.xml
new file mode 100644
index 0000000..4bd8b20
--- /dev/null
+++ b/app/src/main/res/drawable/ic_note.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_vpn.xml b/app/src/main/res/drawable/ic_vpn.xml
new file mode 100644
index 0000000..1339fb3
--- /dev/null
+++ b/app/src/main/res/drawable/ic_vpn.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/launcher_monochrome_noopacity.xml b/app/src/main/res/drawable/launcher_monochrome_noopacity.xml
new file mode 100644
index 0000000..6bded29
--- /dev/null
+++ b/app/src/main/res/drawable/launcher_monochrome_noopacity.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8397559..2dbf736 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -78,4 +78,10 @@
Due to Android\'s restrictions, Alibi has to show a notification while recording. To hide the fact that you\'re using Alibi, you can customize the notification.
Alternatively, you can also simply disable notifications
Create own notification
+ Playing Audio
+ Now playing: Despacito
+ Downloading attachments.zip
+ Downloading file...
+ Connected to VPN
+ Connection Secured
\ No newline at end of file