From 90bf11909fce8b3ccc0dda612bba6fd5ad4392bd Mon Sep 17 00:00:00 2001 From: "Andres Gomez, Thomas (ITDV RL)" Date: Thu, 4 Jul 2024 11:24:05 +0200 Subject: [PATCH] Refactor the AsyncImage to make it work in preview & clean some resources. --- .../pixelized/rplexicon/data/model/Attack.kt | 5 +- .../rplexicon/data/model/ObjectAction.kt | 4 +- .../pixelized/rplexicon/data/model/Skill.kt | 4 +- .../pixelized/rplexicon/data/model/Spell.kt | 4 +- .../data/model/alteration/Alteration.kt | 4 +- .../ui/composable/images/AsyncImage.kt | 39 +++++++----- .../ui/composable/images/ImageDialog.kt | 13 ++-- .../screens/adventure/book/AdventureBook.kt | 5 +- .../adventure/detail/AdventureDetailScreen.kt | 9 +-- .../composable/actions/AlterationItem.kt | 7 ++- .../composable/actions/AttackItem.kt | 6 +- .../composable/actions/EquipmentItem.kt | 4 +- .../composable/actions/ObjectItem.kt | 5 +- .../character/composable/actions/SkillItem.kt | 8 +-- .../character/composable/actions/SpellItem.kt | 11 ++-- .../composable/chooser/SpellLevelChooser.kt | 2 +- .../dialogs/AlterationDetailDialog.kt | 4 +- .../composable/dialogs/SkillDetailDialog.kt | 7 +-- .../composable/dialogs/SpellDetailDialog.kt | 4 +- .../preview/rememberAttackListStatePreview.kt | 4 +- .../preview/rememberSpellLevelChooserState.kt | 2 +- .../factory/SkillFactoryUioFactory.kt | 1 - .../character/factory/SpellUioFactory.kt | 7 ++- .../pages/inventory/InventoryViewModel.kt | 6 +- .../lexicon/detail/LexiconDetailScreen.kt | 9 +-- .../location/detail/LocationDetailScreen.kt | 8 +-- .../screens/quest/detail/QuestDetailScreen.kt | 4 +- .../rolls/factory/AlterationFactory.kt | 5 +- ...ringEx+Icon.kt => BaldurGageImageCache.kt} | 59 ++++++++----------- .../main/res/drawable/ic_arrow_down_24.xml | 5 -- .../main/res/drawable/ic_bloody_stash_24.xml | 4 -- .../res/drawable/ic_crossed_swords_24.xml | 4 -- .../main/res/drawable/ic_crowned_skull_24.xml | 9 --- app/src/main/res/drawable/ic_empty.xml | 4 +- .../main/res/drawable/ic_layered_armor_24.xml | 4 -- .../main/res/drawable/ic_leather_boot_24.xml | 9 --- .../drawable/ic_outline_account_circle_24.xml | 6 -- .../main/res/drawable/ic_outline_map_24.xml | 5 -- .../res/drawable/ic_outline_scroll_24.xml | 9 --- .../main/res/drawable/ic_pocket_bow_24.xml | 9 --- .../res/drawable/ic_scroll_unfurled_24.xml | 4 -- .../main/res/drawable/ic_treasure_map_24.xml | 4 -- app/src/main/res/drawable/ic_tyre_24.xml | 9 --- 43 files changed, 125 insertions(+), 210 deletions(-) rename app/src/main/java/com/pixelized/rplexicon/utilitary/extentions/string/{StringEx+Icon.kt => BaldurGageImageCache.kt} (94%) delete mode 100644 app/src/main/res/drawable/ic_arrow_down_24.xml delete mode 100644 app/src/main/res/drawable/ic_bloody_stash_24.xml delete mode 100644 app/src/main/res/drawable/ic_crossed_swords_24.xml delete mode 100644 app/src/main/res/drawable/ic_crowned_skull_24.xml delete mode 100644 app/src/main/res/drawable/ic_layered_armor_24.xml delete mode 100644 app/src/main/res/drawable/ic_leather_boot_24.xml delete mode 100644 app/src/main/res/drawable/ic_outline_account_circle_24.xml delete mode 100644 app/src/main/res/drawable/ic_outline_map_24.xml delete mode 100644 app/src/main/res/drawable/ic_outline_scroll_24.xml delete mode 100644 app/src/main/res/drawable/ic_pocket_bow_24.xml delete mode 100644 app/src/main/res/drawable/ic_scroll_unfurled_24.xml delete mode 100644 app/src/main/res/drawable/ic_treasure_map_24.xml delete mode 100644 app/src/main/res/drawable/ic_tyre_24.xml 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 e8efac7..336e92e 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 @@ -3,7 +3,8 @@ package com.pixelized.rplexicon.data.model import android.net.Uri import com.pixelized.rplexicon.data.model.roll.Throw import com.pixelized.rplexicon.script.Script -import com.pixelized.rplexicon.utilitary.extentions.string.attackIcon +import com.pixelized.rplexicon.utilitary.extentions.string.BaldurGageImageCache.attackIcon + data class Attack( val title: String, @@ -14,7 +15,7 @@ data class Attack( val script: Script?, private val iconUri: Uri?, ) { - val icon: Uri? get() = this.iconUri ?: title.attackIcon() + val icon: Any? get() = this.iconUri ?: attackIcon(name = title) enum class Type(val key: String) { PHYSICAL_MELEE_ATTACK("Mêlée"), diff --git a/app/src/main/java/com/pixelized/rplexicon/data/model/ObjectAction.kt b/app/src/main/java/com/pixelized/rplexicon/data/model/ObjectAction.kt index bf896c9..4e15452 100644 --- a/app/src/main/java/com/pixelized/rplexicon/data/model/ObjectAction.kt +++ b/app/src/main/java/com/pixelized/rplexicon/data/model/ObjectAction.kt @@ -2,7 +2,7 @@ package com.pixelized.rplexicon.data.model import android.net.Uri import com.pixelized.rplexicon.data.model.roll.Throw -import com.pixelized.rplexicon.utilitary.extentions.string.objectIcon +import com.pixelized.rplexicon.utilitary.extentions.string.BaldurGageImageCache.objectIcon data class ObjectAction( val prefix: String?, @@ -10,5 +10,5 @@ data class ObjectAction( val effect: Throw?, private val iconUri: Uri?, ) { - val icon: Uri? get() = iconUri ?: "${prefix ?: ""}${name}".objectIcon() + val icon: Any? get() = iconUri ?: objectIcon(name = "${prefix ?: ""}${name}") } \ No newline at end of file diff --git a/app/src/main/java/com/pixelized/rplexicon/data/model/Skill.kt b/app/src/main/java/com/pixelized/rplexicon/data/model/Skill.kt index 251bc1c..0c7bb33 100644 --- a/app/src/main/java/com/pixelized/rplexicon/data/model/Skill.kt +++ b/app/src/main/java/com/pixelized/rplexicon/data/model/Skill.kt @@ -3,7 +3,7 @@ package com.pixelized.rplexicon.data.model import android.net.Uri import com.pixelized.rplexicon.data.model.roll.Throw import com.pixelized.rplexicon.script.Script -import com.pixelized.rplexicon.utilitary.extentions.string.skillIcon +import com.pixelized.rplexicon.utilitary.extentions.string.BaldurGageImageCache.skillIcon data class Skill( val name: String, @@ -15,5 +15,5 @@ data class Skill( val script: Script?, private val iconUri: Uri?, ) { - val icon: Uri? get() = iconUri ?: name.skillIcon() + val icon: Any? get() = iconUri ?: skillIcon(name = name) } \ No newline at end of file diff --git a/app/src/main/java/com/pixelized/rplexicon/data/model/Spell.kt b/app/src/main/java/com/pixelized/rplexicon/data/model/Spell.kt index 07eefec..d373b6b 100644 --- a/app/src/main/java/com/pixelized/rplexicon/data/model/Spell.kt +++ b/app/src/main/java/com/pixelized/rplexicon/data/model/Spell.kt @@ -1,7 +1,7 @@ package com.pixelized.rplexicon.data.model import android.net.Uri -import com.pixelized.rplexicon.utilitary.extentions.string.spellIcon +import com.pixelized.rplexicon.utilitary.extentions.string.BaldurGageImageCache.spellIcon data class Spell( val name: String, @@ -14,7 +14,7 @@ data class Spell( val ritual: Boolean, private val iconUri: Uri?, ) { - val icon: Uri? get() = iconUri ?: name.spellIcon() + val icon: Any? get() = iconUri ?: spellIcon(name = name) enum class School(val key: String) { ABJURATION("Abjuration"), diff --git a/app/src/main/java/com/pixelized/rplexicon/data/model/alteration/Alteration.kt b/app/src/main/java/com/pixelized/rplexicon/data/model/alteration/Alteration.kt index 5ba6d0a..7044d9f 100644 --- a/app/src/main/java/com/pixelized/rplexicon/data/model/alteration/Alteration.kt +++ b/app/src/main/java/com/pixelized/rplexicon/data/model/alteration/Alteration.kt @@ -5,7 +5,7 @@ import com.pixelized.rplexicon.data.model.Property import com.pixelized.rplexicon.data.model.roll.Dice import com.pixelized.rplexicon.data.model.roll.Flat import com.pixelized.rplexicon.script.Script -import com.pixelized.rplexicon.utilitary.extentions.string.alterationIcon +import com.pixelized.rplexicon.utilitary.extentions.string.BaldurGageImageCache.alterationIcon data class Alteration( val name: String, @@ -15,7 +15,7 @@ data class Alteration( val status: Map, private val iconUri: Uri?, ) { - val icon: Uri? get() = iconUri ?: name.alterationIcon() + val icon: Any? get() = iconUri ?: alterationIcon(name = name) data class Status( val name: String, diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/composable/images/AsyncImage.kt b/app/src/main/java/com/pixelized/rplexicon/ui/composable/images/AsyncImage.kt index 6bb16a7..9671121 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/composable/images/AsyncImage.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/composable/images/AsyncImage.kt @@ -1,5 +1,6 @@ package com.pixelized.rplexicon.ui.composable.images +import androidx.compose.foundation.Image import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -8,31 +9,39 @@ import androidx.compose.ui.graphics.DefaultAlpha import androidx.compose.ui.graphics.FilterQuality import androidx.compose.ui.graphics.drawscope.DrawScope import androidx.compose.ui.layout.ContentScale -import coil.compose.AsyncImagePainter +import androidx.compose.ui.res.painterResource @Composable fun AsyncImage( modifier: Modifier = Modifier, model: Any?, contentDescription: String? = null, - transform: (AsyncImagePainter.State) -> AsyncImagePainter.State = AsyncImagePainter.DefaultTransform, - onState: ((AsyncImagePainter.State) -> Unit)? = null, alignment: Alignment = Alignment.Center, contentScale: ContentScale = ContentScale.Fit, alpha: Float = DefaultAlpha, colorFilter: ColorFilter? = null, filterQuality: FilterQuality = DrawScope.DefaultFilterQuality, ) { - coil.compose.AsyncImage( - modifier = modifier, - model = model, - contentDescription = contentDescription, - alignment = alignment, - contentScale = contentScale, - alpha = alpha, - colorFilter = colorFilter, - transform = transform, - onState = onState, - filterQuality = filterQuality, - ) + when (model) { + is Int -> Image( + modifier = modifier, + painter = painterResource(id = model), + contentDescription = contentDescription, + alignment = alignment, + contentScale = contentScale, + alpha = alpha, + colorFilter = colorFilter, + ) + + else -> coil.compose.AsyncImage( + modifier = modifier, + model = model, + contentDescription = contentDescription, + alignment = alignment, + contentScale = contentScale, + alpha = alpha, + colorFilter = colorFilter, + filterQuality = filterQuality, + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/composable/images/ImageDialog.kt b/app/src/main/java/com/pixelized/rplexicon/ui/composable/images/ImageDialog.kt index 201e67b..5b97f8f 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/composable/images/ImageDialog.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/composable/images/ImageDialog.kt @@ -2,7 +2,6 @@ package com.pixelized.rplexicon.ui.composable.images import android.content.res.Configuration.UI_MODE_NIGHT_NO import android.content.res.Configuration.UI_MODE_NIGHT_YES -import android.net.Uri import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding @@ -13,6 +12,7 @@ import androidx.compose.material3.IconButton import androidx.compose.runtime.Composable import androidx.compose.runtime.State import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Alignment @@ -28,16 +28,15 @@ import androidx.lifecycle.ViewModel import com.pixelized.rplexicon.R import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.utilitary.extentions.modifier.zoomable -import com.pixelized.rplexicon.utilitary.extentions.uri import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @HiltViewModel class FullScreenImageViewModel @Inject constructor() : ViewModel() { - private val _url = mutableStateOf(null) - val url: State get() = _url + private val _url = mutableStateOf(null) + val url: State get() = _url - fun showDetail(url: Uri) { + fun showDetail(url: Any) { _url.value = url } @@ -58,7 +57,7 @@ fun FullScreenImageHandler( @Composable fun ImageDialog( - url: State, + url: State, onDismissRequest: () -> Unit, ) { val uri by url @@ -103,7 +102,7 @@ fun ImageDialog( private fun ImageDialogPreview() { LexiconTheme { ImageDialog( - url = remember { mutableStateOf(Uri.parse(R.drawable.im_brulkhai.uri)) }, + url = remember { mutableIntStateOf(R.drawable.im_brulkhai) }, onDismissRequest = { }, ) } diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/adventure/book/AdventureBook.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/adventure/book/AdventureBook.kt index d618daa..26ab2d8 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/adventure/book/AdventureBook.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/adventure/book/AdventureBook.kt @@ -21,6 +21,7 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import com.pixelized.rplexicon.R import com.pixelized.rplexicon.ui.composable.images.BackgroundImage import com.pixelized.rplexicon.ui.composable.images.rememberBackgroundGradient import com.pixelized.rplexicon.ui.theme.LexiconTheme @@ -30,7 +31,7 @@ import com.pixelized.rplexicon.utilitary.extentions.lexicon @Stable data class AdventureBookUio( val bookTitle: String, - val bookIcon: Uri?, + val bookIcon: Any?, val documentId: String, val adventureTitle: String?, ) @@ -81,7 +82,7 @@ private fun AdventureItemPreview() { Surface { AdventureBook( item = AdventureBookUio( - bookIcon = null, + bookIcon = R.drawable.icbg_book_generic_c_unfaded, bookTitle = "Les chroniques d'une orc", documentId = "", adventureTitle = null, diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/adventure/detail/AdventureDetailScreen.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/adventure/detail/AdventureDetailScreen.kt index 7951a90..51d5e55 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/adventure/detail/AdventureDetailScreen.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/adventure/detail/AdventureDetailScreen.kt @@ -1,7 +1,6 @@ package com.pixelized.rplexicon.ui.screens.adventure.detail import android.content.res.Configuration -import android.net.Uri import androidx.compose.animation.core.animateFloatAsState import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -52,7 +51,6 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp -import androidx.core.net.toUri import androidx.hilt.navigation.compose.hiltViewModel import com.pixelized.rplexicon.R import com.pixelized.rplexicon.ui.composable.images.BackgroundImage @@ -64,7 +62,6 @@ import com.pixelized.rplexicon.ui.screens.adventure.detail.AdventureLineUio.Styl import com.pixelized.rplexicon.ui.screens.adventure.detail.AdventureLineUio.Style.SUB_TITLE import com.pixelized.rplexicon.ui.screens.adventure.detail.AdventureLineUio.Style.TITLE import com.pixelized.rplexicon.ui.theme.LexiconTheme -import com.pixelized.rplexicon.utilitary.annotateMajWithDropCap import com.pixelized.rplexicon.utilitary.extentions.lexicon import kotlin.math.min @@ -112,7 +109,7 @@ private fun AdventureDetailContent( isLoading: State, title: State, titleIndex: State, - background: State, + background: State, adventures: State>, onBack: () -> Unit, onRefresh: () -> Unit, @@ -286,9 +283,7 @@ private fun AdventureDetailPreview() { mutableIntStateOf(0) }, background = remember { - mutableStateOf( - "https://img.freepik.com/premium-photo/painting-deer-forest-with-stream-water-generative-ai_955925-17321.jpg".toUri() - ) + mutableIntStateOf(R.drawable.im_brulkhai) }, adventures = remember { mutableStateOf( diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/AlterationItem.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/AlterationItem.kt index 926d8ee..00cd645 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/AlterationItem.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/AlterationItem.kt @@ -35,12 +35,13 @@ 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 com.pixelized.rplexicon.R import com.pixelized.rplexicon.ui.composable.images.AsyncImage import com.pixelized.rplexicon.ui.theme.LexiconTheme @Stable data class AlterationItemUio( - val icon: Uri?, + val icon: Any?, val label: String, val source: String, val subLabel: String?, @@ -137,7 +138,7 @@ private fun RollAlterationPreview( private class RollAlterationPreviewProvider : PreviewParameterProvider { override val values: Sequence = sequenceOf( AlterationItemUio( - icon = null, + icon = R.drawable.icbg_bless, label = "Bénédiction", subLabel = "Bless", source = "Clerc", @@ -145,7 +146,7 @@ private class RollAlterationPreviewProvider : PreviewParameterProvider { override val values: Sequence = sequenceOf( AttackUio( - icon = R.drawable.ic_crossed_swords_24.uri.toUri(), + icon = R.drawable.icbg_main_hand_attack, name = "Sans arme", type = R.string.attack_type_melee, range = "5 ft reach", @@ -175,7 +175,7 @@ private class WeaponPreviewProvider : PreviewParameterProvider { damage = AttackUio.Action.Flat(label = "1"), ), AttackUio( - icon = R.drawable.ic_pocket_bow_24.uri.toUri(), + icon = R.drawable.icbg_ranged_attack, 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/actions/EquipmentItem.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/EquipmentItem.kt index a1f3e97..8058558 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/EquipmentItem.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/EquipmentItem.kt @@ -45,7 +45,7 @@ import com.pixelized.rplexicon.utilitary.extentions.uri @Stable data class EquipmentItemUio( - val silhouette: String? = null, + val silhouette: Any? = null, val head: String? = null, val face: String? = null, val shoulder: String? = null, @@ -286,7 +286,7 @@ private fun InventoryItemPreview() { EquipmentItem( modifier = Modifier.fillMaxWidth(), equipments = EquipmentItemUio( - silhouette = R.drawable.ic_woman_archer_256.uri, + silhouette = R.drawable.ic_woman_archer_256, shoulder = "Cloak of Protection", mainHand = "Battleaxe", offHand = "Shield", diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/ObjectItem.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/ObjectItem.kt index 5499964..c5d6922 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/ObjectItem.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/ObjectItem.kt @@ -2,7 +2,6 @@ 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.compose.foundation.BorderStroke import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement @@ -36,7 +35,7 @@ import com.pixelized.rplexicon.ui.theme.LexiconTheme @Stable data class ObjectItemUio( - val icon: Uri?, + val icon: Any?, val prefix: String?, val name: String, val original: String?, @@ -114,7 +113,7 @@ private fun ObjectItemPreview() { ObjectItem( modifier = Modifier.fillMaxWidth(), item = ObjectItemUio( - icon = null, + icon = R.drawable.icbg_scroll_of_bless_unfaded, prefix = "Parchemin de ", name = "Bénédiction", original = "Blessing", diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/SkillItem.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/SkillItem.kt index fd3c394..892e73f 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/SkillItem.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/actions/SkillItem.kt @@ -38,7 +38,7 @@ import com.pixelized.rplexicon.ui.theme.LexiconTheme @Stable data class SkillItemUio( - val icon: Uri?, + val icon: Any?, val label: String, val translate: String?, val rest: String?, @@ -193,7 +193,7 @@ fun rememberSkillsListStatePreview(): State> = remember { private class CounterItemPreviewProvider : PreviewParameterProvider { override val values: Sequence = sequenceOf( SkillItemUio( - icon = null, + icon = R.drawable.icbg_relentless_endurance, label = "Endurance Implacable", translate = "Relentless Endurance", rest = "Récupération repos long", @@ -204,7 +204,7 @@ private class CounterItemPreviewProvider : PreviewParameterProvider { override val values: Sequence = sequenceOf( SpellUio( - icon = null, + icon = R.drawable.icbg_fireball, school = Spell.School.EVOCATION, name = "Trait de feu", translated = "Fire Bolt", @@ -289,7 +288,7 @@ private class SpellPreviewProvider : PreviewParameterProvider { ritual = false, ), SpellUio( - icon = null, + icon = R.drawable.icbg_vicious_mockery, school = Spell.School.ENCHANTMENT, name = "Moquerie cruelle", translated = "Vicious Mockery", @@ -306,7 +305,7 @@ private class SpellPreviewProvider : PreviewParameterProvider { ritual = false, ), SpellUio( - icon = null, + icon = R.drawable.icbg_cure_wounds, school = Spell.School.EVOCATION, name = "Soins", translated = "Cure Wounds", @@ -323,7 +322,7 @@ private class SpellPreviewProvider : PreviewParameterProvider { ritual = true, ), SpellUio( - icon = null, + icon = R.drawable.icbg_cure_wounds, school = Spell.School.EVOCATION, name = "Soins", translated = "Cure Wounds", diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/chooser/SpellLevelChooser.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/chooser/SpellLevelChooser.kt index 089e9ca..c8177e5 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/chooser/SpellLevelChooser.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/chooser/SpellLevelChooser.kt @@ -40,7 +40,7 @@ import com.pixelized.rplexicon.utilitary.extentions.lexicon data class SpellChooserUio( val name: String, val original: String?, - val icon: Uri?, + val icon: Any?, val spells: List, ) diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/dialogs/AlterationDetailDialog.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/dialogs/AlterationDetailDialog.kt index 5798c85..df4a21f 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/dialogs/AlterationDetailDialog.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/dialogs/AlterationDetailDialog.kt @@ -41,7 +41,7 @@ import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder @Stable data class AlterationDialogDetailUio( - val icon: Uri?, + val icon: Any?, val name: String, val original: String?, val source: String, @@ -151,7 +151,7 @@ private fun AlterationDetailPreview() { LexiconTheme { AlterationDetailDialogContent( detail = AlterationDialogDetailUio( - icon = null, + icon = R.drawable.icbg_rage_bear_heart, name = "Rage", original = "Rage", source = "Barbare", diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/dialogs/SkillDetailDialog.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/dialogs/SkillDetailDialog.kt index 57013c0..0314326 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/dialogs/SkillDetailDialog.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/dialogs/SkillDetailDialog.kt @@ -1,7 +1,6 @@ package com.pixelized.rplexicon.ui.screens.character.composable.dialogs import android.content.res.Configuration -import android.net.Uri import androidx.compose.foundation.ScrollState import androidx.compose.foundation.clickable import androidx.compose.foundation.interaction.MutableInteractionSource @@ -30,16 +29,16 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties +import com.pixelized.rplexicon.R import com.pixelized.rplexicon.ui.composable.images.BackgroundImage import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.utilitary.annotateWithDropCap import com.pixelized.rplexicon.utilitary.extentions.lexicon import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder -import com.pixelized.rplexicon.utilitary.extentions.string.skillIcon @Stable data class SkillDialogDetailUio( - val icon: Uri?, + val icon: Any?, val name: String, val original: String?, val description: String, @@ -137,7 +136,7 @@ private fun AlterationDetailPreview() { LexiconTheme { SkillDetailDialogContent( detail = SkillDialogDetailUio( - icon = "Endurance implacable".skillIcon(), + icon = R.drawable.icbg_relentless_endurance, name = "Endurance implacable", original = "Relentless Endurance", description = "Lorsque vous tombez à 0 point de vie, mais que vous n'êtes pas tué sur le coup, vous pouvez passer à 1 point de vie à la place. Vous devez terminer un repos long avant de pouvoir utiliser cette capacité de nouveau." diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/dialogs/SpellDetailDialog.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/dialogs/SpellDetailDialog.kt index 4b26f74..56aff8d 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/dialogs/SpellDetailDialog.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/dialogs/SpellDetailDialog.kt @@ -44,7 +44,7 @@ import com.pixelized.rplexicon.utilitary.extentions.modifier.ddBorder @Stable data class SpellDialogDetailUio( - val icon: Uri?, + val icon: Any?, val name: String, val translated: String, val level: String, @@ -254,7 +254,7 @@ private fun SpellDetailDialogPreview() { LexiconTheme { SpellDetailDialogContent( detail = SpellDialogDetailUio( - icon = null, + icon = R.drawable.icbg_hellish_rebuke, name = "Représailles infernales", translated = "Hellish Rebuke", level = "1", 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 4f7f582..e164d83 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 @@ -16,7 +16,7 @@ fun rememberAttackListStatePreview(): State> = remember { mutableStateOf( listOf( AttackUio( - icon = R.drawable.ic_crossed_swords_24.uri.toUri(), + icon = R.drawable.icbg_main_hand_attack, name = "Unarmed attack", type = R.string.attack_type_melee, range = "5 ft reach", @@ -29,7 +29,7 @@ fun rememberAttackListStatePreview(): State> = remember { ), ), AttackUio( - icon = R.drawable.ic_pocket_bow_24.uri.toUri(), + icon = R.drawable.icbg_ranged_attack, 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/rememberSpellLevelChooserState.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/preview/rememberSpellLevelChooserState.kt index 5d838a0..ecce695 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/preview/rememberSpellLevelChooserState.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/composable/preview/rememberSpellLevelChooserState.kt @@ -15,7 +15,7 @@ fun rememberSpellLevelChooserState() = remember { SpellChooserUio( name = "Soin", original = "Cure wounds", - icon = null, + icon = R.drawable.icbg_cure_wounds, spells = listOf( SpellLevelUio( spell = "", diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/factory/SkillFactoryUioFactory.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/factory/SkillFactoryUioFactory.kt index 0042d33..b0528ed 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/factory/SkillFactoryUioFactory.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/factory/SkillFactoryUioFactory.kt @@ -12,7 +12,6 @@ import com.pixelized.rplexicon.utilitary.extentions.local.primary import com.pixelized.rplexicon.utilitary.extentions.local.secondary import com.pixelized.rplexicon.utilitary.extentions.local.tertiary import com.pixelized.rplexicon.utilitary.extentions.modifier -import com.pixelized.rplexicon.utilitary.extentions.string.skillIcon import com.pixelized.rplexicon.utilitary.extentions.toLabel import javax.inject.Inject diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/factory/SpellUioFactory.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/factory/SpellUioFactory.kt index ed507a0..b56f95a 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/factory/SpellUioFactory.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/factory/SpellUioFactory.kt @@ -8,7 +8,6 @@ import com.pixelized.rplexicon.data.repository.character.DescriptionRepository import com.pixelized.rplexicon.ui.screens.character.composable.actions.SpellUio import com.pixelized.rplexicon.utilitary.extentions.icon import com.pixelized.rplexicon.utilitary.extentions.modifier -import com.pixelized.rplexicon.utilitary.extentions.string.spellIcon import com.pixelized.rplexicon.utilitary.extentions.toLabel import javax.inject.Inject @@ -91,7 +90,11 @@ class SpellUioFactory @Inject constructor( SpellUio.Action.Dice( icon = diceThrow.dice?.icon ?: R.drawable.ic_d4_24, label = "${diceThrow.dice?.toLabel()}${modifier.toLabel(true)}" + - "+ ${level.dice?.count?.times(delta)}d${level.dice?.faces}${deltaModifier.toLabel(true)}", + "+ ${level.dice?.count?.times(delta)}d${level.dice?.faces}${ + deltaModifier.toLabel( + true + ) + }", ) } } diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/pages/inventory/InventoryViewModel.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/pages/inventory/InventoryViewModel.kt index 1c05d4b..f822a4f 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/pages/inventory/InventoryViewModel.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/character/pages/inventory/InventoryViewModel.kt @@ -13,10 +13,10 @@ import com.pixelized.rplexicon.data.repository.character.InventoryRepository import com.pixelized.rplexicon.ui.navigation.screens.characterSheetArgument import com.pixelized.rplexicon.ui.screens.character.composable.actions.EquipmentItemUio import com.pixelized.rplexicon.ui.screens.character.composable.actions.InventoryItemUio -import com.pixelized.rplexicon.ui.screens.character.factory.ItemUioFactory import com.pixelized.rplexicon.ui.screens.character.composable.dialogs.SkillDialogDetailUio +import com.pixelized.rplexicon.ui.screens.character.factory.ItemUioFactory import com.pixelized.rplexicon.utilitary.extentions.context -import com.pixelized.rplexicon.utilitary.extentions.string.equipmentsIcon +import com.pixelized.rplexicon.utilitary.extentions.string.BaldurGageImageCache.equipmentsIcon import com.pixelized.rplexicon.utilitary.extentions.uri import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers @@ -92,7 +92,7 @@ class InventoryViewModel @Inject constructor( val description = descriptionRepository.getDescription(name = item) if (description != null) { _dialog.value = SkillDialogDetailUio( - icon = item.equipmentsIcon(), + icon = equipmentsIcon(name = item), name = item, original = description.original, description = description.description diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/lexicon/detail/LexiconDetailScreen.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/lexicon/detail/LexiconDetailScreen.kt index 397fb95..cb1408c 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/lexicon/detail/LexiconDetailScreen.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/lexicon/detail/LexiconDetailScreen.kt @@ -2,7 +2,6 @@ package com.pixelized.rplexicon.ui.screens.lexicon.detail import android.content.res.Configuration.UI_MODE_NIGHT_NO import android.content.res.Configuration.UI_MODE_NIGHT_YES -import android.net.Uri import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.ScrollState import androidx.compose.foundation.clickable @@ -74,7 +73,7 @@ data class LexiconDetailUio( val race: String?, val status: String?, val location: String?, - val portrait: List, + val portrait: List, val description: String?, val history: String?, val tags: String?, @@ -116,7 +115,7 @@ private fun LexiconDetailContent( haveCharacterSheet: State, onBack: () -> Unit, onCharacterSheet: (String) -> Unit, - onIllustration: (Uri) -> Unit, + onIllustration: (Any) -> Unit, ) { val typography = MaterialTheme.lexicon.typography val highlightRegex = remember(highlight) { highlightRegex(terms = highlight.searchCriterion()) } @@ -389,9 +388,7 @@ private fun LexiconDetailPreview() { race = "Half-orc", status = "Vivante", location = "Manoir Durst", - portrait = listOf( - Uri.parse("https://cdnb.artstation.com/p/assets/images/images/003/024/889/large/bayard-wu-0716.jpg?1468642855"), - ), + portrait = listOf(R.drawable.im_brulkhai), description = "Brulkhai, ou plus simplement Bru, est solidement bâti. Elle mesure 192 cm pour 110 kg de muscles lorsqu’elle est en bonne santé. Elle a les cheveux châtains, les yeux noisettes et la peau couleur gris-vert typique de son espèce. D’un tempérament taciturne, elle parle peu et de façon concise. Elle est parfois brutale, aussi bien physiquement que verbalement, Elle ne prend cependant aucun plaisir à malmener ceux qu’elle considère plus faibles qu’elle. D’une nature simple et honnête, elle ne mâche pas ses mots et ne dissimule généralement pas ses pensées. Son intelligence modeste est plus le reflet d’un manque d’éducation et d’une capacité limitée à gérer ses émotions qu’à une débilité congénitale. Elle voue à la force un culte car c’est par son expression qu’elle se sent vraiment vivante et éprouve de grandes difficultés vis à vis de ceux qu’elle nomme foshnu (bébé, chouineur en commun).", history = null, tags = "protagoniste, brute", diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/location/detail/LocationDetailScreen.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/location/detail/LocationDetailScreen.kt index 8bdc2eb..7103af4 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/location/detail/LocationDetailScreen.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/location/detail/LocationDetailScreen.kt @@ -100,9 +100,9 @@ import kotlinx.coroutines.launch @Stable data class LocationDetailUio( val name: String, - val map: Uri?, + val map: Any?, val description: String?, - val illustrations: List, + val illustrations: List, val marquees: List, ) @@ -226,7 +226,7 @@ private fun LocationContent( selectedIndex: State, mapHighlight: State, onBack: () -> Unit, - onIllustration: (Uri) -> Unit, + onIllustration: (Any) -> Unit, onMarquee: (MarqueeUio) -> Unit, onDestination: (MarqueeUio) -> Unit, onMapTap: (Offset) -> Unit, @@ -581,7 +581,7 @@ private fun LocationPreview() { mutableStateOf( LocationDetailUio( name = "Barovie", - map = Uri.parse("https://cdn.discordapp.com/attachments/1123326578508714106/1161014438736969759/Map_of_Barovia_-_4k_-_Names_-_No_Special_Locations_-_Without_Hex.jpg?ex=6536c1f4&is=65244cf4&hm=671ddc88d073e5559bd37af14dc731e497b78457dc37a3ea5620a5342004b733&"), + map = R.drawable.ic_empty, description = "Contrée sombre et maudite soumise au joug de Stradh von Zarovith", illustrations = emptyList(), marquees = listOf( diff --git a/app/src/main/java/com/pixelized/rplexicon/ui/screens/quest/detail/QuestDetailScreen.kt b/app/src/main/java/com/pixelized/rplexicon/ui/screens/quest/detail/QuestDetailScreen.kt index bc4ebd2..5d26b5b 100644 --- a/app/src/main/java/com/pixelized/rplexicon/ui/screens/quest/detail/QuestDetailScreen.kt +++ b/app/src/main/java/com/pixelized/rplexicon/ui/screens/quest/detail/QuestDetailScreen.kt @@ -75,7 +75,7 @@ import com.pixelized.rplexicon.utilitary.styleWith @Stable data class QuestDetailUio( val id: String, - val background: Uri?, + val background: Any?, val completed: Boolean, val title: String, val steps: List, @@ -399,7 +399,7 @@ private class QuestDetailPreviewProvider : PreviewParameterProvider - - diff --git a/app/src/main/res/drawable/ic_bloody_stash_24.xml b/app/src/main/res/drawable/ic_bloody_stash_24.xml deleted file mode 100644 index 501e534..0000000 --- a/app/src/main/res/drawable/ic_bloody_stash_24.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_crossed_swords_24.xml b/app/src/main/res/drawable/ic_crossed_swords_24.xml deleted file mode 100644 index be0fbb9..0000000 --- a/app/src/main/res/drawable/ic_crossed_swords_24.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_crowned_skull_24.xml b/app/src/main/res/drawable/ic_crowned_skull_24.xml deleted file mode 100644 index 9189385..0000000 --- a/app/src/main/res/drawable/ic_crowned_skull_24.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_empty.xml b/app/src/main/res/drawable/ic_empty.xml index a4c243f..b26eb7a 100644 --- a/app/src/main/res/drawable/ic_empty.xml +++ b/app/src/main/res/drawable/ic_empty.xml @@ -1,6 +1,6 @@ - - diff --git a/app/src/main/res/drawable/ic_leather_boot_24.xml b/app/src/main/res/drawable/ic_leather_boot_24.xml deleted file mode 100644 index 20139b5..0000000 --- a/app/src/main/res/drawable/ic_leather_boot_24.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_outline_account_circle_24.xml b/app/src/main/res/drawable/ic_outline_account_circle_24.xml deleted file mode 100644 index cc56447..0000000 --- a/app/src/main/res/drawable/ic_outline_account_circle_24.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/ic_outline_map_24.xml b/app/src/main/res/drawable/ic_outline_map_24.xml deleted file mode 100644 index 255f0a6..0000000 --- a/app/src/main/res/drawable/ic_outline_map_24.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_outline_scroll_24.xml b/app/src/main/res/drawable/ic_outline_scroll_24.xml deleted file mode 100644 index 802d5de..0000000 --- a/app/src/main/res/drawable/ic_outline_scroll_24.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_pocket_bow_24.xml b/app/src/main/res/drawable/ic_pocket_bow_24.xml deleted file mode 100644 index ba426dc..0000000 --- a/app/src/main/res/drawable/ic_pocket_bow_24.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_scroll_unfurled_24.xml b/app/src/main/res/drawable/ic_scroll_unfurled_24.xml deleted file mode 100644 index c8268b5..0000000 --- a/app/src/main/res/drawable/ic_scroll_unfurled_24.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_treasure_map_24.xml b/app/src/main/res/drawable/ic_treasure_map_24.xml deleted file mode 100644 index 306a38e..0000000 --- a/app/src/main/res/drawable/ic_treasure_map_24.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_tyre_24.xml b/app/src/main/res/drawable/ic_tyre_24.xml deleted file mode 100644 index 69cf0af..0000000 --- a/app/src/main/res/drawable/ic_tyre_24.xml +++ /dev/null @@ -1,9 +0,0 @@ - - -