From e11c8c28f20cab09c8ceffac315378227961240e Mon Sep 17 00:00:00 2001
From: Myzel394 <50424412+Myzel394@users.noreply.github.com>
Date: Tue, 24 Oct 2023 20:23:38 +0200
Subject: [PATCH 1/9] feat: Add AboutTile
---
.../SettingsScreen/atoms/AboutTile.kt | 69 +++++++++++++++++++
.../app/myzel394/alibi/ui/enums/Screen.kt | 1 +
.../alibi/ui/screens/SettingsScreen.kt | 2 +
app/src/main/res/values/strings.xml | 1 +
4 files changed, 73 insertions(+)
create mode 100644 app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/AboutTile.kt
diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/AboutTile.kt b/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/AboutTile.kt
new file mode 100644
index 0000000..ea5911a
--- /dev/null
+++ b/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/AboutTile.kt
@@ -0,0 +1,69 @@
+package app.myzel394.alibi.ui.components.SettingsScreen.atoms
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ChevronRight
+import androidx.compose.material.icons.filled.Info
+import androidx.compose.material.icons.filled.Notifications
+import androidx.compose.material3.Icon
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.collectAsState
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.semantics.contentDescription
+import androidx.compose.ui.semantics.semantics
+import androidx.compose.ui.unit.dp
+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.components.atoms.SettingsTile
+import app.myzel394.alibi.ui.enums.Screen
+
+@Composable
+fun AboutTile(
+ navController: NavController,
+) {
+ val label = stringResource(R.string.ui_about_title)
+
+ Row(
+ modifier = Modifier
+ .padding(horizontal = 32.dp, vertical = 48.dp)
+ .fillMaxWidth()
+ .clip(MaterialTheme.shapes.medium)
+ .background(MaterialTheme.colorScheme.surfaceVariant)
+ .padding(16.dp)
+ .semantics {
+ contentDescription = label
+ }
+ .clickable {
+ navController.navigate(Screen.About.route)
+ },
+ horizontalArrangement = Arrangement.SpaceBetween,
+ ) {
+ Row(
+ horizontalArrangement = Arrangement.spacedBy(8.dp)
+ ) {
+ Icon(
+ Icons.Default.Info,
+ contentDescription = null,
+ )
+ Text(
+ text = label,
+ )
+ }
+ Icon(
+ Icons.Default.ChevronRight,
+ contentDescription = null,
+ )
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/app/myzel394/alibi/ui/enums/Screen.kt b/app/src/main/java/app/myzel394/alibi/ui/enums/Screen.kt
index 218bde3..d8ba5a8 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/enums/Screen.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/enums/Screen.kt
@@ -5,6 +5,7 @@ sealed class Screen(val route: String) {
data object Settings : Screen("settings")
data object Welcome : Screen("welcome")
data object CustomRecordingNotifications : Screen("custom-recording-notifications")
+ data object About : Screen("about")
fun withArgs(vararg args: String): String {
return buildString {
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 b64a964..0c2e972 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
@@ -39,6 +39,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.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.EncoderTile
@@ -147,6 +148,7 @@ fun SettingsScreen(
ForceExactMaxDurationTile()
InAppLanguagePicker()
CustomNotificationTile(navController = navController)
+ AboutTile(navController = navController)
AnimatedVisibility(visible = settings.showAdvancedSettings) {
Column(
horizontalAlignment = Alignment.CenterHorizontally,
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 33e9c64..378ea4f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -88,4 +88,5 @@
Show Duration
Update notification
This is a preview for your notification. You can edit the title and the message. At the bottom you can find some presets.
+ About Alibi
\ No newline at end of file
From 8c77376fa6373b4d382c4e728621848e9ed7f1fa Mon Sep 17 00:00:00 2001
From: Myzel394 <50424412+Myzel394@users.noreply.github.com>
Date: Tue, 24 Oct 2023 20:37:15 +0200
Subject: [PATCH 2/9] feat: Added basic AboutScreen
---
app/build.gradle | 1 +
.../java/app/myzel394/alibi/ui/Navigation.kt | 14 +++
.../SettingsScreen/atoms/AboutTile.kt | 8 +-
.../myzel394/alibi/ui/screens/AboutScreen.kt | 97 +++++++++++++++++++
4 files changed, 116 insertions(+), 4 deletions(-)
create mode 100644 app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt
diff --git a/app/build.gradle b/app/build.gradle
index b7ff841..f0256b1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -78,6 +78,7 @@ android {
}
buildFeatures {
compose true
+ buildConfig = true
}
composeOptions {
kotlinCompilerExtensionVersion '1.5.1'
diff --git a/app/src/main/java/app/myzel394/alibi/ui/Navigation.kt b/app/src/main/java/app/myzel394/alibi/ui/Navigation.kt
index bd4bca3..efef5d4 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/Navigation.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/Navigation.kt
@@ -27,6 +27,7 @@ import app.myzel394.alibi.dataStore
import app.myzel394.alibi.db.LastRecording
import app.myzel394.alibi.ui.enums.Screen
import app.myzel394.alibi.ui.models.AudioRecorderModel
+import app.myzel394.alibi.ui.screens.AboutScreen
import app.myzel394.alibi.ui.screens.AudioRecorder
import app.myzel394.alibi.ui.screens.CustomRecordingNotificationsScreen
import app.myzel394.alibi.ui.screens.SettingsScreen
@@ -111,5 +112,18 @@ fun Navigation(
navController = navController,
)
}
+ composable(
+ Screen.About.route,
+ enterTransition = {
+ scaleIn()
+ },
+ exitTransition = {
+ scaleOut() + fadeOut(tween(150))
+ }
+ ) {
+ AboutScreen(
+ navController = navController,
+ )
+ }
}
}
diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/AboutTile.kt b/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/AboutTile.kt
index ea5911a..c4a5089 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/AboutTile.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/AboutTile.kt
@@ -39,15 +39,15 @@ fun AboutTile(
modifier = Modifier
.padding(horizontal = 32.dp, vertical = 48.dp)
.fillMaxWidth()
- .clip(MaterialTheme.shapes.medium)
- .background(MaterialTheme.colorScheme.surfaceVariant)
- .padding(16.dp)
.semantics {
contentDescription = label
}
.clickable {
navController.navigate(Screen.About.route)
- },
+ }
+ .clip(MaterialTheme.shapes.medium)
+ .background(MaterialTheme.colorScheme.surfaceVariant)
+ .padding(16.dp),
horizontalArrangement = Arrangement.SpaceBetween,
) {
Row(
diff --git a/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt b/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt
new file mode 100644
index 0000000..5476290
--- /dev/null
+++ b/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt
@@ -0,0 +1,97 @@
+package app.myzel394.alibi.ui.screens
+
+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.fillMaxSize
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.shape.CircleShape
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ArrowBack
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Scaffold
+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.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.input.nestedscroll.nestedScroll
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.unit.dp
+import androidx.navigation.NavController
+import app.myzel394.alibi.R
+import app.myzel394.alibi.BuildConfig
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun AboutScreen(
+ navController: NavController,
+) {
+ val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(
+ rememberTopAppBarState()
+ )
+
+ Scaffold(
+ topBar = {
+ TopAppBar(
+ title = {
+ Text(stringResource(R.string.ui_about_title))
+ },
+ navigationIcon = {
+ IconButton(onClick = navController::popBackStack) {
+ Icon(
+ Icons.Default.ArrowBack,
+ contentDescription = "Back"
+ )
+ }
+ },
+ scrollBehavior = scrollBehavior,
+ )
+ },
+ modifier = Modifier
+ .nestedScroll(scrollBehavior.nestedScrollConnection)
+ ) { padding ->
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .padding(padding),
+ verticalArrangement = Arrangement.spacedBy(16.dp),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ ) {
+ Box(
+ modifier = Modifier
+ .clip(CircleShape)
+ .size(200.dp)
+ .background(
+ MaterialTheme.colorScheme.surfaceVariant
+ ),
+ ) {
+ Image(
+ painter = painterResource(R.drawable.launcher_foreground),
+ contentDescription = null,
+ )
+ }
+ Text(
+ text = stringResource(R.string.app_name),
+ style = MaterialTheme.typography.headlineLarge,
+ )
+ Text(
+ text = "Version %s (%s)".format(
+ BuildConfig.VERSION_NAME,
+ BuildConfig.VERSION_CODE.toString()
+ ),
+ style = MaterialTheme.typography.bodyMedium,
+ )
+ }
+ }
+}
From d6a95c4ce1d18ff94fb70960743528785d5a0be2 Mon Sep 17 00:00:00 2001
From: Myzel394 <50424412+Myzel394@users.noreply.github.com>
Date: Wed, 25 Oct 2023 15:44:05 +0200
Subject: [PATCH 3/9] current stand
---
.../myzel394/alibi/ui/screens/AboutScreen.kt | 97 ++++++++++++++-----
app/src/main/res/drawable/ic_github.xml | 10 ++
app/src/main/res/values/strings.xml | 3 +
3 files changed, 87 insertions(+), 23 deletions(-)
create mode 100644 app/src/main/res/drawable/ic_github.xml
diff --git a/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt b/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt
index 5476290..f260943 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt
@@ -5,12 +5,16 @@ 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.Row
import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
+import androidx.compose.material.icons.filled.OpenInNew
+import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
@@ -24,9 +28,11 @@ 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.input.nestedscroll.nestedScroll
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 androidx.navigation.NavController
import app.myzel394.alibi.R
@@ -64,34 +70,79 @@ fun AboutScreen(
Column(
modifier = Modifier
.fillMaxSize()
- .padding(padding),
- verticalArrangement = Arrangement.spacedBy(16.dp),
+ .padding(padding)
+ .padding(horizontal = 32.dp),
+ verticalArrangement = Arrangement.spacedBy(48.dp),
horizontalAlignment = Alignment.CenterHorizontally,
) {
- Box(
- modifier = Modifier
- .clip(CircleShape)
- .size(200.dp)
- .background(
- MaterialTheme.colorScheme.surfaceVariant
- ),
+ Column(
+ verticalArrangement = Arrangement.spacedBy(16.dp),
+ horizontalAlignment = Alignment.CenterHorizontally,
) {
- Image(
- painter = painterResource(R.drawable.launcher_foreground),
- contentDescription = null,
+ Box(
+ modifier = Modifier
+ .clip(CircleShape)
+ .size(200.dp)
+ .background(
+ MaterialTheme.colorScheme.surfaceVariant
+ ),
+ ) {
+ Image(
+ painter = painterResource(R.drawable.launcher_foreground),
+ contentDescription = null,
+ )
+ }
+ Text(
+ text = stringResource(R.string.app_name),
+ style = MaterialTheme.typography.headlineLarge,
+ )
+ Text(
+ text = "Version %s (%s)".format(
+ BuildConfig.VERSION_NAME,
+ BuildConfig.VERSION_CODE.toString()
+ ),
+ style = MaterialTheme.typography.bodyMedium,
)
}
- Text(
- text = stringResource(R.string.app_name),
- style = MaterialTheme.typography.headlineLarge,
- )
- Text(
- text = "Version %s (%s)".format(
- BuildConfig.VERSION_NAME,
- BuildConfig.VERSION_CODE.toString()
- ),
- style = MaterialTheme.typography.bodyMedium,
- )
+ Column(
+ verticalArrangement = Arrangement.spacedBy(24.dp),
+ ) {
+ Text(
+ stringResource(R.string.ui_about_contribute_title),
+ style = MaterialTheme.typography.titleMedium,
+ )
+ Text(
+ stringResource(R.string.ui_about_contribute_message),
+ style = MaterialTheme.typography.titleMedium,
+ )
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .clip(MaterialTheme.shapes.medium)
+ .background(
+ MaterialTheme.colorScheme.surfaceVariant
+ )
+ .padding(16.dp),
+ horizontalArrangement = Arrangement.SpaceEvenly,
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ Image(
+ painter = painterResource(R.drawable.ic_github),
+ colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.onSurfaceVariant),
+ contentDescription = null,
+ modifier = Modifier.size(ButtonDefaults.IconSize.times(1.5f))
+ )
+ Text(
+ stringResource(R.string.ui_about_contribute_development),
+ fontWeight = FontWeight.Bold,
+ )
+ Icon(
+ Icons.Default.OpenInNew,
+ contentDescription = null,
+ modifier = Modifier.size(ButtonDefaults.IconSize)
+ )
+ }
+ }
}
}
}
diff --git a/app/src/main/res/drawable/ic_github.xml b/app/src/main/res/drawable/ic_github.xml
new file mode 100644
index 0000000..34241ea
--- /dev/null
+++ b/app/src/main/res/drawable/ic_github.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 378ea4f..527649d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -89,4 +89,7 @@
Update notification
This is a preview for your notification. You can edit the title and the message. At the bottom you can find some presets.
About Alibi
+ Support Alibi
+ In my free time I develop Alibi and other free open source software. It would mean the world to me if you could help me in any way :)
+ Developing features or fixing bugs
\ No newline at end of file
From a024ef915444f9110e97b5f945ad41d1d768c032 Mon Sep 17 00:00:00 2001
From: Myzel394 <50424412+Myzel394@users.noreply.github.com>
Date: Wed, 25 Oct 2023 18:19:40 +0200
Subject: [PATCH 4/9] feat: Improving AboutScreen
---
.../SettingsScreen/atoms/AboutTile.kt | 2 +-
.../myzel394/alibi/ui/screens/AboutScreen.kt | 110 +++++++++++++++++-
app/src/main/res/drawable/ic_crowdin.xml | 24 ++++
app/src/main/res/values/strings.xml | 3 +
4 files changed, 136 insertions(+), 3 deletions(-)
create mode 100644 app/src/main/res/drawable/ic_crowdin.xml
diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/AboutTile.kt b/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/AboutTile.kt
index c4a5089..857584d 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/AboutTile.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/AboutTile.kt
@@ -39,13 +39,13 @@ fun AboutTile(
modifier = Modifier
.padding(horizontal = 32.dp, vertical = 48.dp)
.fillMaxWidth()
+ .clip(MaterialTheme.shapes.medium)
.semantics {
contentDescription = label
}
.clickable {
navController.navigate(Screen.About.route)
}
- .clip(MaterialTheme.shapes.medium)
.background(MaterialTheme.colorScheme.surfaceVariant)
.padding(16.dp),
horizontalArrangement = Arrangement.SpaceBetween,
diff --git a/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt b/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt
index f260943..f397944 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt
@@ -2,6 +2,7 @@ package app.myzel394.alibi.ui.screens
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
+import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
@@ -13,6 +14,14 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
+import androidx.compose.material.icons.filled.CurrencyBitcoin
+import androidx.compose.material.icons.filled.CurrencyFranc
+import androidx.compose.material.icons.filled.CurrencyLira
+import androidx.compose.material.icons.filled.CurrencyPound
+import androidx.compose.material.icons.filled.CurrencyRuble
+import androidx.compose.material.icons.filled.CurrencyRupee
+import androidx.compose.material.icons.filled.CurrencyYen
+import androidx.compose.material.icons.filled.CurrencyYuan
import androidx.compose.material.icons.filled.OpenInNew
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
@@ -25,18 +34,29 @@ import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.rememberTopAppBarState
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.runtime.setValue
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.input.nestedscroll.nestedScroll
+import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.semantics.contentDescription
+import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import app.myzel394.alibi.R
import app.myzel394.alibi.BuildConfig
+import kotlin.random.Random
+
+const val GITHUB_URL = "https://github.com/Myzel394/Alibi"
+const val CROWDIN_URL = "https://crowdin.com/project/alibi"
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -46,6 +66,7 @@ fun AboutScreen(
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(
rememberTopAppBarState()
)
+ val uriHandler = LocalUriHandler.current
Scaffold(
topBar = {
@@ -115,22 +136,30 @@ fun AboutScreen(
stringResource(R.string.ui_about_contribute_message),
style = MaterialTheme.typography.titleMedium,
)
+
+ val githubLabel = stringResource(R.string.accessibility_open_in_browser, GITHUB_URL)
Row(
modifier = Modifier
.fillMaxWidth()
.clip(MaterialTheme.shapes.medium)
+ .semantics {
+ contentDescription = githubLabel
+ }
+ .clickable {
+ uriHandler.openUri(GITHUB_URL)
+ }
.background(
MaterialTheme.colorScheme.surfaceVariant
)
.padding(16.dp),
- horizontalArrangement = Arrangement.SpaceEvenly,
+ horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically,
) {
Image(
painter = painterResource(R.drawable.ic_github),
colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.onSurfaceVariant),
contentDescription = null,
- modifier = Modifier.size(ButtonDefaults.IconSize.times(1.5f))
+ modifier = Modifier.size(ButtonDefaults.IconSize.times(1.2f))
)
Text(
stringResource(R.string.ui_about_contribute_development),
@@ -142,6 +171,83 @@ fun AboutScreen(
modifier = Modifier.size(ButtonDefaults.IconSize)
)
}
+
+ val crowdinLabel =
+ stringResource(R.string.accessibility_open_in_browser, CROWDIN_URL)
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .clip(MaterialTheme.shapes.medium)
+ .semantics {
+ contentDescription = crowdinLabel
+ }
+ .clickable {
+ uriHandler.openUri(CROWDIN_URL)
+ }
+ .background(
+ MaterialTheme.colorScheme.surfaceVariant
+ )
+ .padding(16.dp),
+ horizontalArrangement = Arrangement.SpaceBetween,
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ Image(
+ painter = painterResource(R.drawable.ic_crowdin),
+ colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.onSurfaceVariant),
+ contentDescription = null,
+ modifier = Modifier.size(ButtonDefaults.IconSize.times(1.2f))
+ )
+ Text(
+ stringResource(R.string.ui_about_contribute_translation),
+ fontWeight = FontWeight.Bold,
+ )
+ Icon(
+ Icons.Default.OpenInNew,
+ contentDescription = null,
+ modifier = Modifier.size(ButtonDefaults.IconSize)
+ )
+ }
+
+ var donationsOpened by rememberSaveable {
+ mutableStateOf(false)
+ }
+ val donationLabel = stringResource(R.string.ui_about_contribute_donatation)
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .clip(MaterialTheme.shapes.medium)
+ .semantics {
+ contentDescription = donationLabel
+ }
+ .clickable {
+ donationsOpened = !donationsOpened
+ }
+ .background(
+ MaterialTheme.colorScheme.surfaceVariant
+ )
+ .padding(16.dp),
+ horizontalArrangement = Arrangement.spacedBy(8.dp),
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ Icon(
+ listOf(
+ Icons.Default.CurrencyBitcoin,
+ Icons.Default.CurrencyFranc,
+ Icons.Default.CurrencyLira,
+ Icons.Default.CurrencyPound,
+ Icons.Default.CurrencyRuble,
+ Icons.Default.CurrencyRupee,
+ Icons.Default.CurrencyYen,
+ Icons.Default.CurrencyYuan,
+ ).asSequence().shuffled().first(),
+ contentDescription = null,
+ modifier = Modifier.size(ButtonDefaults.IconSize.times(1.2f))
+ )
+ Text(
+ stringResource(R.string.ui_about_contribute_donatation),
+ fontWeight = FontWeight.Bold,
+ )
+ }
}
}
}
diff --git a/app/src/main/res/drawable/ic_crowdin.xml b/app/src/main/res/drawable/ic_crowdin.xml
new file mode 100644
index 0000000..8326732
--- /dev/null
+++ b/app/src/main/res/drawable/ic_crowdin.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 527649d..8976f4e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -92,4 +92,7 @@
Support Alibi
In my free time I develop Alibi and other free open source software. It would mean the world to me if you could help me in any way :)
Developing features or fixing bugs
+ Open link in browser: %s
+ Translate Alibi into your language
+ Make a donation
\ No newline at end of file
From fe9d2ef1e620df956318c83712d789934563de2a Mon Sep 17 00:00:00 2001
From: Myzel394 <50424412+Myzel394@users.noreply.github.com>
Date: Wed, 25 Oct 2023 18:44:02 +0200
Subject: [PATCH 5/9] feat: Add gpg key section to AboutScreen
---
.../myzel394/alibi/ui/screens/AboutScreen.kt | 76 ++++++++++++++++++-
app/src/main/res/values/strings.xml | 2 +
2 files changed, 75 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt b/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt
index f397944..3e87de0 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt
@@ -1,5 +1,8 @@
package app.myzel394.alibi.ui.screens
+import android.content.ClipData
+import android.content.ClipboardManager
+import android.content.Context
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
@@ -11,7 +14,9 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.CircleShape
+import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material.icons.filled.CurrencyBitcoin
@@ -22,7 +27,10 @@ import androidx.compose.material.icons.filled.CurrencyRuble
import androidx.compose.material.icons.filled.CurrencyRupee
import androidx.compose.material.icons.filled.CurrencyYen
import androidx.compose.material.icons.filled.CurrencyYuan
+import androidx.compose.material.icons.filled.Key
import androidx.compose.material.icons.filled.OpenInNew
+import androidx.compose.material.icons.filled.Shield
+import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
@@ -43,6 +51,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.input.nestedscroll.nestedScroll
+import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
@@ -57,6 +66,21 @@ import kotlin.random.Random
const val GITHUB_URL = "https://github.com/Myzel394/Alibi"
const val CROWDIN_URL = "https://crowdin.com/project/alibi"
+const val PUBLIC_KEY = """-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mDMEZTfvnhYJKwYBBAHaRw8BAQdAi2AiLsTaBoLhnQtY5vi3xBU/H428wbNfBSe+
+2dhz3r60Jk15emVsMzk0IDxnaXRodWIuN2Eyb3BAc2ltcGxlbG9naW4uY28+iJkE
+ExYKAEEWIQR9BS8nNHwqrNgV0B3NE0dCwel5WQUCZTfvngIbAwUJEswDAAULCQgH
+AgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRDNE0dCwel5WcS8AQCf9g6eEaut1suW
+l6jCLIg3b1nWLckmLJaonM6PruUtigEAmVnFOxMpOZEIcILT8CD2Riy+IVN9gTNH
+qOHnaFsu8AK4OARlN++eEgorBgEEAZdVAQUBAQdAe4ffDtRundKH9kam746i2TBu
+P9sfb3QVi5QqfK+bek8DAQgHiH4EGBYKACYWIQR9BS8nNHwqrNgV0B3NE0dCwel5
+WQUCZTfvngIbDAUJEswDAAAKCRDNE0dCwel5WWwSAQDj4ZAl6bSqwbcptEMYQaPM
+MMhMafm446MjkhQioeXw+wEAzA8mS6RBx7IZvu1dirmFHXOEYJclwjyQhNs4uEjq
+/Ak=
+=ICHe
+-----END PGP PUBLIC KEY BLOCK-----"""
+const val PUBLIC_KEY_FINGERPRINT = "7D05 2F27 347C 2AAC D815 D01D CD13 4742 C1E9 7959"
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -90,9 +114,9 @@ fun AboutScreen(
) { padding ->
Column(
modifier = Modifier
- .fillMaxSize()
.padding(padding)
- .padding(horizontal = 32.dp),
+ .padding(horizontal = 32.dp)
+ .verticalScroll(rememberScrollState()),
verticalArrangement = Arrangement.spacedBy(48.dp),
horizontalAlignment = Alignment.CenterHorizontally,
) {
@@ -126,7 +150,7 @@ fun AboutScreen(
)
}
Column(
- verticalArrangement = Arrangement.spacedBy(24.dp),
+ verticalArrangement = Arrangement.spacedBy(24.dp)
) {
Text(
stringResource(R.string.ui_about_contribute_title),
@@ -248,6 +272,52 @@ fun AboutScreen(
fontWeight = FontWeight.Bold,
)
}
+
+ Column(
+ modifier = Modifier
+ .fillMaxWidth()
+ .clip(MaterialTheme.shapes.medium)
+ .background(
+ MaterialTheme.colorScheme.primaryContainer
+ )
+ .padding(16.dp),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = Arrangement.spacedBy(16.dp),
+ ) {
+ Icon(
+ Icons.Default.Key,
+ contentDescription = null,
+ modifier = Modifier.size(48.dp)
+ )
+
+ Text(
+ stringResource(R.string.ui_about_gpg_key_hint),
+ style = MaterialTheme.typography.bodyMedium,
+ )
+
+ val clipboardManager =
+ LocalContext.current.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
+ Text(
+ PUBLIC_KEY_FINGERPRINT,
+ modifier = Modifier
+ .clip(MaterialTheme.shapes.small)
+ .background(
+ MaterialTheme.colorScheme.surfaceVariant
+ )
+ .padding(8.dp),
+ )
+ Button(
+ onClick = {
+ val clip = ClipData.newPlainText("text", PUBLIC_KEY)
+ clipboardManager.setPrimaryClip(clip)
+ },
+ colors = ButtonDefaults.textButtonColors(),
+ modifier = Modifier
+ .fillMaxWidth()
+ ) {
+ Text(stringResource(R.string.ui_about_gpg_key_copy))
+ }
+ }
}
}
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8976f4e..6d76829 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -95,4 +95,6 @@
Open link in browser: %s
Translate Alibi into your language
Make a donation
+ 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 don\'t fall for a phishing attack later on.
+ Copy GPG Key
\ No newline at end of file
From b6d0501c851f04fdf459a43b854826949c5d7b43 Mon Sep 17 00:00:00 2001
From: Myzel394 <50424412+Myzel394@users.noreply.github.com>
Date: Wed, 25 Oct 2023 18:59:23 +0200
Subject: [PATCH 6/9] feat: Add DonationsTile
---
.../java/app/myzel394/alibi/ui/Constants.kt | 38 ++++++
.../AboutScreen/atoms/DonationsTile.kt | 127 ++++++++++++++++++
.../AboutScreen/atoms/GPGKeyOverview.kt | 77 +++++++++++
.../myzel394/alibi/ui/screens/AboutScreen.kt | 104 +-------------
4 files changed, 246 insertions(+), 100 deletions(-)
create mode 100644 app/src/main/java/app/myzel394/alibi/ui/components/AboutScreen/atoms/DonationsTile.kt
create mode 100644 app/src/main/java/app/myzel394/alibi/ui/components/AboutScreen/atoms/GPGKeyOverview.kt
diff --git a/app/src/main/java/app/myzel394/alibi/ui/Constants.kt b/app/src/main/java/app/myzel394/alibi/ui/Constants.kt
index 903c212..41d5ca8 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/Constants.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/Constants.kt
@@ -6,3 +6,41 @@ import androidx.compose.ui.unit.dp
val BIG_PRIMARY_BUTTON_SIZE = 64.dp
val MAX_AMPLITUDE = 20000
val SUPPORTS_DARK_MODE_NATIVELY = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q
+
+const val PUBLIC_KEY = """-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mDMEZTfvnhYJKwYBBAHaRw8BAQdAi2AiLsTaBoLhnQtY5vi3xBU/H428wbNfBSe+
+2dhz3r60Jk15emVsMzk0IDxnaXRodWIuN2Eyb3BAc2ltcGxlbG9naW4uY28+iJkE
+ExYKAEEWIQR9BS8nNHwqrNgV0B3NE0dCwel5WQUCZTfvngIbAwUJEswDAAULCQgH
+AgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRDNE0dCwel5WcS8AQCf9g6eEaut1suW
+l6jCLIg3b1nWLckmLJaonM6PruUtigEAmVnFOxMpOZEIcILT8CD2Riy+IVN9gTNH
+qOHnaFsu8AK4OARlN++eEgorBgEEAZdVAQUBAQdAe4ffDtRundKH9kam746i2TBu
+P9sfb3QVi5QqfK+bek8DAQgHiH4EGBYKACYWIQR9BS8nNHwqrNgV0B3NE0dCwel5
+WQUCZTfvngIbDAUJEswDAAAKCRDNE0dCwel5WWwSAQDj4ZAl6bSqwbcptEMYQaPM
+MMhMafm446MjkhQioeXw+wEAzA8mS6RBx7IZvu1dirmFHXOEYJclwjyQhNs4uEjq
+/Ak=
+=ICHe
+-----END PGP PUBLIC KEY BLOCK-----"""
+const val PUBLIC_KEY_FINGERPRINT = "7D05 2F27 347C 2AAC D815 D01D CD13 4742 C1E9 7959"
+val CRYPTO_DONATIONS = mapOf(
+ "Bitcoin" to "bc1qw054829yj8e2u8glxnfcg3w22dkek577mjt5x6",
+ "Bitcoin Cash" to "qr9s64vfqedvurfef9ykf7szchmt0xyvnga452fc8l",
+ "Ethereum" to "0xbb5E631c03C65334d1d9EfBCD926DC1265CC20D7",
+ "Tether USD" to "0xbb5E631c03C65334d1d9EfBCD926DC1265CC20D7",
+ "Monero" to "83dm5wyuckG4aPbuMREHCEgLNwVn5i7963SKBhECaA7Ueb7DKBTy639R3QfMtb3DsFHMp8u6WGiCFgbdRDBBcz5sLduUtm8",
+ "Zcash" to "t1ZfvNpzfdaW6csT9Kc7iJA7LUU3hmNj2sx",
+ "Litecoin" to "LZayhTosZ9ToRvcbeR1gEDgb76Z7ZA2drN",
+ "Dash" to "XcTkni8CVAXBcuc5VwvHmsYftVK4CPLetU",
+ "Avalanche" to "0xbb5E631c03C65334d1d9EfBCD926DC1265CC20D7",
+ "XRP" to "rNpfDm8UwDTumCebchBadjVW2FEPteFgNg",
+ "Solana" to "2h6CB3hz5Vb2nYS1RQiXZ4aWTzc5frBPR7Sp1b4muFqb",
+ "ADA" to "addr1q8vy2vcp6lacaw8lkc29gufuzajaytc5qc0c2mxlmw5lndxcg5esr4lm36u0lds523cnc9m96gh3gpsls4kdlkaflx6qf6qpvc",
+ "Dogecoin" to "DUA4j7mVoc7Rvezu8YgeRKwxNuMzKeDoxD",
+ "Tron" to "THWVLGhne5wDsGjd1CNenHDKQGzvGzrzLb",
+ "Polkadot" to "1642iaR6AoKyM6qnnMHkfCRfRqRKJ2wC6Cm3UEWEFEz6EtZR",
+ "Cosmos" to "cosmos1vt5z6rfj5sgnkdlddkuu8srw3xupyqxscva9hz",
+ "Algorand" to "QBOQ6VSLMD77QEF33P5J3HKGOM5RZLNO6P5P3FTWCMQM3ORF6QY2W34KUI",
+ "Tezos" to "tz1QUWNYuFqDibGCrwmkdaHSpTx3d6ZdxLMi",
+ "Litecoin" to "LZayhTosZ9ToRvcbeR1gEDgb76Z7ZA2drN",
+ "Filecoin" to "f1j6pm3chzhgadpf6iwmtux33jb5gccj5arkg4dsq",
+)
diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/AboutScreen/atoms/DonationsTile.kt b/app/src/main/java/app/myzel394/alibi/ui/components/AboutScreen/atoms/DonationsTile.kt
new file mode 100644
index 0000000..c0f4010
--- /dev/null
+++ b/app/src/main/java/app/myzel394/alibi/ui/components/AboutScreen/atoms/DonationsTile.kt
@@ -0,0 +1,127 @@
+package app.myzel394.alibi.ui.components.AboutScreen.atoms
+
+import android.content.ClipData
+import android.content.ClipboardManager
+import android.content.Context
+import androidx.compose.foundation.background
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.horizontalScroll
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ContentCopy
+import androidx.compose.material.icons.filled.CurrencyBitcoin
+import androidx.compose.material.icons.filled.CurrencyFranc
+import androidx.compose.material.icons.filled.CurrencyLira
+import androidx.compose.material.icons.filled.CurrencyPound
+import androidx.compose.material.icons.filled.CurrencyRuble
+import androidx.compose.material.icons.filled.CurrencyRupee
+import androidx.compose.material.icons.filled.CurrencyYen
+import androidx.compose.material.icons.filled.CurrencyYuan
+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.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.semantics.contentDescription
+import androidx.compose.ui.semantics.semantics
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.dp
+import app.myzel394.alibi.R
+import app.myzel394.alibi.ui.CRYPTO_DONATIONS
+import app.myzel394.alibi.ui.PUBLIC_KEY
+
+@Composable
+fun DonationsTile() {
+ var donationsOpened by rememberSaveable {
+ mutableStateOf(false)
+ }
+ val label = stringResource(R.string.ui_about_contribute_donatation)
+
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .clip(MaterialTheme.shapes.medium)
+ .semantics {
+ contentDescription = label
+ }
+ .clickable {
+ donationsOpened = !donationsOpened
+ }
+ .background(
+ MaterialTheme.colorScheme.surfaceVariant
+ )
+ .padding(16.dp),
+ horizontalArrangement = Arrangement.spacedBy(8.dp),
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ Icon(
+ listOf(
+ Icons.Default.CurrencyBitcoin,
+ Icons.Default.CurrencyFranc,
+ Icons.Default.CurrencyLira,
+ Icons.Default.CurrencyPound,
+ Icons.Default.CurrencyRuble,
+ Icons.Default.CurrencyRupee,
+ Icons.Default.CurrencyYen,
+ Icons.Default.CurrencyYuan,
+ ).asSequence().shuffled().first(),
+ contentDescription = null,
+ modifier = Modifier.size(ButtonDefaults.IconSize.times(1.2f))
+ )
+ Text(
+ stringResource(R.string.ui_about_contribute_donatation),
+ fontWeight = FontWeight.Bold,
+ )
+ }
+
+ // TODO: Add LazyColumn, make expandable
+ Column {
+ val clipboardManager =
+ LocalContext.current.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
+
+ for (crypto in CRYPTO_DONATIONS) {
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .clip(MaterialTheme.shapes.medium)
+ .clickable {
+ val clip = ClipData.newPlainText("text", crypto.value)
+ clipboardManager.setPrimaryClip(clip)
+ }
+ .padding(8.dp)
+ .horizontalScroll(rememberScrollState()),
+ horizontalArrangement = Arrangement.spacedBy(8.dp),
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ Icon(
+ Icons.Default.ContentCopy,
+ contentDescription = null,
+ )
+ Text(
+ crypto.key,
+ style = MaterialTheme.typography.bodyMedium,
+ fontWeight = FontWeight.Bold,
+ )
+ Text(
+ crypto.value,
+ fontSize = MaterialTheme.typography.bodyMedium.fontSize.times(0.5),
+ )
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/AboutScreen/atoms/GPGKeyOverview.kt b/app/src/main/java/app/myzel394/alibi/ui/components/AboutScreen/atoms/GPGKeyOverview.kt
new file mode 100644
index 0000000..572f888
--- /dev/null
+++ b/app/src/main/java/app/myzel394/alibi/ui/components/AboutScreen/atoms/GPGKeyOverview.kt
@@ -0,0 +1,77 @@
+package app.myzel394.alibi.ui.components.AboutScreen.atoms
+
+import android.content.ClipData
+import android.content.ClipboardManager
+import android.content.Context
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Key
+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.draw.clip
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.unit.dp
+import app.myzel394.alibi.R
+import app.myzel394.alibi.ui.PUBLIC_KEY_FINGERPRINT
+import app.myzel394.alibi.ui.PUBLIC_KEY
+
+@Composable
+fun GPGKeyOverview() {
+ Column(
+ modifier = Modifier
+ .fillMaxWidth()
+ .clip(MaterialTheme.shapes.medium)
+ .background(
+ MaterialTheme.colorScheme.primaryContainer
+ )
+ .padding(16.dp),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = Arrangement.spacedBy(16.dp),
+ ) {
+ Icon(
+ Icons.Default.Key,
+ contentDescription = null,
+ modifier = Modifier.size(48.dp)
+ )
+
+ Text(
+ stringResource(R.string.ui_about_gpg_key_hint),
+ style = MaterialTheme.typography.bodyMedium,
+ )
+
+ val clipboardManager =
+ LocalContext.current.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
+ Text(
+ PUBLIC_KEY_FINGERPRINT,
+ modifier = Modifier
+ .clip(MaterialTheme.shapes.small)
+ .background(
+ MaterialTheme.colorScheme.surfaceVariant
+ )
+ .padding(8.dp),
+ )
+ Button(
+ onClick = {
+ val clip = ClipData.newPlainText("text", PUBLIC_KEY)
+ clipboardManager.setPrimaryClip(clip)
+ },
+ colors = ButtonDefaults.textButtonColors(),
+ modifier = Modifier
+ .fillMaxWidth()
+ ) {
+ Text(stringResource(R.string.ui_about_gpg_key_copy))
+ }
+ }
+}
diff --git a/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt b/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt
index 3e87de0..a23f79a 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt
@@ -62,25 +62,12 @@ import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import app.myzel394.alibi.R
import app.myzel394.alibi.BuildConfig
+import app.myzel394.alibi.ui.components.AboutScreen.atoms.DonationsTile
+import app.myzel394.alibi.ui.components.AboutScreen.atoms.GPGKeyOverview
import kotlin.random.Random
const val GITHUB_URL = "https://github.com/Myzel394/Alibi"
const val CROWDIN_URL = "https://crowdin.com/project/alibi"
-const val PUBLIC_KEY = """-----BEGIN PGP PUBLIC KEY BLOCK-----
-
-mDMEZTfvnhYJKwYBBAHaRw8BAQdAi2AiLsTaBoLhnQtY5vi3xBU/H428wbNfBSe+
-2dhz3r60Jk15emVsMzk0IDxnaXRodWIuN2Eyb3BAc2ltcGxlbG9naW4uY28+iJkE
-ExYKAEEWIQR9BS8nNHwqrNgV0B3NE0dCwel5WQUCZTfvngIbAwUJEswDAAULCQgH
-AgIiAgYVCgkICwIEFgIDAQIeBwIXgAAKCRDNE0dCwel5WcS8AQCf9g6eEaut1suW
-l6jCLIg3b1nWLckmLJaonM6PruUtigEAmVnFOxMpOZEIcILT8CD2Riy+IVN9gTNH
-qOHnaFsu8AK4OARlN++eEgorBgEEAZdVAQUBAQdAe4ffDtRundKH9kam746i2TBu
-P9sfb3QVi5QqfK+bek8DAQgHiH4EGBYKACYWIQR9BS8nNHwqrNgV0B3NE0dCwel5
-WQUCZTfvngIbDAUJEswDAAAKCRDNE0dCwel5WWwSAQDj4ZAl6bSqwbcptEMYQaPM
-MMhMafm446MjkhQioeXw+wEAzA8mS6RBx7IZvu1dirmFHXOEYJclwjyQhNs4uEjq
-/Ak=
-=ICHe
------END PGP PUBLIC KEY BLOCK-----"""
-const val PUBLIC_KEY_FINGERPRINT = "7D05 2F27 347C 2AAC D815 D01D CD13 4742 C1E9 7959"
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -232,92 +219,9 @@ fun AboutScreen(
)
}
- var donationsOpened by rememberSaveable {
- mutableStateOf(false)
- }
- val donationLabel = stringResource(R.string.ui_about_contribute_donatation)
- Row(
- modifier = Modifier
- .fillMaxWidth()
- .clip(MaterialTheme.shapes.medium)
- .semantics {
- contentDescription = donationLabel
- }
- .clickable {
- donationsOpened = !donationsOpened
- }
- .background(
- MaterialTheme.colorScheme.surfaceVariant
- )
- .padding(16.dp),
- horizontalArrangement = Arrangement.spacedBy(8.dp),
- verticalAlignment = Alignment.CenterVertically,
- ) {
- Icon(
- listOf(
- Icons.Default.CurrencyBitcoin,
- Icons.Default.CurrencyFranc,
- Icons.Default.CurrencyLira,
- Icons.Default.CurrencyPound,
- Icons.Default.CurrencyRuble,
- Icons.Default.CurrencyRupee,
- Icons.Default.CurrencyYen,
- Icons.Default.CurrencyYuan,
- ).asSequence().shuffled().first(),
- contentDescription = null,
- modifier = Modifier.size(ButtonDefaults.IconSize.times(1.2f))
- )
- Text(
- stringResource(R.string.ui_about_contribute_donatation),
- fontWeight = FontWeight.Bold,
- )
- }
+ DonationsTile()
- Column(
- modifier = Modifier
- .fillMaxWidth()
- .clip(MaterialTheme.shapes.medium)
- .background(
- MaterialTheme.colorScheme.primaryContainer
- )
- .padding(16.dp),
- horizontalAlignment = Alignment.CenterHorizontally,
- verticalArrangement = Arrangement.spacedBy(16.dp),
- ) {
- Icon(
- Icons.Default.Key,
- contentDescription = null,
- modifier = Modifier.size(48.dp)
- )
-
- Text(
- stringResource(R.string.ui_about_gpg_key_hint),
- style = MaterialTheme.typography.bodyMedium,
- )
-
- val clipboardManager =
- LocalContext.current.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
- Text(
- PUBLIC_KEY_FINGERPRINT,
- modifier = Modifier
- .clip(MaterialTheme.shapes.small)
- .background(
- MaterialTheme.colorScheme.surfaceVariant
- )
- .padding(8.dp),
- )
- Button(
- onClick = {
- val clip = ClipData.newPlainText("text", PUBLIC_KEY)
- clipboardManager.setPrimaryClip(clip)
- },
- colors = ButtonDefaults.textButtonColors(),
- modifier = Modifier
- .fillMaxWidth()
- ) {
- Text(stringResource(R.string.ui_about_gpg_key_copy))
- }
- }
+ GPGKeyOverview()
}
}
}
From e7bc1ac0b3e9627526c4b0f432d52036c3d36bda Mon Sep 17 00:00:00 2001
From: Myzel394 <50424412+Myzel394@users.noreply.github.com>
Date: Thu, 26 Oct 2023 15:54:30 +0200
Subject: [PATCH 7/9] current stand
---
.../AboutScreen/atoms/DonationsTile.kt | 69 ++++++++++---------
1 file changed, 38 insertions(+), 31 deletions(-)
diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/AboutScreen/atoms/DonationsTile.kt b/app/src/main/java/app/myzel394/alibi/ui/components/AboutScreen/atoms/DonationsTile.kt
index c0f4010..7e12526 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/components/AboutScreen/atoms/DonationsTile.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/components/AboutScreen/atoms/DonationsTile.kt
@@ -3,6 +3,8 @@ package app.myzel394.alibi.ui.components.AboutScreen.atoms
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
+import androidx.compose.animation.AnimatedVisibility
+import androidx.compose.animation.expandVertically
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.horizontalScroll
@@ -12,6 +14,7 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.rememberScrollState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ContentCopy
@@ -89,38 +92,42 @@ fun DonationsTile() {
)
}
- // TODO: Add LazyColumn, make expandable
- Column {
- val clipboardManager =
- LocalContext.current.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
+ val clipboardManager =
+ LocalContext.current.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
- for (crypto in CRYPTO_DONATIONS) {
- Row(
- modifier = Modifier
- .fillMaxWidth()
- .clip(MaterialTheme.shapes.medium)
- .clickable {
- val clip = ClipData.newPlainText("text", crypto.value)
- clipboardManager.setPrimaryClip(clip)
- }
- .padding(8.dp)
- .horizontalScroll(rememberScrollState()),
- horizontalArrangement = Arrangement.spacedBy(8.dp),
- verticalAlignment = Alignment.CenterVertically,
- ) {
- Icon(
- Icons.Default.ContentCopy,
- contentDescription = null,
- )
- Text(
- crypto.key,
- style = MaterialTheme.typography.bodyMedium,
- fontWeight = FontWeight.Bold,
- )
- Text(
- crypto.value,
- fontSize = MaterialTheme.typography.bodyMedium.fontSize.times(0.5),
- )
+ AnimatedVisibility(
+ visible = donationsOpened,
+ enter = expandVertically(),
+ ) {
+ Column {
+ for (crypto in CRYPTO_DONATIONS) {
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .clip(MaterialTheme.shapes.medium)
+ .clickable {
+ val clip = ClipData.newPlainText("text", crypto.value)
+ clipboardManager.setPrimaryClip(clip)
+ }
+ .padding(8.dp)
+ .horizontalScroll(rememberScrollState()),
+ horizontalArrangement = Arrangement.spacedBy(8.dp),
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ Icon(
+ Icons.Default.ContentCopy,
+ contentDescription = null,
+ )
+ Text(
+ crypto.key,
+ style = MaterialTheme.typography.bodyMedium,
+ fontWeight = FontWeight.Bold,
+ )
+ Text(
+ crypto.value,
+ fontSize = MaterialTheme.typography.bodyMedium.fontSize.times(0.5),
+ )
+ }
}
}
}
From cc3b0736c9cefcdc6cf3b3cf16cc29c8d8b9e3f5 Mon Sep 17 00:00:00 2001
From: Myzel394 <50424412+Myzel394@users.noreply.github.com>
Date: Thu, 26 Oct 2023 16:36:16 +0200
Subject: [PATCH 8/9] fix: Improve DonationsTile
---
.../AboutScreen/atoms/DonationsTile.kt | 57 +++++++++++++------
app/src/main/res/values/strings.xml | 2 +-
2 files changed, 40 insertions(+), 19 deletions(-)
diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/AboutScreen/atoms/DonationsTile.kt b/app/src/main/java/app/myzel394/alibi/ui/components/AboutScreen/atoms/DonationsTile.kt
index 7e12526..1cd47f6 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/components/AboutScreen/atoms/DonationsTile.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/components/AboutScreen/atoms/DonationsTile.kt
@@ -4,6 +4,7 @@ import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import androidx.compose.animation.AnimatedVisibility
+import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.animation.expandVertically
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
@@ -17,6 +18,7 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.rememberScrollState
import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ArrowDropDown
import androidx.compose.material.icons.filled.ContentCopy
import androidx.compose.material.icons.filled.CurrencyBitcoin
import androidx.compose.material.icons.filled.CurrencyFranc
@@ -38,6 +40,7 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
+import androidx.compose.ui.draw.rotate
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.contentDescription
@@ -69,26 +72,44 @@ fun DonationsTile() {
MaterialTheme.colorScheme.surfaceVariant
)
.padding(16.dp),
- horizontalArrangement = Arrangement.spacedBy(8.dp),
+ horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically,
) {
- Icon(
- listOf(
- Icons.Default.CurrencyBitcoin,
- Icons.Default.CurrencyFranc,
- Icons.Default.CurrencyLira,
- Icons.Default.CurrencyPound,
- Icons.Default.CurrencyRuble,
- Icons.Default.CurrencyRupee,
- Icons.Default.CurrencyYen,
- Icons.Default.CurrencyYuan,
- ).asSequence().shuffled().first(),
- contentDescription = null,
- modifier = Modifier.size(ButtonDefaults.IconSize.times(1.2f))
+ Row(
+ horizontalArrangement = Arrangement.spacedBy(8.dp),
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ Icon(
+ listOf(
+ Icons.Default.CurrencyBitcoin,
+ Icons.Default.CurrencyFranc,
+ Icons.Default.CurrencyLira,
+ Icons.Default.CurrencyPound,
+ Icons.Default.CurrencyRuble,
+ Icons.Default.CurrencyRupee,
+ Icons.Default.CurrencyYen,
+ Icons.Default.CurrencyYuan,
+ ).asSequence().shuffled().first(),
+ contentDescription = null,
+ modifier = Modifier.size(ButtonDefaults.IconSize.times(1.2f))
+ )
+ Text(
+ stringResource(R.string.ui_about_contribute_donatation),
+ fontWeight = FontWeight.Bold,
+ )
+ }
+
+ val rotation by animateFloatAsState(
+ if (donationsOpened) -180f else 0f,
+ label = "iconRotation"
)
- Text(
- stringResource(R.string.ui_about_contribute_donatation),
- fontWeight = FontWeight.Bold,
+
+ Icon(
+ Icons.Default.ArrowDropDown,
+ contentDescription = null,
+ modifier = Modifier
+ .size(ButtonDefaults.IconSize.times(1.2f))
+ .rotate(rotation)
)
}
@@ -109,7 +130,7 @@ fun DonationsTile() {
val clip = ClipData.newPlainText("text", crypto.value)
clipboardManager.setPrimaryClip(clip)
}
- .padding(8.dp)
+ .padding(16.dp)
.horizontalScroll(rememberScrollState()),
horizontalArrangement = Arrangement.spacedBy(8.dp),
verticalAlignment = Alignment.CenterVertically,
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6d76829..42d3aca 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -95,6 +95,6 @@
Open link in browser: %s
Translate Alibi into your language
Make a donation
- 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 don\'t fall for a phishing attack later on.
+ 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
\ No newline at end of file
From 3d7f053e8b1e72f6edecd88f80b8d092e80f6282 Mon Sep 17 00:00:00 2001
From: Myzel394 <50424412+Myzel394@users.noreply.github.com>
Date: Thu, 26 Oct 2023 16:43:31 +0200
Subject: [PATCH 9/9] feat: Add GITHUB_SPONSORS_URL
---
.../java/app/myzel394/alibi/ui/Constants.kt | 5 +++
.../AboutScreen/atoms/DonationsTile.kt | 27 +++++++++++++++
.../myzel394/alibi/ui/screens/AboutScreen.kt | 34 ++++---------------
app/src/main/res/values/strings.xml | 1 +
4 files changed, 39 insertions(+), 28 deletions(-)
diff --git a/app/src/main/java/app/myzel394/alibi/ui/Constants.kt b/app/src/main/java/app/myzel394/alibi/ui/Constants.kt
index 41d5ca8..bf3dce1 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/Constants.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/Constants.kt
@@ -7,6 +7,11 @@ val BIG_PRIMARY_BUTTON_SIZE = 64.dp
val MAX_AMPLITUDE = 20000
val SUPPORTS_DARK_MODE_NATIVELY = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q
+// You are not allowed to change the constants below.
+// If you do so, you will be blocked on GitHub.
+const val REPO_URL = "https://github.com/Myzel394/Alibi"
+const val TRANSLATION_HELP_URL = "https://crowdin.com/project/alibi"
+const val GITHUB_SPONSORS_URL = "https://github.com/sponsors/Myzel394"
const val PUBLIC_KEY = """-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZTfvnhYJKwYBBAHaRw8BAQdAi2AiLsTaBoLhnQtY5vi3xBU/H428wbNfBSe+
diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/AboutScreen/atoms/DonationsTile.kt b/app/src/main/java/app/myzel394/alibi/ui/components/AboutScreen/atoms/DonationsTile.kt
index 1cd47f6..1944e38 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/components/AboutScreen/atoms/DonationsTile.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/components/AboutScreen/atoms/DonationsTile.kt
@@ -6,12 +6,14 @@ import android.content.Context
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.animation.expandVertically
+import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.horizontalScroll
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
@@ -28,6 +30,7 @@ import androidx.compose.material.icons.filled.CurrencyRuble
import androidx.compose.material.icons.filled.CurrencyRupee
import androidx.compose.material.icons.filled.CurrencyYen
import androidx.compose.material.icons.filled.CurrencyYuan
+import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
@@ -41,7 +44,10 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.rotate
+import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.platform.LocalUriHandler
+import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.semantics
@@ -49,6 +55,7 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import app.myzel394.alibi.R
import app.myzel394.alibi.ui.CRYPTO_DONATIONS
+import app.myzel394.alibi.ui.GITHUB_SPONSORS_URL
import app.myzel394.alibi.ui.PUBLIC_KEY
@Composable
@@ -121,6 +128,26 @@ fun DonationsTile() {
enter = expandVertically(),
) {
Column {
+ val uriHandler = LocalUriHandler.current
+
+ Button(
+ onClick = {
+ uriHandler.openUri(GITHUB_SPONSORS_URL)
+ },
+ colors = ButtonDefaults.textButtonColors(),
+ modifier = Modifier.fillMaxWidth(),
+ ) {
+ Image(
+ painter = painterResource(R.drawable.ic_github),
+ colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.primary),
+ contentDescription = null,
+ modifier = Modifier.size(ButtonDefaults.IconSize.times(1.2f))
+ )
+ Spacer(modifier = Modifier.size(ButtonDefaults.IconSpacing))
+ Text(
+ stringResource(R.string.ui_about_contribute_donation_githubSponsors)
+ )
+ }
for (crypto in CRYPTO_DONATIONS) {
Row(
modifier = Modifier
diff --git a/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt b/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt
index a23f79a..8082fe5 100644
--- a/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt
+++ b/app/src/main/java/app/myzel394/alibi/ui/screens/AboutScreen.kt
@@ -1,8 +1,5 @@
package app.myzel394.alibi.ui.screens
-import android.content.ClipData
-import android.content.ClipboardManager
-import android.content.Context
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
@@ -10,7 +7,6 @@ import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
@@ -19,18 +15,7 @@ import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
-import androidx.compose.material.icons.filled.CurrencyBitcoin
-import androidx.compose.material.icons.filled.CurrencyFranc
-import androidx.compose.material.icons.filled.CurrencyLira
-import androidx.compose.material.icons.filled.CurrencyPound
-import androidx.compose.material.icons.filled.CurrencyRuble
-import androidx.compose.material.icons.filled.CurrencyRupee
-import androidx.compose.material.icons.filled.CurrencyYen
-import androidx.compose.material.icons.filled.CurrencyYuan
-import androidx.compose.material.icons.filled.Key
import androidx.compose.material.icons.filled.OpenInNew
-import androidx.compose.material.icons.filled.Shield
-import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
@@ -42,16 +27,11 @@ import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.rememberTopAppBarState
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.saveable.rememberSaveable
-import androidx.compose.runtime.setValue
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.input.nestedscroll.nestedScroll
-import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
@@ -62,12 +42,10 @@ import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import app.myzel394.alibi.R
import app.myzel394.alibi.BuildConfig
+import app.myzel394.alibi.ui.TRANSLATION_HELP_URL
+import app.myzel394.alibi.ui.REPO_URL
import app.myzel394.alibi.ui.components.AboutScreen.atoms.DonationsTile
import app.myzel394.alibi.ui.components.AboutScreen.atoms.GPGKeyOverview
-import kotlin.random.Random
-
-const val GITHUB_URL = "https://github.com/Myzel394/Alibi"
-const val CROWDIN_URL = "https://crowdin.com/project/alibi"
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -148,7 +126,7 @@ fun AboutScreen(
style = MaterialTheme.typography.titleMedium,
)
- val githubLabel = stringResource(R.string.accessibility_open_in_browser, GITHUB_URL)
+ val githubLabel = stringResource(R.string.accessibility_open_in_browser, REPO_URL)
Row(
modifier = Modifier
.fillMaxWidth()
@@ -157,7 +135,7 @@ fun AboutScreen(
contentDescription = githubLabel
}
.clickable {
- uriHandler.openUri(GITHUB_URL)
+ uriHandler.openUri(REPO_URL)
}
.background(
MaterialTheme.colorScheme.surfaceVariant
@@ -184,7 +162,7 @@ fun AboutScreen(
}
val crowdinLabel =
- stringResource(R.string.accessibility_open_in_browser, CROWDIN_URL)
+ stringResource(R.string.accessibility_open_in_browser, TRANSLATION_HELP_URL)
Row(
modifier = Modifier
.fillMaxWidth()
@@ -193,7 +171,7 @@ fun AboutScreen(
contentDescription = crowdinLabel
}
.clickable {
- uriHandler.openUri(CROWDIN_URL)
+ uriHandler.openUri(TRANSLATION_HELP_URL)
}
.background(
MaterialTheme.colorScheme.surfaceVariant
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 42d3aca..e3fd669 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -97,4 +97,5 @@
Make a donation
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
\ No newline at end of file