From 3b075a05e48d94a7eb8bf00fa5aea77650097d7c Mon Sep 17 00:00:00 2001 From: "Andres Gomez, Thomas (ITDV RL)" Date: Thu, 30 May 2024 10:57:15 +0200 Subject: [PATCH] Refactor icon to Attacks --- .../pixelized/rplexicon/data/model/Attack.kt | 3 +++ .../rplexicon/data/parser/AttackParser.kt | 4 ++- .../composable/actions/AttackItem.kt | 26 ++++++++++++------- .../preview/rememberAttackListStatePreview.kt | 6 +++-- .../character/factory/AttackUioFactory.kt | 5 +--- 5 files changed, 27 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/pixelized/rplexicon/data/model/Attack.kt b/app/src/main/java/com/pixelized/rplexicon/data/model/Attack.kt index e49ca47..c4d7c2a 100644 --- a/app/src/main/java/com/pixelized/rplexicon/data/model/Attack.kt +++ b/app/src/main/java/com/pixelized/rplexicon/data/model/Attack.kt @@ -1,6 +1,9 @@ package com.pixelized.rplexicon.data.model +import android.net.Uri + data class Attack( + val icon: Uri?, val title: String, val type: Type, val range: String?, diff --git a/app/src/main/java/com/pixelized/rplexicon/data/parser/AttackParser.kt b/app/src/main/java/com/pixelized/rplexicon/data/parser/AttackParser.kt index 652dddc..8978078 100644 --- a/app/src/main/java/com/pixelized/rplexicon/data/parser/AttackParser.kt +++ b/app/src/main/java/com/pixelized/rplexicon/data/parser/AttackParser.kt @@ -29,6 +29,7 @@ class AttackParser @Inject constructor( val title = row.parse(column = NAME) if (characterSheet != null && title != null) { val attack = Attack( + icon = row.parseUri(column = ICON), title = title, type = parseType(value = row.parse(column = TYPE)), range = row.parse(column = RANGE), @@ -62,6 +63,7 @@ class AttackParser @Inject constructor( private val HIT = column("Touché") private val DAMAGE = column("Dommage") private val ALTERATION = column("Altérations") - private val COLUMNS get() = listOf(CHARACTER, NAME, TYPE, RANGE, HIT, DAMAGE, ALTERATION) + private val ICON = column("Icone") + private val COLUMNS get() = listOf(CHARACTER, NAME, TYPE, RANGE, HIT, DAMAGE, ALTERATION, ICON) } } \ No newline at end of file diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/AttackItem.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/AttackItem.kt index 176ed50..b9f7a62 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/AttackItem.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/AttackItem.kt @@ -2,6 +2,7 @@ package com.pixelized.rplexicon.ui.screens.character.composable.actions import android.content.res.Configuration.UI_MODE_NIGHT_NO import android.content.res.Configuration.UI_MODE_NIGHT_YES +import android.net.Uri import androidx.annotation.DrawableRes import androidx.annotation.StringRes import androidx.compose.foundation.layout.Arrangement @@ -10,8 +11,8 @@ import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.material.minimumInteractiveComponentSize -import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text @@ -19,7 +20,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.Stable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow @@ -27,15 +27,18 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameterProvider import androidx.compose.ui.unit.dp +import androidx.core.net.toUri import com.pixelized.rplexicon.R import com.pixelized.rplexicon.data.model.Attack +import com.pixelized.rplexicon.ui.composable.AsyncImage import com.pixelized.rplexicon.ui.screens.character.composable.common.DiceButton import com.pixelized.rplexicon.ui.theme.LexiconTheme +import com.pixelized.rplexicon.utilitary.extentions.uri @Stable data class AttackUio( + val icon: Uri?, val id: Attack? = null, - @DrawableRes val icon: Int, val name: String, @StringRes val type: Int, val range: String?, @@ -62,13 +65,16 @@ fun Attack( .padding(paddingValues = padding) .minimumInteractiveComponentSize() .then(other = modifier), - horizontalArrangement = Arrangement.spacedBy(space = 16.dp), + horizontalArrangement = Arrangement.spacedBy(space = 8.dp), verticalAlignment = Alignment.CenterVertically, ) { - Icon( - painter = painterResource(id = weapon.icon), - contentDescription = null, - ) + weapon.icon?.let { uri -> + AsyncImage( + modifier = Modifier.size(size = 36.dp), + model = uri, + contentDescription = null, + ) + } Column( modifier = Modifier.weight(weight = 1f), ) { @@ -140,7 +146,7 @@ private fun WeaponPreview( private class WeaponPreviewProvider : PreviewParameterProvider { override val values: Sequence = sequenceOf( AttackUio( - icon = R.drawable.ic_crossed_swords_24, + icon = R.drawable.ic_crossed_swords_24.uri.toUri(), name = "Dagger", type = R.string.attack_type_melee, range = "5 ft reach", @@ -148,7 +154,7 @@ private class WeaponPreviewProvider : PreviewParameterProvider { damage = AttackUio.Dice(icon = R.drawable.ic_d8_24, label = "1d8"), ), AttackUio( - icon = R.drawable.ic_pocket_bow_24, + icon = R.drawable.ic_pocket_bow_24.uri.toUri(), name = "Long bow", type = R.string.attack_type_range, range = "30 ft reach", diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/preview/rememberAttackListStatePreview.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/preview/rememberAttackListStatePreview.kt index 6a94a59..bb47ce9 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/preview/rememberAttackListStatePreview.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/preview/rememberAttackListStatePreview.kt @@ -5,8 +5,10 @@ import androidx.compose.runtime.Stable import androidx.compose.runtime.State import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.core.net.toUri import com.pixelized.rplexicon.R import com.pixelized.rplexicon.ui.screens.character.composable.actions.AttackUio +import com.pixelized.rplexicon.utilitary.extentions.uri @Stable @Composable @@ -14,7 +16,7 @@ fun rememberAttackListStatePreview(): State> = remember { mutableStateOf( listOf( AttackUio( - icon = R.drawable.ic_crossed_swords_24, + icon = R.drawable.ic_crossed_swords_24.uri.toUri(), name = "Dagger", type = R.string.attack_type_melee, range = "5 ft reach", @@ -28,7 +30,7 @@ fun rememberAttackListStatePreview(): State> = remember { ), ), AttackUio( - icon = R.drawable.ic_pocket_bow_24, + icon = R.drawable.ic_pocket_bow_24.uri.toUri(), name = "Long bow", type = R.string.attack_type_range, range = "30 ft reach", diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/factory/AttackUioFactory.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/factory/AttackUioFactory.kt index 1079856..6b099a9 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/factory/AttackUioFactory.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/factory/AttackUioFactory.kt @@ -67,10 +67,7 @@ class AttackUioFactory @Inject constructor() { return AttackUio( id = attack, - icon = when (attack.type) { - Attack.Type.PHYSICAL_MELEE_ATTACK -> R.drawable.ic_crossed_swords_24 - Attack.Type.PHYSICAL_RANGE_ATTACK -> R.drawable.ic_pocket_bow_24 - }, + icon = attack.icon, name = attack.title, type = when (attack.type) { Attack.Type.PHYSICAL_MELEE_ATTACK -> R.string.attack_type_melee