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] 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