From 17a52fdcb5d2c89bc6842c9c1eca4229d31077ee Mon Sep 17 00:00:00 2001
From: Myzel394 <50424412+Myzel394@users.noreply.github.com>
Date: Mon, 23 Oct 2023 19:17:42 +0200
Subject: [PATCH] feat: Add LandingElement for
CustomRecordingNotificationsScreen
---
.../atoms/LandingElement.kt | 111 ++++++++++++++++++
.../CustomRecordingNotificationsScreen.kt | 16 +--
.../alibi/ui/utils/PermissionHelper.kt | 15 +++
...ic_custom_recording_notifications_blob.xml | 13 ++
app/src/main/res/values/strings.xml | 4 +
5 files changed, 151 insertions(+), 8 deletions(-)
create mode 100644 app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/atoms/LandingElement.kt
create mode 100644 app/src/main/res/drawable/ic_custom_recording_notifications_blob.xml
diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/atoms/LandingElement.kt b/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/atoms/LandingElement.kt
new file mode 100644
index 0000000..08cebaa
--- /dev/null
+++ b/app/src/main/java/app/myzel394/alibi/ui/components/CustomRecordingNotificationsScreen/atoms/LandingElement.kt
@@ -0,0 +1,111 @@
+package app.myzel394.alibi.ui.components.CustomRecordingNotificationsScreen.atoms
+
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ArrowRightAlt
+import androidx.compose.material.icons.filled.Edit
+import androidx.compose.material.icons.filled.Notifications
+import androidx.compose.material3.Button
+import androidx.compose.material3.ButtonDefaults
+import androidx.compose.material3.Icon
+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.graphics.ColorFilter
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.unit.dp
+import app.myzel394.alibi.R
+import app.myzel394.alibi.ui.utils.openNotificationsSettings
+
+@Composable
+fun LandingElement(
+ modifier: Modifier = Modifier,
+) {
+ val context = LocalContext.current
+
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .padding(horizontal = 32.dp)
+ .then(modifier),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = Arrangement.SpaceBetween,
+ ) {
+ Box() {}
+ Column(
+ horizontalAlignment = Alignment.CenterHorizontally,
+ ) {
+ Box(
+ contentAlignment = Alignment.Center,
+ ) {
+ Image(
+ painter = painterResource(id = R.drawable.ic_custom_recording_notifications_blob),
+ colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.tertiaryContainer),
+ contentDescription = null,
+ modifier = Modifier
+ .width(512.dp)
+ )
+ Icon(
+ imageVector = Icons.Default.Notifications,
+ contentDescription = null,
+ tint = MaterialTheme.colorScheme.tertiary,
+ modifier = Modifier
+ .size(128.dp)
+ )
+ }
+ Column(
+ horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = Arrangement.spacedBy(16.dp),
+ ) {
+ Text(
+ stringResource(R.string.ui_settings_customNotifications_landing_title),
+ style = MaterialTheme.typography.headlineMedium,
+ )
+ Text(
+ stringResource(R.string.ui_settings_customNotifications_landing_description),
+ style = MaterialTheme.typography.bodySmall,
+ )
+ Button(
+ onClick = {},
+ colors = ButtonDefaults.filledTonalButtonColors(),
+ ) {
+ Icon(
+ Icons.Default.Edit,
+ contentDescription = null,
+ modifier = Modifier.size(ButtonDefaults.IconSize)
+ )
+ Spacer(modifier = Modifier.width(ButtonDefaults.IconSpacing))
+ Text(
+ stringResource(
+ R.string.ui_settings_customNotifications_landing_getStarted
+ )
+ )
+ }
+ }
+ }
+ Button(
+ onClick = context::openNotificationsSettings,
+ colors = ButtonDefaults.textButtonColors(),
+ ) {
+ Text(
+ stringResource(R.string.ui_settings_customNotifications_landing_help_hideNotifications),
+ )
+ }
+ }
+}
\ No newline at end of file
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 26396c8..908b4db 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
@@ -21,6 +21,7 @@ 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
@@ -37,6 +38,7 @@ 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.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
@@ -70,7 +72,7 @@ fun CustomRecordingNotificationsScreen(
Scaffold(
topBar = {
- LargeTopAppBar(
+ TopAppBar(
title = {
Text(stringResource(R.string.ui_settings_option_customNotification_title))
},
@@ -88,13 +90,11 @@ fun CustomRecordingNotificationsScreen(
modifier = Modifier
.nestedScroll(scrollBehavior.nestedScrollConnection)
) { padding ->
- Column(
- modifier = Modifier
- .fillMaxSize()
- .padding(padding)
- .verticalScroll(rememberScrollState()),
- horizontalAlignment = Alignment.CenterHorizontally,
- ) {
+ if (settings.notificationSettings == null) {
+ LandingElement(
+ modifier = Modifier
+ .padding(padding),
+ )
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/app/myzel394/alibi/ui/utils/PermissionHelper.kt b/app/src/main/java/app/myzel394/alibi/ui/utils/PermissionHelper.kt
index 8d42b6b..f6038e9 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/utils/PermissionHelper.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/utils/PermissionHelper.kt
@@ -5,6 +5,7 @@ import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
+import android.os.Build
import android.provider.Settings
import androidx.core.app.ActivityCompat
@@ -32,3 +33,17 @@ fun Context.openAppSystemSettings() {
data = Uri.fromParts("package", packageName, null)
})
}
+
+fun Context.openNotificationsSettings() {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ startActivity(Intent().apply {
+ action = Settings.ACTION_APP_NOTIFICATION_SETTINGS
+ putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
+ })
+ } else {
+ startActivity(Intent().apply {
+ action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
+ data = Uri.fromParts("package", packageName, null)
+ })
+ }
+}
diff --git a/app/src/main/res/drawable/ic_custom_recording_notifications_blob.xml b/app/src/main/res/drawable/ic_custom_recording_notifications_blob.xml
new file mode 100644
index 0000000..6bb10ef
--- /dev/null
+++ b/app/src/main/res/drawable/ic_custom_recording_notifications_blob.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index abe5e8a..8397559 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -74,4 +74,8 @@
Custom Notifications
Setup custom recording notifications now
Edit recording notifications
+ Don\'t expose yourself
+ 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
\ No newline at end of file