diff --git a/app/src/main/java/com/kaajjo/libresudoku/core/Constants.kt b/app/src/main/java/com/kaajjo/libresudoku/core/Constants.kt
new file mode 100644
index 00000000..6efcb4f5
--- /dev/null
+++ b/app/src/main/java/com/kaajjo/libresudoku/core/Constants.kt
@@ -0,0 +1,9 @@
+package com.kaajjo.libresudoku.core
+
+const val GITHUB_REPOSITORY = "https://github.com/kaajjo/Libre-Sudoku"
+const val WEBLATE_ENGAGE = "https://hosted.weblate.org/engage/libresudoku/"
+const val TELEGRAM_CHANNEL = "https://t.me/libresudoku"
+const val CRYPTO_BTC = "bc1qhpx222kmk5v6tqrra524fezwjqr0lhjq77ee8q"
+const val CRYPTO_TON = "EQCKG3oMsmOlsLrskCKl_xOF1DZezscfEp4QCOlS62H59AH7"
+const val CRYPTO_USDT_TRC20 = "TDLEHdTVrWGU36h1q742AorJxUA6qyMUzV"
+const val CARD_MIR = "2202 2080 8068 0045"
\ No newline at end of file
diff --git a/app/src/main/java/com/kaajjo/libresudoku/ui/more/about/AboutScreen.kt b/app/src/main/java/com/kaajjo/libresudoku/ui/more/about/AboutScreen.kt
index 3d1bb21a..88543bbd 100644
--- a/app/src/main/java/com/kaajjo/libresudoku/ui/more/about/AboutScreen.kt
+++ b/app/src/main/java/com/kaajjo/libresudoku/ui/more/about/AboutScreen.kt
@@ -1,40 +1,78 @@
package com.kaajjo.libresudoku.ui.more.about
+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
+import androidx.compose.foundation.layout.ColumnScope
+import androidx.compose.foundation.layout.ExperimentalLayoutApi
+import androidx.compose.foundation.layout.FlowRow
+import androidx.compose.foundation.layout.FlowRowScope
import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
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.shape.CircleShape
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.outlined.Info
+import androidx.compose.material.icons.rounded.ContentCopy
+import androidx.compose.material.icons.rounded.Payments
import androidx.compose.material3.ExperimentalMaterial3Api
-import androidx.compose.material3.HorizontalDivider
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.surfaceColorAtElevation
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.vector.ImageVector
+import androidx.compose.ui.platform.LocalClipboardManager
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.res.vectorResource
+import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.unit.dp
import com.kaajjo.libresudoku.BuildConfig
import com.kaajjo.libresudoku.R
+import com.kaajjo.libresudoku.core.CARD_MIR
+import com.kaajjo.libresudoku.core.CRYPTO_BTC
+import com.kaajjo.libresudoku.core.CRYPTO_TON
+import com.kaajjo.libresudoku.core.CRYPTO_USDT_TRC20
+import com.kaajjo.libresudoku.core.GITHUB_REPOSITORY
+import com.kaajjo.libresudoku.core.TELEGRAM_CHANNEL
+import com.kaajjo.libresudoku.core.WEBLATE_ENGAGE
import com.kaajjo.libresudoku.destinations.AboutLibrariesScreenDestination
import com.kaajjo.libresudoku.ui.components.AnimatedNavigation
-import com.kaajjo.libresudoku.ui.components.PreferenceRow
+import com.kaajjo.libresudoku.ui.theme.ColorUtils.harmonizeWithPrimary
+import com.kaajjo.libresudoku.ui.theme.icons.Bitcoin
+import com.kaajjo.libresudoku.ui.theme.icons.ExteraGram
+import com.kaajjo.libresudoku.ui.theme.icons.LibreSudokuIconAlt
+import com.kaajjo.libresudoku.ui.theme.icons.Mir
+import com.kaajjo.libresudoku.ui.theme.icons.Ton
+import com.kaajjo.libresudoku.ui.theme.icons.Usdt
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
@Destination(style = AnimatedNavigation::class)
-@OptIn(ExperimentalMaterial3Api::class)
+@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class)
@Composable
fun AboutScreen(
navigator: DestinationsNavigator
) {
+ val uriHandler = LocalUriHandler.current
+ val clipboardManager = LocalClipboardManager.current
+
Scaffold(
topBar = {
TopAppBar(
@@ -49,59 +87,255 @@ fun AboutScreen(
}
)
}
- ) {
+ ) { paddingValues ->
Column(
modifier = Modifier
- .padding(it)
+ .padding(paddingValues)
.fillMaxWidth()
+ .verticalScroll(rememberScrollState())
) {
+
+ Box(
+ modifier = Modifier
+ .clip(CircleShape)
+ .background(MaterialTheme.colorScheme.surfaceContainerHighest)
+ .align(Alignment.CenterHorizontally)
+ ) {
+ Icon(
+ modifier = Modifier
+ .padding(12.dp)
+ .align(Alignment.Center)
+ .size(48.dp),
+ imageVector = Icons.Rounded.LibreSudokuIconAlt,
+ contentDescription = null
+ )
+ }
+ Spacer(modifier = Modifier.height(16.dp))
Row(
modifier = Modifier
- .fillMaxWidth()
- .padding(vertical = 8.dp),
+ .fillMaxWidth(),
horizontalArrangement = Arrangement.Center,
verticalAlignment = Alignment.CenterVertically
) {
- Icon(
- modifier = Modifier.size(56.dp),
- painter = painterResource(R.drawable.ic_launcher_foreground),
- contentDescription = null,
- )
Text(
text = stringResource(R.string.app_name),
style = MaterialTheme.typography.titleLarge
)
}
+ Spacer(modifier = Modifier.height(4.dp))
+ Box(
+ modifier = Modifier
+ .clip(MaterialTheme.shapes.large)
+ .background(MaterialTheme.colorScheme.surfaceContainerHighest)
+ .align(Alignment.CenterHorizontally)
+ ) {
+ Text(
+ "Версия ${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})",
+ style = MaterialTheme.typography.labelMedium,
+ modifier = Modifier.padding(vertical = 4.dp, horizontal = 8.dp)
+ )
+ }
- HorizontalDivider()
-
- PreferenceRow(
- title = stringResource(R.string.about_version),
- subtitle = BuildConfig.VERSION_NAME,
- painter = painterResource(R.drawable.ic_outline_info_24),
- )
+ FlowRow(
+ modifier = Modifier
+ .padding(horizontal = 12.dp, vertical = 8.dp)
+ .align(Alignment.CenterHorizontally)
+ .fillMaxWidth(),
+ horizontalArrangement = Arrangement.spacedBy(8.dp),
+ verticalArrangement = Arrangement.spacedBy(8.dp),
+ maxItemsInEachRow = 3
+ ) {
+ AboutSectionBox(
+ title = stringResource(R.string.about_github_project),
+ subtitle = stringResource(R.string.about_github_source_code),
+ icon = ImageVector.vectorResource(R.drawable.ic_github_24dp),
+ onClick = { uriHandler.openUri(GITHUB_REPOSITORY) }
+ )
+ AboutSectionBox(
+ title = stringResource(R.string.weblate),
+ subtitle = stringResource(R.string.help_translate),
+ icon = ImageVector.vectorResource(R.drawable.ic_weblate),
+ onClick = { uriHandler.openUri(WEBLATE_ENGAGE) }
+ )
+ AboutSectionBox(
+ title = stringResource(R.string.telegram),
+ subtitle = stringResource(R.string.telegram_link),
+ icon = Icons.Rounded.ExteraGram,
+ onClick = { uriHandler.openUri(TELEGRAM_CHANNEL) }
+ )
+ AboutSectionBox(
+ title = stringResource(R.string.libraries_licenses),
+ subtitle = stringResource(R.string.libraries_licenses_title),
+ icon = Icons.Outlined.Info,
+ onClick = { navigator.navigate(AboutLibrariesScreenDestination()) }
+ )
+ }
- val uriHandler = LocalUriHandler.current
- PreferenceRow(
- title = stringResource(R.string.about_github_project),
- painter = painterResource(R.drawable.ic_github_24dp),
- onClick = {
- uriHandler.openUri("https://github.com/kaajjo/Libre-Sudoku")
+ Box(
+ modifier = Modifier
+ .padding(horizontal = 12.dp)
+ .clip(MaterialTheme.shapes.large)
+ .background(MaterialTheme.colorScheme.surfaceContainer)
+ .fillMaxWidth()
+ ) {
+ Column(
+ modifier = Modifier
+ .padding(vertical = 12.dp, horizontal = 8.dp)
+ ) {
+ Row(
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ Spacer(modifier = Modifier.width(4.dp))
+ Icon(
+ imageVector = Icons.Rounded.Payments,
+ contentDescription = null
+ )
+ Spacer(modifier = Modifier.width(8.dp))
+ Text(
+ text = stringResource(R.string.donation_title),
+ style = MaterialTheme.typography.titleMedium
+ )
+ }
+ Column(
+ modifier = Modifier
+ .padding(top = 4.dp)
+ .clip(MaterialTheme.shapes.medium)
+ .background(MaterialTheme.colorScheme.surfaceColorAtElevation(7.dp))
+ ) {
+ Text(
+ text = stringResource(R.string.donation_description),
+ style = MaterialTheme.typography.labelMedium,
+ modifier = Modifier.padding(8.dp)
+ )
+ }
+ Spacer(modifier = Modifier.height(8.dp))
+ Column(
+ verticalArrangement = Arrangement.spacedBy(8.dp)
+ ) {
+ DonationItem(
+ title = stringResource(R.string.crypto_bitcoin),
+ information = CRYPTO_BTC,
+ icon = Icons.Filled.Bitcoin,
+ onClick = { clipboardManager.setText(AnnotatedString(text = CRYPTO_BTC)) }
+ )
+ DonationItem(
+ title = stringResource(R.string.crypto_ton),
+ information = CRYPTO_TON,
+ icon = Icons.Rounded.Ton,
+ onClick = { clipboardManager.setText(AnnotatedString(text = CRYPTO_TON)) }
+ )
+ DonationItem(
+ title = stringResource(R.string.crypto_usdt),
+ information = CRYPTO_USDT_TRC20,
+ icon = Icons.Rounded.Usdt,
+ onClick = { clipboardManager.setText(AnnotatedString(text = CRYPTO_USDT_TRC20)) }
+ )
+ DonationItem(
+ title = stringResource(R.string.card_mir),
+ information = CARD_MIR,
+ icon = Icons.Filled.Mir,
+ onClick = { clipboardManager.setText(AnnotatedString(text = CARD_MIR.filter { it != ' ' })) }
+ )
+ }
}
- )
+ }
+ }
+ }
+}
- PreferenceRow(
- title = stringResource(R.string.help_translate),
- painter = painterResource(R.drawable.ic_weblate),
- onClick = {
- uriHandler.openUri("https://hosted.weblate.org/engage/libresudoku/")
- }
- )
- PreferenceRow(
- title = stringResource(R.string.libraries_licenses_title),
- painter = painterResource(R.drawable.ic_outline_info_24),
- onClick = { navigator.navigate(AboutLibrariesScreenDestination()) }
+@OptIn(ExperimentalLayoutApi::class)
+@Composable
+fun FlowRowScope.AboutSectionBox(
+ title: String,
+ icon: ImageVector,
+ onClick: () -> Unit,
+ modifier: Modifier = Modifier,
+ subtitle: String? = null,
+ additionalContent: @Composable (ColumnScope.() -> Unit)? = null
+) {
+ Box(
+ modifier = modifier
+ .clip(MaterialTheme.shapes.large)
+ .background(MaterialTheme.colorScheme.surfaceContainer)
+ .fillMaxRowHeight()
+ .weight(1f)
+ .clickable(onClick = onClick)
+ ) {
+ Column(
+ modifier = Modifier.padding(16.dp)
+ ) {
+ Row(
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ Icon(
+ imageVector = icon,
+ contentDescription = null,
+ tint = MaterialTheme.colorScheme.onSurface.harmonizeWithPrimary(),
+ modifier = Modifier.size(24.dp)
+ )
+ Spacer(modifier = Modifier.width(8.dp))
+ Text(
+ text = title,
+ style = MaterialTheme.typography.titleLarge
+ )
+ }
+ if (subtitle != null) {
+ Spacer(modifier = Modifier.height(12.dp))
+ Text(
+ text = subtitle
+ )
+ }
+ if (additionalContent != null) {
+ additionalContent()
+ }
+ }
+ }
+}
+
+@Composable
+fun DonationItem(
+ title: String,
+ information: String,
+ icon: ImageVector,
+ onClick: () -> Unit,
+ modifier: Modifier = Modifier
+) {
+ Row(
+ modifier = modifier
+ .clip(MaterialTheme.shapes.medium)
+ .background(MaterialTheme.colorScheme.surfaceContainerHighest.harmonizeWithPrimary())
+ .fillMaxWidth()
+ .clickable(onClick = onClick)
+ .padding(start = 12.dp, top = 8.dp, bottom = 8.dp),
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.SpaceBetween
+ ) {
+
+ Row(
+ modifier = Modifier.weight(1f),
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ Icon(
+ imageVector = icon,
+ contentDescription = null
+ )
+ Spacer(modifier = Modifier.width(8.dp))
+ Column {
+ Text(
+ text = title,
+ style = MaterialTheme.typography.labelLarge
+ )
+ Text(
+ text = information,
+ style = MaterialTheme.typography.bodySmall
+ )
+ }
+ }
+ IconButton(onClick = onClick) {
+ Icon(
+ imageVector = Icons.Rounded.ContentCopy,
+ contentDescription = null
)
}
}
diff --git a/app/src/main/java/com/kaajjo/libresudoku/ui/theme/icons/Bitcoin.kt b/app/src/main/java/com/kaajjo/libresudoku/ui/theme/icons/Bitcoin.kt
new file mode 100644
index 00000000..9e33f100
--- /dev/null
+++ b/app/src/main/java/com/kaajjo/libresudoku/ui/theme/icons/Bitcoin.kt
@@ -0,0 +1,12 @@
+package com.kaajjo.libresudoku.ui.theme.icons
+
+import androidx.compose.material.icons.Icons
+import com.kaajjo.libresudoku.ui.util.iconFromXmlPath
+
+val Icons.Filled.Bitcoin by lazy {
+ iconFromXmlPath(
+ pathStr = "M11.5 11.5v-2.5c1.75 0 2.789.25 2.789 1.25 0 1.172-1.684 1.25-2.789 1.25zm0 .997v2.503c1.984 0 3.344-.188 3.344-1.258 0-1.148-1.469-1.245-3.344-1.245zm12.5-.497c0 6.627-5.373 12-12 12s-12-5.373-12-12 5.373-12 12-12 12 5.373 12 12zm-7 1.592c0-1.279-1.039-1.834-1.789-2.025.617-.223 1.336-1.138 1.046-2.228-.245-.922-1.099-1.74-3.257-1.813v-1.526h-1v1.5h-.5v-1.5h-1v1.5h-2.5v1.5h.817c.441 0 .683.286.683.702v4.444c0 .429-.253.854-.695.854h-.539l-.25 1.489h2.484v1.511h1v-1.511h.5v1.511h1v-1.5c2.656 0 4-1.167 4-2.908z",
+ viewportHeight = 24f,
+ viewportWidth = 24f
+ )
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/kaajjo/libresudoku/ui/theme/icons/ExteraGram.kt b/app/src/main/java/com/kaajjo/libresudoku/ui/theme/icons/ExteraGram.kt
new file mode 100644
index 00000000..98ebde0c
--- /dev/null
+++ b/app/src/main/java/com/kaajjo/libresudoku/ui/theme/icons/ExteraGram.kt
@@ -0,0 +1,12 @@
+package com.kaajjo.libresudoku.ui.theme.icons
+
+import androidx.compose.material.icons.Icons
+import com.kaajjo.libresudoku.ui.util.iconFromXmlPath
+
+val Icons.Rounded.ExteraGram by lazy {
+ iconFromXmlPath(
+ pathStr = "M 31.2 2.5 c 2.8 -0.9 4.5 0.6 3.6 3.4 c -2.3 7.1 -6.7 20.1 -9.5 28.2 c -0.7 2.1 -4.1 2.1 -5 0 c -1.5 -3.6 -3.6 -7.8 -6.6 -10.8 c -2.8 -2.9 -6.8 -5 -10.3 -6.5 c -2.1 -0.9 -2.2 -4.5 0 -5.2 l 27.7 -9.1 Z",
+ viewportHeight = 36f,
+ viewportWidth = 36f
+ )
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/kaajjo/libresudoku/ui/theme/icons/LibreSudokuAlt.kt b/app/src/main/java/com/kaajjo/libresudoku/ui/theme/icons/LibreSudokuAlt.kt
new file mode 100644
index 00000000..5f4d2e15
--- /dev/null
+++ b/app/src/main/java/com/kaajjo/libresudoku/ui/theme/icons/LibreSudokuAlt.kt
@@ -0,0 +1,16 @@
+package com.kaajjo.libresudoku.ui.theme.icons
+
+import androidx.compose.material.icons.Icons
+import androidx.compose.ui.graphics.Color
+import com.kaajjo.libresudoku.ui.util.iconFromXmlPath
+
+val Icons.Rounded.LibreSudokuIconAlt by lazy {
+ iconFromXmlPath(
+ pathStr = """
+ M 40 0 h 1.9 v 60 h -1.9 z M 20 0 h 1.9 v 60 h -1.9 z M 0 20 l 0 -2 l 60 0 l 0 2 z M 0 40 l 0 -2 l 60 0 l 0 2 z
+ """.trimIndent(),
+ viewportWidth = 60f,
+ viewportHeight = 60f,
+ fillColor = Color(0xFFC0C0C0.toInt())
+ )
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/kaajjo/libresudoku/ui/theme/icons/Mir.kt b/app/src/main/java/com/kaajjo/libresudoku/ui/theme/icons/Mir.kt
new file mode 100644
index 00000000..cae9317c
--- /dev/null
+++ b/app/src/main/java/com/kaajjo/libresudoku/ui/theme/icons/Mir.kt
@@ -0,0 +1,16 @@
+package com.kaajjo.libresudoku.ui.theme.icons
+
+import androidx.compose.material.icons.Icons
+import androidx.compose.ui.unit.dp
+import com.kaajjo.libresudoku.ui.util.iconFromXmlPath
+
+
+val Icons.Filled.Mir by lazy {
+ iconFromXmlPath(
+ pathStr = "M 22.2 0 h -21 C 0.6 0 0 0.6 0 1.3 v 12.5 c 0 0.7 0.6 1.3 1.3 1.3 h 21 c 0.7 0 1.3 -0.6 1.3 -1.3 V 1.3 C 23.5 0.6 22.9 0 22.2 0 z M 8.7 10.4 h -1.8 v -3.4 c 0 0 0 0 0 0 c 0 -0.1 -0.1 -0.1 -0.1 -0.1 c -0.1 0 -0.1 0 -0.1 0.1 l -1.1 3.4 H 4.3 L 3.3 7 c -0 -0.1 -0.1 -0.1 -0.1 -0.1 c -0.1 0 -0.1 0.1 -0.1 0.1 c 0 0 0 0 0 0 l 0 3.4 h -1.8 v -5.9 h 1.5 H 3.3 c 0.3 0 0.7 0.3 0.8 0.6 l 0.9 2.9 c 0 0.1 0.1 0.1 0.2 0 l 0.9 -2.9 c 0.1 -0.3 0.4 -0.6 0.8 -0.6 h 0.5 h 1.5 V 10.4 z M 15.4 10.4 h -1.8 V 6.9 l 0 0 c -0 -0.1 -0 -0.1 -0.1 -0.1 c -0 0 -0.1 0 -0.1 0.1 l 0 0 l 0 0 c 0 0 -0 0 -0 0 l -1.5 3.2 c -0.1 0.2 -0.3 0.4 -0.6 0.4 v 0 h -1.8 v -5.9 h 1.8 v 3.4 c 0 0.1 0.1 0.1 0.1 0.1 c 0 0 0.1 -0 0.1 -0.1 l 0 0 l 0 0 c 0 -0 0 -0 0 -0 l 1.4 -3.1 c 0.1 -0.2 0.4 -0.4 0.6 -0.4 h 1.8 V 10.4 z M 20.2 8.5 h -2 v 1.9 h -1.8 v -3.2 h 5.7 C 21.8 8 21 8.5 20.2 8.5 z M 22.1 6.9 c 0 0 -3.1 0 -3.1 0 c -1.5 0 -2.8 -1 -2.9 -2.4 l 4.1 0 c 1.1 0 2 0.9 2 2 C 22.1 6.7 22.1 6.8 22.1 6.9 z",
+ viewportWidth = 24f,
+ viewportHeight = 15f,
+ defaultHeight = 15.dp,
+ defaultWidth = 24.dp
+ )
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/kaajjo/libresudoku/ui/theme/icons/Ton.kt b/app/src/main/java/com/kaajjo/libresudoku/ui/theme/icons/Ton.kt
new file mode 100644
index 00000000..824d504d
--- /dev/null
+++ b/app/src/main/java/com/kaajjo/libresudoku/ui/theme/icons/Ton.kt
@@ -0,0 +1,12 @@
+package com.kaajjo.libresudoku.ui.theme.icons
+
+import androidx.compose.material.icons.Icons
+import com.kaajjo.libresudoku.ui.util.iconFromXmlPath
+
+val Icons.Rounded.Ton by lazy {
+ iconFromXmlPath(
+ pathStr = "M24.56 0.628H5.439C1.923 0.628 -0.306 4.42 1.463 7.486L13.264 27.941C14.035 29.277 15.964 29.277 16.735 27.941L28.538 7.486C30.304 4.425 28.076 0.628 24.563 0.628H24.56ZM13.255 21.807L10.685 16.833L4.483 5.741C4.074 5.032 4.579 4.122 5.436 4.122H13.252V21.809L13.255 21.807ZM25.511 5.739L19.312 16.835L16.742 21.807V4.119H24.558C25.415 4.119 25.92 5.029 25.511 5.739Z",
+ viewportWidth = 30f,
+ viewportHeight = 30f
+ )
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/kaajjo/libresudoku/ui/theme/icons/Usdt.kt b/app/src/main/java/com/kaajjo/libresudoku/ui/theme/icons/Usdt.kt
new file mode 100644
index 00000000..da4719b7
--- /dev/null
+++ b/app/src/main/java/com/kaajjo/libresudoku/ui/theme/icons/Usdt.kt
@@ -0,0 +1,12 @@
+package com.kaajjo.libresudoku.ui.theme.icons
+
+import androidx.compose.material.icons.Icons
+import com.kaajjo.libresudoku.ui.util.iconFromXmlPath
+
+val Icons.Rounded.Usdt by lazy {
+ iconFromXmlPath(
+ pathStr = "M 10.417969 5 L 2.0820312 22.949219 L 25 45 L 47.917969 22.949219 L 39.582031 5 L 10.417969 5 z M 12.957031 10.042969 L 36.957031 10.042969 L 37 16 L 28 16 L 28 19.490234 C 36.125 19.874234 39.582031 21.046969 39.582031 22.542969 C 39.582031 24.037969 34.551 25.694 28 26 L 28 37 L 22 37 L 22 26 C 15.449 25.694 10.417969 24.037969 10.417969 22.542969 C 10.417969 21.046969 13.875 19.749234 22 19.490234 L 22 16 L 13 16 L 12.957031 10.042969 z M 22 20.375 C 16.611 20.635 13 21.283 13 22.375 C 13 23.67 18.097 24.625 25 24.625 C 31.903 24.625 37 23.545 37 22.25 C 37 21.158 33.389 20.76 28 20.5 L 28 23 C 27 23.063 26.083 23.082031 25 23.082031 C 23.917 23.082031 23 23.062 22 23 L 22 20.375 z",
+ viewportWidth = 48f,
+ viewportHeight = 48f
+ )
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/kaajjo/libresudoku/ui/util/IconFromXmlPath.kt b/app/src/main/java/com/kaajjo/libresudoku/ui/util/IconFromXmlPath.kt
new file mode 100644
index 00000000..d40e9d93
--- /dev/null
+++ b/app/src/main/java/com/kaajjo/libresudoku/ui/util/IconFromXmlPath.kt
@@ -0,0 +1,36 @@
+package com.kaajjo.libresudoku.ui.util
+
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.SolidColor
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.addPathNodes
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+
+
+fun iconFromXmlPath(
+ pathStr: String,
+ viewportWidth: Float = 24f,
+ viewportHeight: Float = 24f,
+ defaultWidth: Dp = 24.dp,
+ defaultHeight: Dp = 24.dp,
+ fillColor: Color = Color.White,
+): ImageVector {
+ val fillBrush = SolidColor(fillColor)
+ val strokeBrush = SolidColor(fillColor)
+
+ return ImageVector.Builder(
+ defaultWidth = defaultWidth,
+ defaultHeight = defaultHeight,
+ viewportWidth = viewportWidth,
+ viewportHeight = viewportHeight,
+ ).run {
+ addPath(
+ pathData = addPathNodes(pathStr),
+ name = "",
+ fill = fillBrush,
+ stroke = strokeBrush,
+ )
+ build()
+ }
+}
diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml
index 85cd488c..89bf4ea3 100644
--- a/app/src/main/res/values-ru-rRU/strings.xml
+++ b/app/src/main/res/values-ru-rRU/strings.xml
@@ -71,7 +71,8 @@
Сбросить все тип карточки
Тип карточки сброшены!
Версия
- Проект на GitHub
+ GitHub
+ Исходный код GitHub
Сдаться
Начать заново
Да
@@ -169,7 +170,8 @@
Скрытые пары
Скрытые пары это почти то же самое, что и голые пары, только с одним отличием, они скрыты среди других. Эти две клетки имеют кое-что общее, а именно, в них могут стоять цифры 6 и 9, и это единственные две клетки в этом блоке, где они могут стоять
Из этого можно сделать вывод, что эти две клетки будут содержать именно эти две цифры, и никакие другие. Так что, мы можем убрать ненужные заметки из этих клеток. Как и с голыми парами, это точно также работает со строками и столбцами
- Open Source лицензии
+ Лицензии
+ Лицензии открытого ПО
Можно продолжить
Показать свое
Кастомное судоку
@@ -202,6 +204,7 @@
ID
Сортировка
Фильтр
+ Weblate
Помочь с переводом
Создать папку
Удалить папку
@@ -340,4 +343,13 @@
- Последние %1$d игр
- Последние %1$d игр
+
+ Telegram
+ Присоединяйтесь в Telegram
+ Пожертвование
+ Это приложение бесплатно и без реклам навсегда. Вы моежет поддержать меня ниже
+ Bitcoin
+ TON
+ USDT (TRC20)
+ MIR
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 22c27dee..51fb8bd8 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -76,7 +76,8 @@
App language
Default
Version
- Project on GitHub
+ GitHub
+ Source code on GitHub
Give up
Reset the game
Yes
@@ -172,6 +173,7 @@
Previous
Next
--
+ Licenses
Open Source Licenses
Can continue
Custom sudoku
@@ -204,6 +206,7 @@
ID
Sort
Filter
+ Weblate
Help translate
Folders
Create a folder
@@ -338,4 +341,13 @@
- Last %1$d game
- Last %1$d games
+
+ Telegram
+ Join us on Telegram
+ Donation
+ This app is free and ad-free forever. You can support me below
+ Bitcoin
+ TON
+ USDT (TRC20)
+ MIR
\ No newline at end of file