Refactor the AsyncImage to make it work in preview & clean some resources.

This commit is contained in:
Andres Gomez, Thomas (ITDV RL) 2024-07-04 11:24:05 +02:00
parent c23dba7669
commit 90bf11909f
43 changed files with 125 additions and 210 deletions

View file

@ -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"),

View file

@ -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}")
}

View file

@ -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)
}

View file

@ -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"),

View file

@ -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<Property, Status>,
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,

View file

@ -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,
)
}
}

View file

@ -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<Uri?>(null)
val url: State<Uri?> get() = _url
private val _url = mutableStateOf<Any?>(null)
val url: State<Any?> get() = _url
fun showDetail(url: Uri) {
fun showDetail(url: Any) {
_url.value = url
}
@ -58,7 +57,7 @@ fun FullScreenImageHandler(
@Composable
fun ImageDialog(
url: State<Uri?>,
url: State<Any?>,
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 = { },
)
}

View file

@ -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,

View file

@ -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<Boolean>,
title: State<String?>,
titleIndex: State<Int>,
background: State<Uri?>,
background: State<Any?>,
adventures: State<List<AdventureLineUio>>,
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(

View file

@ -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<AlterationItemUio> {
override val values: Sequence<AlterationItemUio> = 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<Alteratio
override = false,
),
AlterationItemUio(
icon = null,
icon = R.drawable.icbg_guidance,
label = "Assistance",
subLabel = "Guidance",
source = "Clerc",

View file

@ -38,7 +38,7 @@ import com.pixelized.rplexicon.utilitary.extentions.uri
@Stable
data class AttackUio(
val icon: Uri?,
val icon: Any?,
val id: Attack? = null,
val name: String,
@StringRes val type: Int,
@ -167,7 +167,7 @@ private fun WeaponPreview(
private class WeaponPreviewProvider : PreviewParameterProvider<AttackUio> {
override val values: Sequence<AttackUio> = 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<AttackUio> {
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",

View file

@ -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",

View file

@ -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",

View file

@ -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<List<SkillItemUio>> = remember {
private class CounterItemPreviewProvider : PreviewParameterProvider<SkillItemUio> {
override val values: Sequence<SkillItemUio> = 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<SkillItemUio
haveDetail = true,
),
SkillItemUio(
icon = null,
icon = R.drawable.icbg_magic_initiate_bard,
label = "Apparence inspirante",
translate = "Mantle of Inspiration",
rest = null,
@ -215,7 +215,7 @@ private class CounterItemPreviewProvider : PreviewParameterProvider<SkillItemUio
haveDetail = true,
),
SkillItemUio(
icon = null,
icon = R.drawable.icbg_turn_undead,
label = "Renvoi des morts-vivants",
translate = "Turn Undead",
rest = "Récupération repos long",

View file

@ -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.annotation.DrawableRes
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.clickable
@ -44,7 +43,7 @@ import com.pixelized.rplexicon.utilitary.extentions.uri
@Stable
data class SpellUio(
val icon: Uri?,
val icon: Any?,
val school: Spell.School,
val name: String,
val translated: String?,
@ -269,7 +268,7 @@ private fun SpellPreview(
private class SpellPreviewProvider : PreviewParameterProvider<SpellUio> {
override val values: Sequence<SpellUio> = 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<SpellUio> {
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<SpellUio> {
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<SpellUio> {
ritual = true,
),
SpellUio(
icon = null,
icon = R.drawable.icbg_cure_wounds,
school = Spell.School.EVOCATION,
name = "Soins",
translated = "Cure Wounds",

View file

@ -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<SpellLevelUio>,
)

View file

@ -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",

View file

@ -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."

View file

@ -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",

View file

@ -16,7 +16,7 @@ fun rememberAttackListStatePreview(): State<List<AttackUio>> = 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<List<AttackUio>> = 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",

View file

@ -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 = "",

View file

@ -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

View file

@ -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
)
}",
)
}
}

View file

@ -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

View file

@ -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<Uri>,
val portrait: List<Any>,
val description: String?,
val history: String?,
val tags: String?,
@ -116,7 +115,7 @@ private fun LexiconDetailContent(
haveCharacterSheet: State<Boolean>,
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 lorsquelle est en bonne santé. Elle a les cheveux châtains, les yeux noisettes et la peau couleur gris-vert typique de son espèce. Dun 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 quelle considère plus faibles quelle. Dune 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 dun manque déducation et dune capacité limitée à gérer ses émotions quà une débilité congénitale. Elle voue à la force un culte car cest par son expression quelle se sent vraiment vivante et éprouve de grandes difficultés vis à vis de ceux quelle nomme foshnu (bébé, chouineur en commun).",
history = null,
tags = "protagoniste, brute",

View file

@ -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<Uri>,
val illustrations: List<Any>,
val marquees: List<MarqueeUio>,
)
@ -226,7 +226,7 @@ private fun LocationContent(
selectedIndex: State<Int?>,
mapHighlight: State<Offset>,
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(

View file

@ -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<QuestStep>,
@ -399,7 +399,7 @@ private class QuestDetailPreviewProvider : PreviewParameterProvider<State<QuestD
QuestDetailUio(
id = "La chasse aux loups",
completed = true,
background = Uri.parse("https://as1.ftcdn.net/v2/jpg/05/50/22/58/1000_F_550225869_jAkLTRVb7ym7EHJYvDApVXQnpANvRd8O.jpg"),
background = R.drawable.icbg_book_parchment_e,
title = "La chasse aux loups",
steps = listOf(
QuestDetailUio.QuestStep(

View file

@ -9,7 +9,6 @@ import com.pixelized.rplexicon.data.repository.character.AlterationRepository
import com.pixelized.rplexicon.data.repository.character.SkillRepository
import com.pixelized.rplexicon.data.repository.character.SpellRepository
import com.pixelized.rplexicon.ui.screens.character.composable.actions.AlterationItemUio
import com.pixelized.rplexicon.utilitary.extentions.string.alterationIcon
import kotlinx.coroutines.flow.firstOrNull
import javax.inject.Inject
@ -152,7 +151,9 @@ class AlterationFactory @Inject constructor(
subLabel = description[alteration.name]?.original,
source = alteration.source,
checked = override[alteration.name] ?: checked[alteration.name] ?: false,
override = override[alteration.name]?.let { it != (checked[alteration.name] ?: false) } ?: false,
override = override[alteration.name]?.let {
it != (checked[alteration.name] ?: false)
} ?: false,
)
} ?: emptyList()
}

View file

@ -1,35 +1,10 @@
package com.pixelized.rplexicon.utilitary.extentions.string
import android.net.Uri
import androidx.annotation.DrawableRes
import com.pixelized.rplexicon.R
import com.pixelized.rplexicon.utilitary.extentions.uri
fun String.attackIcon(): Uri? {
return ResourcesCache.attacks[this]?.uri?.toUriOrNull()
}
fun String.objectIcon(): Uri? {
return ResourcesCache.objects[this]?.uri?.toUriOrNull()
}
fun String.equipmentsIcon(): Uri? {
return ResourcesCache.equipments[this]?.uri?.toUriOrNull()
}
fun String.alterationIcon(): Uri? {
return ResourcesCache.alterations[this]?.uri?.toUriOrNull()
}
fun String.skillIcon(): Uri? {
return ResourcesCache.skills[this]?.uri?.toUriOrNull()
}
fun String.spellIcon(): Uri? {
return ResourcesCache.spells[this]?.uri?.toUriOrNull()
}
private object ResourcesCache {
val alterations = hashMapOf(
object BaldurGageImageCache {
private val alterations = hashMapOf(
"Arme enflammée" to R.drawable.icbg_flaming_blade,
"Critique" to R.drawable.icbg_frenzied_strike,
"Esquiver" to R.drawable.icbg_uncanny_dodge,
@ -87,7 +62,7 @@ private object ResourcesCache {
"Arbalète de poing" to R.drawable.icbg_hand_crossbow_unfaded,
)
val attacks = hashMapOf(
private val attacks = hashMapOf(
"Hache de guerre en argent" to R.drawable.icbg_reckless_attack,
"Hache de guerre en argent (2 mains)" to R.drawable.icbg_reckless_attack,
"Dague" to R.drawable.icbg_main_hand_attack,
@ -120,7 +95,7 @@ private object ResourcesCache {
"Épée courte" to R.drawable.icbg_main_hand_attack,
)
val objects = hashMapOf(
private val objects = hashMapOf(
"Parchemin de Bénédiction" to R.drawable.icbg_scroll_of_bless_unfaded,
"Parchemin d'Arme spirituelle" to R.drawable.icbg_book_signedtradebisa_unfaded,
"Potion de guérison" to R.drawable.icbg_pot_potion_of_healing_unfaded,
@ -133,7 +108,7 @@ private object ResourcesCache {
"Poussière de disparition" to R.drawable.icbg_haste_spore_grenade_unfaded,
)
val equipments = hashMapOf(
private val equipments = hashMapOf(
"Dague" to R.drawable.icbg_dagger_unfaded,
"Hache de guerre en argent" to R.drawable.icbg_battleaxe_plus_one_unfaded,
"Bouclier" to R.drawable.icbg_studded_shield_unfaded,
@ -142,7 +117,7 @@ private object ResourcesCache {
"Armure de cuir" to R.drawable.icbg_leather_armour_rogue_unfaded,
)
val skills = hashMapOf(
private val skills = hashMapOf(
"Dé de vie (Barbare)" to R.drawable.icbg_bolstering_magic_boon,
"Dé de vie (Guerrier)" to R.drawable.icbg_bolstering_magic_boon,
"Dé de vie (Rodeur)" to R.drawable.icbg_bolstering_magic_boon,
@ -208,7 +183,7 @@ private object ResourcesCache {
"Style de combat : Défense" to R.drawable.icbg_heavily_armoured,
)
val spells = hashMapOf(
private val spells = hashMapOf(
"Aide" to R.drawable.icbg_aid,
"Alarme" to R.drawable.icbg_command_halt,
"Appel de familier" to R.drawable.icbg_find_familiar_cat,
@ -275,4 +250,22 @@ private object ResourcesCache {
"Dissipation de la magie" to R.drawable.icbg_unshackling_strike,
"Protection contre le mal et le bien" to R.drawable.icbg_protection_from_evil_and_good,
)
@DrawableRes
fun attackIcon(name: String): Int? = attacks[name]
@DrawableRes
fun objectIcon(name: String): Int? = objects[name]
@DrawableRes
fun equipmentsIcon(name: String): Int? = equipments[name]
@DrawableRes
fun alterationIcon(name: String): Int? = alterations[name]
@DrawableRes
fun skillIcon(name: String): Int? = skills[name]
@DrawableRes
fun spellIcon(name: String): Int? = spells[name]
}

View file

@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M7.41,8.59L12,13.17l4.59,-4.58L18,10l-6,6 -6,-6 1.41,-1.41z"/>
</vector>

View file

@ -1,4 +0,0 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#000000" android:pathData="M244.19,21.97C347.89,119.18 428.1,216.27 494.72,304.06L494.72,191.66c-7.06,-6.39 -14.15,-12.68 -21.34,-18.84 2.99,-3.46 4.81,-7.97 4.81,-12.91 0,-10.93 -8.85,-19.78 -19.78,-19.78 -6.28,0 -11.88,2.96 -15.5,7.53 -43.25,-34.45 -88.29,-64.96 -134,-91.31 1.01,-2.03 1.59,-4.27 1.59,-6.69 0,-8.35 -6.77,-15.13 -15.13,-15.13 -5.42,0 -10.14,2.85 -12.81,7.13 -12.76,-6.88 -25.57,-13.45 -38.38,-19.69zM104.63,40.09c5.11,5.18 10.18,10.36 15.22,15.59 -4.22,1.17 -7.38,4.29 -8.35,9 -1.81,8.84 4.73,19.92 14.63,24.72 3.64,1.77 7.24,2.42 10.41,2.12 -2.54,4.11 -4,8.97 -4,14.16 0,14.89 12.05,26.94 26.94,26.94 8.68,0 16.41,-4.1 21.34,-10.47 88.69,101.2 165.6,208.4 235.16,306.72 -7.4,6.05 -12.13,15.23 -12.13,25.53 0,18.21 14.76,32.97 32.97,32.97 6.27,0 12.13,-1.77 17.12,-4.81 3.09,4.35 6.19,8.76 9.25,13.06h31.53L494.72,381.28c-41.36,-69.22 -154.77,-193.34 -184.53,-213.31 24.14,33.4 45.1,64.34 64.81,94.03 -87.49,-95.75 -183.44,-179.59 -270.38,-221.91zM76.4,55.34c-1.87,0.09 -3.74,0.55 -5.53,1.41 -7.18,3.43 -10.21,12.04 -6.78,19.22 3.43,7.18 12.04,10.21 19.22,6.78 7.18,-3.43 10.21,-12.04 6.78,-19.22 -2.57,-5.38 -8.08,-8.44 -13.69,-8.19zM432.15,75.72c-1.45,0.05 -2.86,0.36 -4.16,0.97 -6.92,3.26 -8.27,13.63 -3,23.16 5.26,9.53 15.14,14.63 22.06,11.38 6.92,-3.26 8.26,-13.63 3,-23.16 -4.28,-7.74 -11.6,-12.56 -17.91,-12.34zM281.03,110.97c-1.98,0.12 -3.85,0.72 -5.44,1.78 -6.37,4.24 -6.17,14.69 0.44,23.34 6.61,8.65 17.1,12.24 23.47,8 6.37,-4.24 6.17,-14.69 -0.44,-23.34 -4.95,-6.49 -12.08,-10.15 -18.03,-9.78zM25.19,149.28c91.02,100.04 158.7,190.4 212,271.6 -8.48,-1.36 -18.44,4.95 -20.25,13.59 -6.22,29.78 12.9,53.91 47.59,61.15L390.19,495.62c-97.97,-139.74 -234.78,-282.95 -365,-346.34zM55.22,251.13c-3.81,0.08 -7.2,1.33 -9.41,3.84 -5.05,5.74 -2.15,15.78 6.47,22.44 8.62,6.65 19.7,7.4 24.75,1.66 5.05,-5.74 2.18,-15.79 -6.44,-22.44 -4.85,-3.74 -10.48,-5.6 -15.38,-5.5zM102.41,289.25c-14.89,0 -26.94,12.05 -26.94,26.94 0,14.89 12.05,26.97 26.94,26.97 14.89,0 26.97,-12.08 26.97,-26.97 0,-14.89 -12.08,-26.94 -26.97,-26.94zM182.13,392.72c-10.93,0 -19.78,8.85 -19.78,19.78 0,10.93 8.85,19.78 19.78,19.78 10.93,0 19.78,-8.85 19.78,-19.78 0,-10.93 -8.85,-19.78 -19.78,-19.78z"/>
</vector>

View file

@ -1,4 +0,0 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#000000" android:pathData="M19.75,14.44c59.54,112.29 142.51,202.35 232.28,292.72l3.63,3.75 0.06,-0.06c21.83,21.93 44.04,43.92 66.4,66.25 -18.86,14.81 -38.97,28.2 -59.94,40.31l28.53,28.53 68.72,-68.72c42.34,27.64 76.29,63.65 104.09,105.81l28.06,-28.06c-42.47,-27.49 -79.74,-60.21 -106.03,-103.88l68.94,-68.94 -28.53,-28.53c-11.11,21.85 -24.41,42.01 -39.47,60.59 -43.85,-43.8 -86.46,-85.84 -130.13,-125.47 -0.22,-0.2 -0.43,-0.42 -0.66,-0.63C183.62,122.75 108.51,63.91 19.75,14.44zM491.63,14.44c-83.04,46.28 -154.12,100.78 -221.97,161.16l22.81,21.56 56.81,-56.81 13.22,13.19 -56.44,56.44 24.59,23.19c61.8,-66.92 117.6,-136.92 160.97,-218.72zM162.1,140.34l200.56,200.53c-4.36,4.44 -8.84,8.79 -13.4,13.03L148.88,153.53l13.22,-13.19zM85.4,253.62l-28.5,28.53 68.91,68.91c-26.29,43.67 -63.53,76.41 -106,103.91l28.06,28.06c27.81,-42.16 61.76,-78.17 104.09,-105.81l68.72,68.72 28.53,-28.53c-20.96,-12.11 -41.08,-25.5 -59.94,-40.31 17.86,-17.83 35.61,-35.43 53.16,-52.97l-24.84,-25.66 -55.47,55.47c-4.57,-4.24 -9.01,-8.62 -13.37,-13.06l55.84,-55.84 -24.53,-25.37c-18.28,17.86 -36.6,36.06 -55.16,54.59 -15.07,-18.59 -28.38,-38.76 -39.5,-60.63z"/>
</vector>

View file

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:fillColor="#000000"
android:pathData="M92.41,13.02l-0.16,156.35c3.06,0.51 6.21,1.38 9.39,2.63 36.5,14.31 74.21,22.43 111.86,25.47l43.4,-60.42 42.32,58.91c36.81,-4.13 72.57,-12.5 105.97,-24.09 3.75,-1.3 7.37,-2.18 10.82,-2.6l1.52,-156.25 -75.82,95.55 -34.08,-95.55 -53.72,103.74 -53.72,-103.74 -35.44,95.55 -72.32,-95.55h-0.01zM256.9,169.09l-28.64,39.86 28.63,39.86 28.64,-39.86 -28.64,-39.86zM86.76,187.55c-2.17,-0.08 -3.84,0.27 -5.01,0.76 -2.35,0.98 -3.17,2.19 -3.5,4.2 -0.64,4.01 2.83,14.35 23.03,21.36 41.7,14.47 84.26,23.75 126.78,26.83l-17.75,-24.7c-38.77,-3.29 -77.69,-11.77 -115.5,-26.6 -3.2,-1.25 -5.88,-1.77 -8.05,-1.85zM420.04,187.74c-2.16,0.05 -5.05,0.51 -8.73,1.79 -33.58,11.65 -69.49,20.22 -106.52,24.65l-19.26,26.82c40.43,-2.6 80.43,-11.29 119.22,-26.96 15.91,-6.43 21.46,-17.81 21.36,-22.36 -0.05,-2.28 -0.28,-2.57 -1.75,-3.27 -0.74,-0.35 -2.16,-0.71 -4.31,-0.66zM401.92,235.18c-42.5,15.87 -86.26,23.86 -130.26,25.12l-14.76,20.55 -14.88,-20.71c-44.99,-1.75 -89.98,-10.23 -133.9,-24.31 -12.78,28.51 -18.94,61.14 -19.6,93.44 37.52,17.5 62.13,39.82 75.56,64.63C177,417.8 179.28,443.62 174.18,467.98c7.72,5.01 16.13,9.14 24.98,12.43l5.56,-47.89 18.56,2.15 -5.93,51.16c9.57,2.21 19.44,3.53 29.38,3.98v-54.67h18.69v54.49c9.9,-0.64 19.7,-2.13 29.16,-4.48l-5.86,-50.47 18.56,-2.15 5.44,46.85c8.75,-3.42 17,-7.64 24.51,-12.69 -5.76,-24.41 -3.77,-49.67 9.01,-72.99 13.28,-24.23 37.72,-46 74.8,-64.29 -0.62,-33.53 -6.69,-66.12 -19.11,-94.23zM135.19,282.18c34.6,0.23 68.41,12.24 101.36,36.87 -46.6,33.15 -129.79,34.37 -108.29,-36.76 2.32,-0.09 4.63,-0.13 6.93,-0.11zM378.01,282.18c2.31,-0.02 4.62,0.02 6.93,0.11 21.51,71.13 -61.68,69.9 -108.29,36.76 32.95,-24.63 66.76,-36.64 101.36,-36.87zM255.16,332.14c11.77,21.73 19.19,43.45 25.37,65.18h-50.74c4.57,-21.73 13.77,-43.45 25.37,-65.18z" />
</vector>

View file

@ -1,6 +1,6 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:width="200dp"
android:height="200dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path

View file

@ -1,4 +0,0 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#000000" android:pathData="M129.66,21.19L37.94,79.78c3.54,26.81 8.91,53.55 16.13,80.13L240.72,39.59l-19.28,-12.5c-31.28,-0.88 -62.2,-2.84 -91.78,-5.91zM383.13,21.81c-40.51,3.97 -83.5,5.94 -126.47,5.84l204.63,132.72c7.11,-25.89 12.49,-51.92 16.09,-78.03l-94.25,-60.53zM257.94,50.75L59.47,178.66c8.02,26.32 17.86,52.46 29.53,78.31l243.25,-158 -74.31,-48.22zM349.41,110.09l-74.56,48.44 151.28,98.78c11.71,-25.8 21.59,-51.91 29.69,-78.19l-106.41,-69.03zM257.72,169.66L97,274.06c12.2,25.17 26.14,50.06 41.84,74.56l196.09,-128.53 -77.22,-50.44zM352,231.22l-77.53,50.84 101.4,67.19c15.82,-24.6 29.9,-49.58 42.22,-74.88L352,231.22zM257.47,293.19l-108.35,71.03c13.56,20.06 28.33,39.85 44.28,59.31l132.03,-85.28 -67.97,-45.06zM342.44,349.5L274.5,393.41l47.03,30.38c15.85,-19.34 30.51,-38.99 44.03,-58.94L342.44,349.5zM257.47,404.38L205.5,437.97c16.23,18.93 33.61,37.54 52.16,55.78 18.39,-18.15 35.64,-36.68 51.78,-55.53l-52.09,-33.63 0.13,-0.22z"/>
</vector>

View file

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:pathData="M230.31,18.22c-38.37,0 -65.98,2.77 -85.03,8.5 -19.05,5.73 -29.25,13.7 -35.87,25.47 -12.14,21.56 -10.57,61.47 -8.38,120.59 19.88,-8.89 47.44,-11.33 78.19,-10.9 35.38,0.49 74.69,5.72 109.31,14.38 18.68,-46.79 28.3,-91.06 38,-135.34 0.55,43.8 0.98,87.61 -9.65,131.41 26.36,9.14 45.59,23.72 56.53,39.44 11.88,-31.15 20.09,-58.35 23.63,-81.09 4.29,-27.62 1.97,-48.6 -6.87,-64.41 -8.85,-15.8 -24.57,-27.57 -50.66,-35.75 -26.09,-8.18 -62.19,-12.28 -109.19,-12.28zM171.97,180.53c-9.12,0.09 -17.84,0.61 -25.94,1.47 -9.86,77.77 -11.77,156.56 -4.47,254.56 26.54,23.08 66.74,31.19 105.47,40.91 -32.55,1.31 -65.25,0.19 -98.5,-9.6 8.33,17.87 23.53,25.03 44,25.03H450.5c37.1,0 22.51,-40.21 3.09,-66.94 -22.22,-30.58 -65.65,-34.5 -101.22,-58.53l0.13,0.22c-38.97,-15.46 -77.94,0.41 -116.91,31.56 20.12,-29.93 48.29,-56.02 80.19,-56.47 3.74,-0.05 7.54,0.28 11.38,0.97 -3.08,-8.27 -5.61,-16.39 -7.66,-24.38 -33.09,-22.49 -73.68,-16.99 -118,2.5 22.38,-19.51 49.35,-35.1 75.44,-35.63 13.23,-0.27 26.24,3.35 38.31,12.28 -5.43,-35.45 -1.14,-68.74 9.44,-102.47 -4.55,-2.32 -9.48,-4.46 -14.78,-6.31l-12.38,-2.13 -2.72,9.66c-35.35,-9.93 -78.42,-16.17 -115.88,-16.69 -2.34,-0.03 -4.67,-0.05 -6.97,-0.03z"
android:fillColor="#000000"/>
</vector>

View file

@ -1,6 +0,0 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10s10,-4.48 10,-10S17.52,2 12,2zM7.35,18.5C8.66,17.56 10.26,17 12,17s3.34,0.56 4.65,1.5C15.34,19.44 13.74,20 12,20S8.66,19.44 7.35,18.5zM18.14,17.12L18.14,17.12C16.45,15.8 14.32,15 12,15s-4.45,0.8 -6.14,2.12l0,0C4.7,15.73 4,13.95 4,12c0,-4.42 3.58,-8 8,-8s8,3.58 8,8C20,13.95 19.3,15.73 18.14,17.12z"/>
<path android:fillColor="@android:color/white" android:pathData="M12,6c-1.93,0 -3.5,1.57 -3.5,3.5S10.07,13 12,13s3.5,-1.57 3.5,-3.5S13.93,6 12,6zM12,11c-0.83,0 -1.5,-0.67 -1.5,-1.5S11.17,8 12,8s1.5,0.67 1.5,1.5S12.83,11 12,11z"/>
</vector>

View file

@ -1,5 +0,0 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M20.5,3l-0.16,0.03L15,5.1 9,3 3.36,4.9c-0.21,0.07 -0.36,0.25 -0.36,0.48L3,20.5c0,0.28 0.22,0.5 0.5,0.5l0.16,-0.03L9,18.9l6,2.1 5.64,-1.9c0.21,-0.07 0.36,-0.25 0.36,-0.48L21,3.5c0,-0.28 -0.22,-0.5 -0.5,-0.5zM10,5.47l4,1.4v11.66l-4,-1.4L10,5.47zM5,6.46l3,-1.01v11.7l-3,1.16L5,6.46zM19,17.54l-3,1.01L16,6.86l3,-1.16v11.84z"/>
</vector>

View file

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M8,2C6.355,2 5,3.355 5,5L5,16L2,16L2,19C2,20.645 3.355,22 5,22L14,22L15,22C16.645,22 18,20.645 18,19L18,8L22,8L22,5C22,3.355 20.645,2 19,2L8,2zM8,4L16.188,4C16.074,4.315 16,4.648 16,5L16,19C16,19.56 15.572,19.991 15.014,19.998L15.014,19.986C14.45,19.994 14.008,19.563 14,19L13.973,16.004L13,16.014L13,16L7,16L7,5C7,4.435 7.435,4 8,4zM19,4C19.565,4 20,4.435 20,5L20,6L18,6L18,5C18,4.435 18.435,4 19,4zM4,18L11.99,18L12,19.025L12,19.027C12.005,19.37 12.081,19.694 12.193,20L5,20C4.435,20 4,19.565 4,19L4,18z"/>
</vector>

View file

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:fillColor="#FF000000"
android:pathData="m78,12 l9,70 -69,-11 41,56 -11,323c-11,13 -20,29 -25,48 74,-56 152,-72 223,-101l-36,-36c-53,25 -106,42 -142,71l9,-280 8,10 3,5h71l200,227c15,-14 29,-28 42,-45L172,156L172,84l-12,-9 273,-11c-30,37 -47,89 -71,143l36,36c30,-70 45,-148 101,-221 -19,5 -34,13 -47,23L137,57 78,12zM102,54 L153,93v55L99,148L60,97l49,8 -7,-51zM351,222c-9,13 -17,26 -27,38l31,26 34,-26 -38,-38zM451,312c-36,57 -76,100 -135,136 59,20 118,37 179,44 -9,-61 -24,-121 -44,-180zM266,317c-13,11 -27,22 -42,31l38,38c8,-15 18,-28 29,-41l-25,-28z" />
</vector>

View file

@ -1,4 +0,0 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#000000" android:pathData="M103.43,17.84c-1.12,0 -2.23,0.03 -3.35,0.08 -2.55,0.11 -5.08,0.33 -7.6,0.68 -20.17,2.75 -39.16,13.67 -52.32,33.67 -24.61,37.4 2.19,98.03 56.63,98.03 0.54,0 1.06,-0.01 1.58,-0.02v0.7h60.56c-10.76,31.99 -30.3,66.6 -52.45,101.43 -2.16,3.4 -4.25,6.88 -6.29,10.41l34.88,35.73 -56.26,9.42c-32.73,85.97 -27.42,182.07 48.28,182.07v-0l9.31,0.07c23.83,-0.57 46.73,-4.3 61.33,-12.89 4.17,-2.46 7.63,-5.24 10.47,-8.42h-32.45c-20.33,5.95 -40.8,-6.94 -47.4,-25.92 -8.96,-25.77 7.52,-52.36 31.87,-60.45 5.8,-1.93 11.72,-2.83 17.57,-2.83v-0.41h178.33c-0.57,-44.4 16.35,-90.13 49.18,-126 23.95,-26.18 42.03,-60.62 51.3,-94.85l-41.22,-24.93 38.27,-6.91 -43.37,-25.81h-0l0,-0 0,0 52.13,-8.85c-5.23,-39.13 -28.84,-68.11 -77.37,-68.11C341.14,32.26 222.11,35.29 149.34,28.5c-14.89,-6.76 -30.55,-10.72 -45.91,-10.65zM103.9,36.55c13.14,0.04 27.41,3.8 41.25,10.63l0.03,-0.07c4.67,4.74 8.54,9.74 11.68,14.98L82.92,62.09l10.57,14.78c10.61,14.83 19.8,31.99 21.09,42.02 0.64,5.02 -0.11,7.17 -1.81,8.84 -1.71,1.67 -6.23,3.88 -15.99,3.88 -40.59,0 -56.88,-44.95 -41.01,-69.06C66.24,46.64 79.58,39.22 95,37.12c2.89,-0.4 5.86,-0.58 8.89,-0.57zM118.5,80.78h46.28c4.28,15.73 3.66,33.07 -0.54,51.51L131.52,132.29c1.9,-5.03 2.27,-10.57 1.6,-15.77 -1.53,-11.91 -7.41,-24.07 -14.62,-35.74zM220.05,397.88c6.44,6.84 11.19,15.31 13.37,24.91 3.8,16.74 3.09,31.21 -1.77,43.2 -4.53,11.18 -12.58,19.79 -22.29,26h237.19c14.45,0 24.89,-5.68 32.2,-14.32 7.31,-8.64 11.2,-20.51 10.7,-32.35 -0.19,-4.47 -0.98,-8.91 -2.41,-13.18l-69.91,-8.2 42.02,-20.53c-8.32,-3.44 -18.64,-5.54 -31.38,-5.54L220.05,397.87zM177.39,398.38c-1.15,-0 -2.31,0.05 -3.46,0.15 -2.63,0.24 -5.26,0.77 -7.82,1.63 -15.11,5.02 -25.34,21.54 -20.11,36.58 3.67,10.57 15.35,17.71 25.65,13.94l1.55,-0.57h43.35c0.95,-6.36 0.75,-13.88 -1.36,-23.19 -3.71,-16.36 -20.54,-28.48 -37.81,-28.54z"/>
</vector>

View file

@ -1,4 +0,0 @@
<vector android:height="24dp" android:viewportHeight="512"
android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#000000" android:pathData="M227.4,34.7c-10.1,0 -20.2,0.2 -30.2,0.5l6.1,65.6 -61.1,-62.5c-31.3,2.5 -62.5,6.6 -93.8,12.5l34.2,28.4 -48,-0.6c35.1,100.2 6.9,182.6 -0.3,292.1L130,476.5c10,-1.3 19.9,-2.4 29.6,-3.3l21.5,-42.2 18.6,28.8 41.5,-33.5 0.8,43c82.9,-0.2 157.7,9.1 235.7,7.9 -28.2,-73 -31.2,-143.6 -31.9,-209.2l-33.3,-19.1 32.7,-33.9c-0.4,-21.3 -1.3,-42 -3.6,-61.9l-57.4,0.7 50.2,-41.7c-3.8,-15.5 -9,-30.4 -16.1,-44.7l-29.5,-23.9C335,38 281.2,34.6 227.4,34.7zM286.1,71.7c10.6,24.75 21.1,49.5 31.7,74.3 7.5,-10.5 14.9,-21 22.4,-31.5 16,27.2 32,54.3 48,81.5l-16.2,9.5 -33.3,-56.7 -42.5,59.4 -15.2,-10.9 24,-33.5 -21.9,-51.5 -24.6,40.1 12,22.6 -16.5,8.8 -18.3,-34.5 -24.8,58.2 -17.2,-7.4 32.5,-76.2 7.7,-18c4.8,9.2 9.6,18.3 14.5,27.4 12.5,-20.6 25.1,-41.11 37.7,-61.6zM91.2,128c6.72,1.6 13.4,3.4 19.2,5.3 -2.1,5.9 -4.1,11.8 -6.2,17.6 -5.79,-1.6 -11.72,-3.4 -16.9,-4.7 1.39,-6 2.62,-12.1 3.9,-18.2zM129.1,141.4c6.3,3.8 12,7.2 17,12.8L132.6,167c-4,-3.7 -8.6,-7 -12.8,-9.4zM157.8,173.7c2.1,7.4 2.1,15.7 1.6,22.5l-18.5,-2.4c0.1,-5.1 0.3,-10 -1,-14.5zM136.6,209.4l17.2,7.1c-3.3,6.6 -5.1,12.7 -8.6,17.8l-16.3,-9c2.6,-5.4 5.6,-10.8 7.7,-15.9zM120.1,243.5l17.7,6.1c-1.5,5.4 -3,11.2 -3.6,16.2l-18.6,-2c1.3,-7.5 2.1,-14 4.5,-20.3zM327.9,260.9c8.5,1 14.6,3 21.7,7.1l-9.8,16c-4.1,-2.8 -9.4,-3.8 -13.5,-4.5zM306.7,262.4c1.1,6.1 2.5,12.2 3.9,18.3 -5.9,1.3 -11.7,3.3 -16.5,5.1l-6.8,-17.4c6.7,-2.4 13.5,-4.7 19.4,-6zM268.8,278.3l11,15.1c-5.6,4 -11.8,7.8 -16.8,10.6l-8.9,-16.4c5.1,-2.9 10.6,-6.3 14.7,-9.3zM135.3,281c1.5,4.7 4.2,9.2 6.9,12.1l-13.8,12.6c-5.5,-5.7 -9.5,-13.5 -11.2,-20.1zM365.6,284.3c3.5,6.4 6.8,12.7 8.7,19.1l-17.8,5.6c-2,-5.4 -4.3,-10.8 -6.8,-14.8zM238.2,295.2l6.9,17.3c-6.4,2.7 -12.9,4.8 -18.6,6.5l-5,-18c5.9,-1.6 11.3,-3.8 16.7,-5.8zM154.4,301.4c5.3,1.7 10.8,3.4 15.7,4.2 -1.2,6.1 -2,12.3 -2.8,18.5 -7,-1 -14.5,-3.3 -20.5,-5.7zM204.4,304.9l2.8,18.5c-7.2,1.3 -13.4,1.6 -19.8,1.9l-0.4,-18.7c5.9,-0.2 11.6,-0.8 17.4,-1.7zM378.9,322.9c1,6.4 1.6,12.9 2.2,19.3l-18.7,1.5c-0.4,-6 -0.9,-11.9 -2,-17.8zM311.3,353.7c18.9,3.5 44.9,16.2 68.9,33.9 7.4,-9.9 14.4,-20.4 21.3,-31.1l30.1,12.9c-4.7,12.3 -15,25.6 -28.6,37.2 17,16.2 30.9,34.5 37,53 -13.8,-18.1 -31.1,-31.8 -50.3,-42.8 -23.4,15.8 -52.7,25.9 -79.6,20.4 22.9,-4.4 40.6,-16.6 55.8,-32.6 -16.5,-7.5 -33.8,-13.9 -51.3,-20.1z"/>
</vector>

View file

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:pathData="M128.84,16.31c-1.26,0.01 -2.52,0.04 -3.75,0.09 -19.69,0.81 -35.63,6.79 -46.63,17.78 -21.99,21.99 -23.81,63.78 -4.72,115.69s58.57,112.16 113.69,167.28c55.12,55.12 115.38,94.6 167.28,113.69 51.91,19.09 93.73,17.27 115.72,-4.72 21.99,-21.99 23.78,-63.78 4.69,-115.69 -19.09,-51.9 -58.54,-112.19 -113.66,-167.31C306.35,88.01 246.06,48.56 194.15,29.47c-24.33,-8.95 -46.42,-13.32 -65.31,-13.16zM163.81,68.47c45.35,-0.48 113.94,35.97 175.15,97.19 76.95,76.95 114.75,165.57 89.28,205 -16.35,-55.69 -56.74,-120.15 -115.44,-178.84C254.13,133.13 189.69,92.73 134,76.38c8.06,-5.2 18.17,-7.78 29.81,-7.91zM42.72,70.03L31.78,80.97c-10.99,10.99 -16.85,26.35 -17.69,46.06 -0.83,19.71 3.62,43.48 13.22,69.38C46.51,248.2 86.06,308.37 141.16,363.47c55.1,55.1 115.27,94.65 167.06,113.84 25.9,9.6 49.66,14.05 69.37,13.22 19.71,-0.83 35.08,-6.7 46.06,-17.69l10.97,-10.97c-25.29,3.14 -55.02,-1.98 -86.35,-13.5 -55.3,-20.34 -117.29,-61.23 -174.06,-118 -56.77,-56.77 -97.66,-118.73 -118,-174.03 -11.52,-31.3 -16.63,-61.03 -13.5,-86.31zM119.94,91.91c52.77,13.2 119.52,52.99 179.66,113.13 60.13,60.14 99.93,126.89 113.13,179.66 -41.03,21.15 -126.71,-16.64 -201.41,-91.34 -74.71,-74.72 -112.55,-160.42 -91.38,-201.44z"
android:fillColor="#000000"/>
</vector>