compose: Pass painter instead of drawables

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2025-10-25 14:05:04 +08:00
parent 51b9c08d25
commit 0251b00792
17 changed files with 43 additions and 43 deletions

View File

@@ -29,7 +29,7 @@ import com.aurora.store.R
/** /**
* Composable to show error message when no apps are available for a request * Composable to show error message when no apps are available for a request
* @param modifier The modifier to be applied to the composable * @param modifier The modifier to be applied to the composable
* @param icon Drawable for error * @param painter Painter to draw the icon
* @param message Message for error * @param message Message for error
* @param actionMessage Message to show on action button; defaults to null with button not visible * @param actionMessage Message to show on action button; defaults to null with button not visible
* @param onAction Callback when action button is clicked * @param onAction Callback when action button is clicked
@@ -37,7 +37,7 @@ import com.aurora.store.R
@Composable @Composable
fun ErrorComposable( fun ErrorComposable(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
icon: Painter, painter: Painter,
message: String, message: String,
actionMessage: String? = null, actionMessage: String? = null,
onAction: () -> Unit = {} onAction: () -> Unit = {}
@@ -53,7 +53,7 @@ fun ErrorComposable(
horizontalAlignment = Alignment.CenterHorizontally horizontalAlignment = Alignment.CenterHorizontally
) { ) {
Icon( Icon(
painter = icon, painter = painter,
contentDescription = null, contentDescription = null,
modifier = Modifier.requiredSize(dimensionResource(R.dimen.icon_size)) modifier = Modifier.requiredSize(dimensionResource(R.dimen.icon_size))
) )
@@ -79,7 +79,7 @@ fun ErrorComposable(
@Composable @Composable
private fun ErrorComposablePreview() { private fun ErrorComposablePreview() {
ErrorComposable( ErrorComposable(
icon = painterResource(R.drawable.ic_updates), painter = painterResource(R.drawable.ic_updates),
message = stringResource(R.string.details_no_updates), message = stringResource(R.string.details_no_updates),
actionMessage = stringResource(R.string.check_updates) actionMessage = stringResource(R.string.check_updates)
) )

View File

@@ -5,7 +5,6 @@
package com.aurora.store.compose.composables package com.aurora.store.compose.composables
import androidx.annotation.DrawableRes
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
@@ -18,6 +17,7 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@@ -35,7 +35,7 @@ import com.aurora.store.compose.preview.AppPreviewProvider
* @param modifier The modifier to be applied to the composable * @param modifier The modifier to be applied to the composable
* @param title Title of the information * @param title Title of the information
* @param description Information to show * @param description Information to show
* @param icon Optional icon representing the information * @param painter Optional painter to draw the icon
* @param onClick Callback when this composable is clicked * @param onClick Callback when this composable is clicked
*/ */
@Composable @Composable
@@ -43,7 +43,7 @@ fun InfoComposable(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
title: AnnotatedString, title: AnnotatedString,
description: AnnotatedString? = null, description: AnnotatedString? = null,
@DrawableRes icon: Int? = null, painter: Painter? = null,
onClick: (() -> Unit)? = null onClick: (() -> Unit)? = null
) { ) {
Row( Row(
@@ -57,7 +57,7 @@ fun InfoComposable(
horizontalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_normal)), horizontalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_normal)),
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
if (icon != null) Icon(painter = painterResource(icon), contentDescription = null) if (painter != null) Icon(painter = painter, contentDescription = null)
Column(modifier = Modifier.weight(1F)) { Column(modifier = Modifier.weight(1F)) {
Text( Text(
text = title, text = title,
@@ -82,6 +82,6 @@ private fun InfoComposablePreview(@PreviewParameter(AppPreviewProvider::class) a
InfoComposable( InfoComposable(
title = AnnotatedString(text = stringResource(R.string.details_dev_website)), title = AnnotatedString(text = stringResource(R.string.details_dev_website)),
description = AnnotatedString.fromHtml(htmlString = app.developerWebsite), description = AnnotatedString.fromHtml(htmlString = app.developerWebsite),
icon = R.drawable.ic_network painter = painterResource(R.drawable.ic_network)
) )
} }

View File

@@ -33,11 +33,7 @@ import com.aurora.store.R
* @param currentPage Currently displayed page number * @param currentPage Currently displayed page number
*/ */
@Composable @Composable
fun PageIndicatorComposable( fun PageIndicatorComposable(modifier: Modifier = Modifier, totalPages: Int, currentPage: Int = 0) {
modifier: Modifier = Modifier,
totalPages: Int,
currentPage: Int = 0,
) {
Row( Row(
modifier = modifier.fillMaxWidth(), modifier = modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,

View File

@@ -5,49 +5,46 @@
package com.aurora.store.compose.composables.app package com.aurora.store.compose.composables.app
import androidx.annotation.DrawableRes
import androidx.compose.material3.FilterChip import androidx.compose.material3.FilterChip
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import com.aurora.gplayapi.data.models.App
import com.aurora.store.R import com.aurora.store.R
import com.aurora.store.compose.preview.AppPreviewProvider
/** /**
* Composable to show a tag related to an app * Composable to show a tag related to an app
* @param modifier The modifier to be applied to the composable * @param modifier The modifier to be applied to the composable
* @param label Label of the tag * @param label Label of the tag
* @param icon Icon of the tag * @param painter Painter to draw the icon
* @param onClick Callback when this composable is clicked * @param onClick Callback when this composable is clicked
*/ */
@Composable @Composable
fun AppTagComposable( fun AppTagComposable(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
label: String, label: String,
@DrawableRes icon: Int, painter: Painter,
onClick: () -> Unit = {} onClick: () -> Unit = {}
) { ) {
FilterChip( FilterChip(
modifier = modifier, modifier = modifier,
onClick = onClick, onClick = onClick,
label = { Text(text = label, style = MaterialTheme.typography.bodySmall) }, label = { Text(text = label, style = MaterialTheme.typography.bodySmall) },
leadingIcon = { Icon(painter = painterResource(icon), contentDescription = label) }, leadingIcon = { Icon(painter = painter, contentDescription = label) },
selected = true selected = true
) )
} }
@Preview(showBackground = true) @Preview(showBackground = true)
@Composable @Composable
private fun AppTagComposablePreview(@PreviewParameter(AppPreviewProvider::class) app: App) { private fun AppTagComposablePreview() {
AppTagComposable( AppTagComposable(
label = stringResource(R.string.details_free), label = stringResource(R.string.details_free),
icon = R.drawable.ic_paid painter = painterResource(R.drawable.ic_paid)
) )
} }

View File

@@ -179,7 +179,7 @@ private fun ScreenContentError(onNavigateUp: () -> Unit = {}, message: String? =
) { paddingValues -> ) { paddingValues ->
ErrorComposable( ErrorComposable(
modifier = Modifier.padding(paddingValues), modifier = Modifier.padding(paddingValues),
icon = painterResource(R.drawable.ic_apps_outage), painter = painterResource(R.drawable.ic_apps_outage),
message = message ?: stringResource(R.string.toast_app_unavailable) message = message ?: stringResource(R.string.toast_app_unavailable)
) )
} }

View File

@@ -38,6 +38,7 @@ import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.TextRange import androidx.compose.ui.text.TextRange
@@ -145,7 +146,7 @@ private fun ScreenContent(
verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium)) verticalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.margin_medium))
) { ) {
InfoComposable( InfoComposable(
icon = R.drawable.ic_download_manager, painter = painterResource(R.drawable.ic_download_manager),
title = AnnotatedString(text = stringResource(R.string.manual_download_hint)) title = AnnotatedString(text = stringResource(R.string.manual_download_hint))
) )
OutlinedTextField( OutlinedTextField(

View File

@@ -116,7 +116,7 @@ private fun ScreenContent(
is LoadState.Error -> { is LoadState.Error -> {
ErrorComposable( ErrorComposable(
modifier = Modifier.padding(paddingValues), modifier = Modifier.padding(paddingValues),
icon = painterResource(R.drawable.ic_disclaimer), painter = painterResource(R.drawable.ic_disclaimer),
message = stringResource(R.string.error) message = stringResource(R.string.error)
) )
} }

View File

@@ -9,6 +9,7 @@ import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
@@ -32,7 +33,7 @@ fun Compatibility(needsGms: Boolean, plexusScores: Scores? = null) {
if (!needsGms) { if (!needsGms) {
InfoComposable( InfoComposable(
icon = R.drawable.ic_menu_about, painter = painterResource(R.drawable.ic_menu_about),
title = AnnotatedString( title = AnnotatedString(
text = stringResource(R.string.details_compatibility_gms_not_required_title) text = stringResource(R.string.details_compatibility_gms_not_required_title)
), ),
@@ -46,7 +47,7 @@ fun Compatibility(needsGms: Boolean, plexusScores: Scores? = null) {
} }
InfoComposable( InfoComposable(
icon = R.drawable.ic_menu_about, painter = painterResource(R.drawable.ic_menu_about),
title = AnnotatedString( title = AnnotatedString(
text = stringResource(R.string.details_compatibility_gms_required_title) text = stringResource(R.string.details_compatibility_gms_required_title)
), ),
@@ -61,7 +62,7 @@ fun Compatibility(needsGms: Boolean, plexusScores: Scores? = null) {
) )
scoresStatus.forEach { (title, description) -> scoresStatus.forEach { (title, description) ->
InfoComposable( InfoComposable(
icon = R.drawable.ic_android, painter = painterResource(R.drawable.ic_android),
title = AnnotatedString(text = stringResource(title)), title = AnnotatedString(text = stringResource(title)),
description = AnnotatedString( description = AnnotatedString(
text = stringResource(description ?: R.string.details_compatibility_status_unknown) text = stringResource(description ?: R.string.details_compatibility_status_unknown)

View File

@@ -10,6 +10,7 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
@@ -44,7 +45,7 @@ fun DataSafety(report: Report, privacyPolicyUrl: String) {
when (type) { when (type) {
EntryType.DATA_COLLECTED -> { EntryType.DATA_COLLECTED -> {
InfoComposable( InfoComposable(
icon = R.drawable.ic_cloud_upload, painter = painterResource(R.drawable.ic_cloud_upload),
title = AnnotatedString( title = AnnotatedString(
text = stringResource(R.string.details_data_safety_collect) text = stringResource(R.string.details_data_safety_collect)
), ),
@@ -59,7 +60,7 @@ fun DataSafety(report: Report, privacyPolicyUrl: String) {
EntryType.DATA_SHARED -> { EntryType.DATA_SHARED -> {
InfoComposable( InfoComposable(
icon = R.drawable.ic_share, painter = painterResource(R.drawable.ic_share),
title = AnnotatedString( title = AnnotatedString(
text = stringResource(R.string.details_data_safety_shared) text = stringResource(R.string.details_data_safety_shared)
), ),

View File

@@ -10,6 +10,7 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.fromHtml import androidx.compose.ui.text.fromHtml
@@ -41,7 +42,7 @@ fun DeveloperDetails(address: String, website: String, email: String) {
InfoComposable( InfoComposable(
title = AnnotatedString(text = stringResource(R.string.details_dev_website)), title = AnnotatedString(text = stringResource(R.string.details_dev_website)),
description = AnnotatedString(text = website), description = AnnotatedString(text = website),
icon = R.drawable.ic_network, painter = painterResource(R.drawable.ic_network),
onClick = { context.browse(website) } onClick = { context.browse(website) }
) )
} }
@@ -50,7 +51,7 @@ fun DeveloperDetails(address: String, website: String, email: String) {
InfoComposable( InfoComposable(
title = AnnotatedString(text = stringResource(R.string.details_dev_email)), title = AnnotatedString(text = stringResource(R.string.details_dev_email)),
description = AnnotatedString(text = email), description = AnnotatedString(text = email),
icon = R.drawable.ic_mail, painter = painterResource(R.drawable.ic_mail),
onClick = { context.mailTo(email) } onClick = { context.mailTo(email) }
) )
} }
@@ -59,7 +60,7 @@ fun DeveloperDetails(address: String, website: String, email: String) {
InfoComposable( InfoComposable(
title = AnnotatedString(text = stringResource(R.string.details_dev_address)), title = AnnotatedString(text = stringResource(R.string.details_dev_address)),
description = AnnotatedString.fromHtml(htmlString = address), description = AnnotatedString.fromHtml(htmlString = address),
icon = R.drawable.ic_person_location, painter = painterResource(R.drawable.ic_person_location),
onClick = { context.copyToClipBoard(address) } onClick = { context.copyToClipBoard(address) }
) )
} }

View File

@@ -9,6 +9,7 @@ import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
@@ -42,7 +43,7 @@ fun Privacy(report: Report?, onNavigateToDetailsExodus: (() -> Unit)? = null) {
} }
InfoComposable( InfoComposable(
icon = R.drawable.ic_visibility, painter = painterResource(R.drawable.ic_visibility),
title = AnnotatedString(text = reportStatus), title = AnnotatedString(text = reportStatus),
description = AnnotatedString(text = stringResource(R.string.exodus_tracker_desc)) description = AnnotatedString(text = stringResource(R.string.exodus_tracker_desc))
) )

View File

@@ -13,6 +13,7 @@ import androidx.compose.foundation.lazy.items
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
@@ -61,7 +62,7 @@ fun Tags(app: App) {
horizontalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.padding_medium)) horizontalArrangement = Arrangement.spacedBy(dimensionResource(R.dimen.padding_medium))
) { ) {
items(items = tags.keys.toList()) { label -> items(items = tags.keys.toList()) { label ->
AppTagComposable(label = label!!, icon = tags.getValue(label)) AppTagComposable(label = label!!, painter = painterResource(tags.getValue(label)))
} }
} }
} }

View File

@@ -15,6 +15,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
@@ -43,7 +44,7 @@ fun Testing(isSubscribed: Boolean, onTestingSubscriptionChange: (subscribe: Bool
) { ) {
InfoComposable( InfoComposable(
modifier = Modifier.weight(1F), modifier = Modifier.weight(1F),
icon = R.drawable.ic_experiment, painter = painterResource(R.drawable.ic_experiment),
title = AnnotatedString( title = AnnotatedString(
text = if (isSubscribed) { text = if (isSubscribed) {
stringResource(R.string.details_beta_subscribed) stringResource(R.string.details_beta_subscribed)

View File

@@ -101,7 +101,7 @@ private fun ScreenContent(
is LoadState.Error -> { is LoadState.Error -> {
ErrorComposable( ErrorComposable(
modifier = Modifier.padding(paddingValues), modifier = Modifier.padding(paddingValues),
icon = painterResource(R.drawable.ic_disclaimer), painter = painterResource(R.drawable.ic_disclaimer),
message = stringResource(R.string.error) message = stringResource(R.string.error)
) )
} }

View File

@@ -140,7 +140,7 @@ private fun ScreenContent(
if (downloads.itemCount == 0) { if (downloads.itemCount == 0) {
ErrorComposable( ErrorComposable(
modifier = Modifier.padding(paddingValues), modifier = Modifier.padding(paddingValues),
icon = painterResource(R.drawable.ic_download_manager), painter = painterResource(R.drawable.ic_download_manager),
message = stringResource(R.string.download_none) message = stringResource(R.string.download_none)
) )
} else { } else {

View File

@@ -144,7 +144,7 @@ private fun ScreenContent(
if (favourites.itemCount == 0) { if (favourites.itemCount == 0) {
ErrorComposable( ErrorComposable(
modifier = Modifier.padding(paddingValues), modifier = Modifier.padding(paddingValues),
icon = painterResource(R.drawable.ic_favorite_unchecked), painter = painterResource(R.drawable.ic_favorite_unchecked),
message = stringResource(R.string.details_no_favourites) message = stringResource(R.string.details_no_favourites)
) )
} else { } else {

View File

@@ -211,7 +211,7 @@ private fun ScreenContent(
is LoadState.Error -> { is LoadState.Error -> {
ErrorComposable( ErrorComposable(
modifier = Modifier.padding(paddingValues), modifier = Modifier.padding(paddingValues),
icon = painterResource(R.drawable.ic_disclaimer), painter = painterResource(R.drawable.ic_disclaimer),
message = stringResource(R.string.error) message = stringResource(R.string.error)
) )
} }
@@ -220,7 +220,7 @@ private fun ScreenContent(
if (isSearching && results.itemCount == 0) { if (isSearching && results.itemCount == 0) {
ErrorComposable( ErrorComposable(
modifier = Modifier.padding(paddingValues), modifier = Modifier.padding(paddingValues),
icon = painterResource(R.drawable.ic_disclaimer), painter = painterResource(R.drawable.ic_disclaimer),
message = stringResource(R.string.no_apps_available) message = stringResource(R.string.no_apps_available)
) )
} else { } else {
@@ -262,7 +262,7 @@ private fun ScreenContent(
else -> { else -> {
if (isSearching && results.itemCount > 0) { if (isSearching && results.itemCount > 0) {
ErrorComposable( ErrorComposable(
icon = painterResource(R.drawable.ic_round_search), painter = painterResource(R.drawable.ic_round_search),
message = stringResource(R.string.select_app_for_details) message = stringResource(R.string.select_app_for_details)
) )
} }