From 8d09dc01c31317bd3b9e415403c2a15435adb72c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Thu, 9 Jul 2026 13:25:11 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=96=BC=EF=B8=8F=20opencollective/liberapa?= =?UTF-8?q?y/bitcoin/litecoin=20icons?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This adds colorful icons to the donation section on the AppDetails composable. --- .../org/fdroid/ui/details/AppDetails.kt | 36 ++++++------ .../org/fdroid/ui/details/AppDetailsLink.kt | 21 ++++++- .../kotlin/org/fdroid/ui/icons/Litecoin.kt | 56 ------------------- .../main/res/drawable/ic_donation_bitcoin.xml | 14 +++++ .../res/drawable/ic_donation_liberapay.xml | 7 +++ .../res/drawable/ic_donation_litecoin.xml | 16 ++++++ .../drawable/ic_donation_opencollective.xml | 7 +++ .../DetailsInstallTest_9f4e7551_0.png | 4 +- .../DetailsNightTest_150baa59_0.png | 4 +- .../DetailsTestKt/DetailsTest_9f4e7551_0.png | 4 +- 10 files changed, 88 insertions(+), 81 deletions(-) delete mode 100644 app/src/main/kotlin/org/fdroid/ui/icons/Litecoin.kt create mode 100644 app/src/main/res/drawable/ic_donation_bitcoin.xml create mode 100644 app/src/main/res/drawable/ic_donation_liberapay.xml create mode 100644 app/src/main/res/drawable/ic_donation_litecoin.xml create mode 100644 app/src/main/res/drawable/ic_donation_opencollective.xml diff --git a/app/src/main/kotlin/org/fdroid/ui/details/AppDetails.kt b/app/src/main/kotlin/org/fdroid/ui/details/AppDetails.kt index b12358f50..0c0ad58d5 100644 --- a/app/src/main/kotlin/org/fdroid/ui/details/AppDetails.kt +++ b/app/src/main/kotlin/org/fdroid/ui/details/AppDetails.kt @@ -10,6 +10,7 @@ import androidx.compose.foundation.layout.calculateStartPadding 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.text.selection.SelectionContainer import androidx.compose.foundation.verticalScroll @@ -19,7 +20,6 @@ import androidx.compose.material.icons.filled.ChangeHistory import androidx.compose.material.icons.filled.Code import androidx.compose.material.icons.filled.CurrencyBitcoin import androidx.compose.material.icons.filled.EditNote -import androidx.compose.material.icons.filled.Groups import androidx.compose.material.icons.filled.Home import androidx.compose.material.icons.filled.Link import androidx.compose.material.icons.filled.Mail @@ -52,6 +52,7 @@ import androidx.compose.ui.graphics.vector.rememberVectorPainter import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalLayoutDirection +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.LiveRegionMode import androidx.compose.ui.semantics.liveRegion @@ -81,7 +82,6 @@ import org.fdroid.R import org.fdroid.install.InstallState import org.fdroid.ui.FDroidContent import org.fdroid.ui.icons.License -import org.fdroid.ui.icons.Litecoin import org.fdroid.ui.lists.AppListType import org.fdroid.ui.navigation.NavigationKey import org.fdroid.ui.utils.BigLoadingIndicator @@ -275,7 +275,7 @@ fun AppDetails( ) item.app.donate?.forEach { donation -> AppDetailsLink( - icon = Icons.Default.Link, + icon = rememberVectorPainter(Icons.Default.Link), title = donation, url = donation, modifier = Modifier.padding(horizontal = 16.dp).padding(bottom = 8.dp), @@ -283,7 +283,8 @@ fun AppDetails( } item.liberapayUri?.let { liberapayUri -> AppDetailsLink( - icon = Icons.Default.ChangeHistory, + icon = painterResource(id = R.drawable.ic_donation_liberapay), + disableTinting = true, title = "Liberapay", url = liberapayUri, modifier = Modifier.padding(horizontal = 16.dp).padding(bottom = 8.dp), @@ -291,7 +292,8 @@ fun AppDetails( } item.openCollectiveUri?.let { openCollectiveUri -> AppDetailsLink( - icon = Icons.Default.Groups, + icon = painterResource(id = R.drawable.ic_donation_opencollective), + disableTinting = true, title = "Open Collective", url = openCollectiveUri, modifier = Modifier.padding(horizontal = 16.dp).padding(bottom = 8.dp), @@ -299,7 +301,8 @@ fun AppDetails( } item.bitcoinUri?.let { bitcoinUri -> AppDetailsLink( - icon = Icons.Default.CurrencyBitcoin, + icon = painterResource(id = R.drawable.ic_donation_bitcoin), + disableTinting = true, title = stringResource(R.string.menu_bitcoin), url = bitcoinUri, modifier = Modifier.padding(horizontal = 16.dp).padding(bottom = 8.dp), @@ -307,7 +310,8 @@ fun AppDetails( } item.litecoinUri?.let { litecoinUri -> AppDetailsLink( - icon = Litecoin, + icon = painterResource(id = R.drawable.ic_donation_litecoin), + disableTinting = true, title = stringResource(R.string.menu_litecoin), url = litecoinUri, modifier = Modifier.padding(horizontal = 16.dp).padding(bottom = 8.dp), @@ -323,49 +327,49 @@ fun AppDetails( Column(modifier = Modifier.padding(start = 16.dp)) { item.app.webSite?.let { webSite -> AppDetailsLink( - icon = Icons.Default.Home, + icon = rememberVectorPainter(Icons.Default.Home), title = stringResource(R.string.menu_website), url = webSite, ) } item.app.issueTracker?.let { issueTracker -> AppDetailsLink( - icon = Icons.Default.EditNote, + icon = rememberVectorPainter(Icons.Default.EditNote), title = stringResource(R.string.menu_issues), url = issueTracker, ) } item.app.changelog?.let { changelog -> AppDetailsLink( - icon = Icons.Default.ChangeHistory, + icon = rememberVectorPainter(Icons.Default.ChangeHistory), title = stringResource(R.string.menu_changelog), url = changelog, ) } item.app.license?.let { license -> AppDetailsLink( - icon = License, + icon = rememberVectorPainter(License), title = stringResource(R.string.menu_license, license), url = "https://spdx.org/licenses/$license", ) } item.app.translation?.let { translation -> AppDetailsLink( - icon = Icons.Default.Translate, + icon = rememberVectorPainter(Icons.Default.Translate), title = stringResource(R.string.menu_translation), url = translation, ) } item.app.sourceCode?.let { sourceCode -> AppDetailsLink( - icon = Icons.Default.Code, + icon = rememberVectorPainter(Icons.Default.Code), title = stringResource(R.string.menu_source), url = sourceCode, ) } item.app.video?.getBestLocale(LocaleListCompat.getDefault())?.let { video -> AppDetailsLink( - icon = Icons.Default.OndemandVideo, + icon = rememberVectorPainter(Icons.Default.OndemandVideo), title = stringResource(R.string.menu_video), url = video, ) @@ -386,14 +390,14 @@ fun AppDetails( Column(modifier = Modifier.padding(start = 16.dp)) { item.app.authorWebSite?.let { authorWebSite -> AppDetailsLink( - icon = Icons.Default.Home, + icon = rememberVectorPainter(Icons.Default.Home), title = stringResource(R.string.menu_website), url = authorWebSite, ) } item.app.authorEmail?.let { authorEmail -> AppDetailsLink( - icon = Icons.Default.Mail, + icon = rememberVectorPainter(Icons.Default.Mail), title = stringResource(R.string.menu_email), url = authorEmail, ) diff --git a/app/src/main/kotlin/org/fdroid/ui/details/AppDetailsLink.kt b/app/src/main/kotlin/org/fdroid/ui/details/AppDetailsLink.kt index ec62d4fa9..d9768ce0b 100644 --- a/app/src/main/kotlin/org/fdroid/ui/details/AppDetailsLink.kt +++ b/app/src/main/kotlin/org/fdroid/ui/details/AppDetailsLink.kt @@ -6,13 +6,16 @@ import androidx.compose.foundation.layout.Arrangement.spacedBy import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.size import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.ClipEntry import androidx.compose.ui.platform.LocalClipboard @@ -25,7 +28,13 @@ import org.fdroid.R import org.fdroid.ui.utils.openUriSafe @Composable -fun AppDetailsLink(icon: ImageVector, title: String, url: String, modifier: Modifier = Modifier) { +fun AppDetailsLink( + icon: Painter, + title: String, + url: String, + disableTinting: Boolean = false, + modifier: Modifier = Modifier) +{ val uriHandler = LocalUriHandler.current val haptics = LocalHapticFeedback.current val clipboardManager = LocalClipboard.current @@ -47,7 +56,13 @@ fun AppDetailsLink(icon: ImageVector, title: String, url: String, modifier: Modi onLongClickLabel = stringResource(R.string.copy_link), ), ) { - Icon(icon, null) + Icon( + icon, + null, + // don't tint colorful icons (e.g. for donation options) + tint = if (disableTinting) Color.Unspecified else LocalContentColor.current, + modifier = Modifier.size(24.dp) + ) Text(title) } } diff --git a/app/src/main/kotlin/org/fdroid/ui/icons/Litecoin.kt b/app/src/main/kotlin/org/fdroid/ui/icons/Litecoin.kt deleted file mode 100644 index 29a5abe96..000000000 --- a/app/src/main/kotlin/org/fdroid/ui/icons/Litecoin.kt +++ /dev/null @@ -1,56 +0,0 @@ -package org.fdroid.ui.icons - -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.path -import androidx.compose.ui.unit.dp - -val Litecoin: ImageVector - get() { - if (_Litecoin != null) return _Litecoin!! - - _Litecoin = - ImageVector.Builder( - name = "litecoin", - defaultWidth = 24.dp, - defaultHeight = 24.dp, - viewportWidth = 24f, - viewportHeight = 24f, - ) - .apply { - path(fill = SolidColor(Color(0xFF000000))) {} - path(fill = SolidColor(Color(0xFF000000))) {} - path(fill = SolidColor(Color(0xFF000000))) { - moveTo(12f, 1f) - arcTo(11f, 11f, 0f, true, false, 23f, 12f) - arcTo(11f, 11f, 0f, false, false, 12f, 1f) - close() - moveToRelative(0.178277f, 11.361877f) - lineToRelative(-1.14417f, 3.860909f) - horizontalLineToRelative(6.119981f) - arcToRelative(0.31398162f, 0.31398162f, 0f, false, true, 0.300677f, 0.401791f) - lineToRelative(-0.532172f, 1.833333f) - arcToRelative(0.42041606f, 0.42041606f, 0f, false, true, -0.404451f, 0.303339f) - horizontalLineTo(7.170537f) - lineTo(8.7510885f, 13.423561f) - lineTo(7.0029028f, 13.955733f) - lineTo(7.3887276f, 12.707789f) - lineTo(9.1395743f, 12.175616f) - lineTo(11.358733f, 4.6773101f) - arcToRelative(0.4177552f, 0.4177552f, 0f, false, true, 0.401789f, -0.305999f) - horizontalLineToRelative(2.368167f) - arcToRelative(0.31398162f, 0.31398162f, 0f, false, true, 0.303338f, 0.3991292f) - lineTo(12.569424f, 11.111273f) - lineTo(14.31761f, 10.5791f) - lineTo(13.942429f, 11.848331f) - close() - } - path(fill = SolidColor(Color(0xFF000000))) {} - } - .build() - - return _Litecoin!! - } - -private var _Litecoin: ImageVector? = null diff --git a/app/src/main/res/drawable/ic_donation_bitcoin.xml b/app/src/main/res/drawable/ic_donation_bitcoin.xml new file mode 100644 index 000000000..9444e8476 --- /dev/null +++ b/app/src/main/res/drawable/ic_donation_bitcoin.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/ic_donation_liberapay.xml b/app/src/main/res/drawable/ic_donation_liberapay.xml new file mode 100644 index 000000000..7241d287e --- /dev/null +++ b/app/src/main/res/drawable/ic_donation_liberapay.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/drawable/ic_donation_litecoin.xml b/app/src/main/res/drawable/ic_donation_litecoin.xml new file mode 100644 index 000000000..347180737 --- /dev/null +++ b/app/src/main/res/drawable/ic_donation_litecoin.xml @@ -0,0 +1,16 @@ + + + + diff --git a/app/src/main/res/drawable/ic_donation_opencollective.xml b/app/src/main/res/drawable/ic_donation_opencollective.xml new file mode 100644 index 000000000..bdefc8282 --- /dev/null +++ b/app/src/main/res/drawable/ic_donation_opencollective.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/screenshotTestBasicDefaultDebug/reference/org/fdroid/ui/details/DetailsTestKt/DetailsInstallTest_9f4e7551_0.png b/app/src/screenshotTestBasicDefaultDebug/reference/org/fdroid/ui/details/DetailsTestKt/DetailsInstallTest_9f4e7551_0.png index 7b1fd9083..693332f97 100644 --- a/app/src/screenshotTestBasicDefaultDebug/reference/org/fdroid/ui/details/DetailsTestKt/DetailsInstallTest_9f4e7551_0.png +++ b/app/src/screenshotTestBasicDefaultDebug/reference/org/fdroid/ui/details/DetailsTestKt/DetailsInstallTest_9f4e7551_0.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:61b512fa575daefef96994eceface3e57215fc98fbdf87259cec391396dcc5ab -size 280535 +oid sha256:7db37b028cf9bb47933add41a7662b700e0146344ab793b8257827b86c94b5b1 +size 283496 diff --git a/app/src/screenshotTestBasicDefaultDebug/reference/org/fdroid/ui/details/DetailsTestKt/DetailsNightTest_150baa59_0.png b/app/src/screenshotTestBasicDefaultDebug/reference/org/fdroid/ui/details/DetailsTestKt/DetailsNightTest_150baa59_0.png index e592e2165..194f35ee3 100644 --- a/app/src/screenshotTestBasicDefaultDebug/reference/org/fdroid/ui/details/DetailsTestKt/DetailsNightTest_150baa59_0.png +++ b/app/src/screenshotTestBasicDefaultDebug/reference/org/fdroid/ui/details/DetailsTestKt/DetailsNightTest_150baa59_0.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1ad1f6d63b7faee4f29430de1017a884a6c80fa39a8feea0ab269db5d4acc5d1 -size 346754 +oid sha256:cd399ae999c2a0cd9b048b1b7b79d78eea6cc673c25053440c6eda9215239b35 +size 349703 diff --git a/app/src/screenshotTestBasicDefaultDebug/reference/org/fdroid/ui/details/DetailsTestKt/DetailsTest_9f4e7551_0.png b/app/src/screenshotTestBasicDefaultDebug/reference/org/fdroid/ui/details/DetailsTestKt/DetailsTest_9f4e7551_0.png index 095d4af6f..7173e4ac3 100644 --- a/app/src/screenshotTestBasicDefaultDebug/reference/org/fdroid/ui/details/DetailsTestKt/DetailsTest_9f4e7551_0.png +++ b/app/src/screenshotTestBasicDefaultDebug/reference/org/fdroid/ui/details/DetailsTestKt/DetailsTest_9f4e7551_0.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b1ade7881aaf578b91be6a14202ce9d206f9aaacd0ad51763d71d4c5b10896d3 -size 328351 +oid sha256:a0f6881da35cec7bcd9de4e6477a9bd0179c5c8675b17dfc13eed8dbd2fd2861 +size 331438