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