~cytrogen/vbhelper

16fbfae0c267f292d882e2962c1c4b72efceee9e — jeffersoncarlospedroso 4 months ago 0d174f1
feat(i18n): continue translation work
26 files changed, 488 insertions(+), 100 deletions(-)

M app/src/main/java/com/github/nacabaro/vbhelper/components/CharacterEntry.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/BattlesScreen.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardAdventureScreen.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardEntry.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardViewScreen.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardsScreen.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/dialogs/DexCharaDetailsDialog.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/screens/VBDiMHomeScreen.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ChooseCharacterScreen.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ItemDialog.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ItemElement.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ItemsScreen.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ItemsStore.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/MyItems.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ObtainedItemDialog.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/screens/ActionScreen.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/screens/ReadCharacterScreen.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/screens/ReadingScreen.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/screens/WriteCardScreen.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/screens/WriteCharacterScreen.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/screens/WritingScreen.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/CreditsScreen.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/storageScreen/StorageDialog.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/storageScreen/StorageScreen.kt
M app/src/main/res/values-pt-rBR/strings.xml
M app/src/main/res/values/strings.xml
M app/src/main/java/com/github/nacabaro/vbhelper/components/CharacterEntry.kt => app/src/main/java/com/github/nacabaro/vbhelper/components/CharacterEntry.kt +36 -10
@@ 36,6 36,8 @@ import com.github.cfogrady.vbnfc.vb.SpecialMission
import com.github.nacabaro.vbhelper.R
import com.github.nacabaro.vbhelper.domain.device_data.SpecialMissions
import com.github.nacabaro.vbhelper.utils.getObscuredBitmap
import androidx.compose.ui.res.stringResource


@Composable
fun CharacterEntry(


@@ 134,11 136,23 @@ fun SpecialMissionsEntry(
    onClickCard: () -> Unit = {  },
) {
    val textValue = when (specialMission.missionType) {
        SpecialMission.Type.NONE -> "No mission selected"
        SpecialMission.Type.STEPS -> "Walk ${specialMission.goal} steps"
        SpecialMission.Type.BATTLES -> "Battle ${specialMission.goal} times"
        SpecialMission.Type.WINS -> "Win ${specialMission.goal} battles"
        SpecialMission.Type.VITALS -> "Earn ${specialMission.goal} vitals"
        SpecialMission.Type.NONE -> stringResource(R.string.special_mission_none)
        SpecialMission.Type.STEPS -> stringResource(
            R.string.special_mission_steps,
            specialMission.goal
        )
        SpecialMission.Type.BATTLES -> stringResource(
            R.string.special_mission_battles,
            specialMission.goal
        )
        SpecialMission.Type.WINS -> stringResource(
            R.string.special_mission_wins,
            specialMission.goal
        )
        SpecialMission.Type.VITALS -> stringResource(
            R.string.special_mission_vitals,
            specialMission.goal
        )
    }

    val progress = if (specialMission.status == SpecialMission.Status.COMPLETED) {


@@ 149,10 163,22 @@ fun SpecialMissionsEntry(

    val completion = when (specialMission.missionType) {
        SpecialMission.Type.NONE -> ""
        SpecialMission.Type.STEPS -> "Walked $progress steps"
        SpecialMission.Type.BATTLES -> "Battled $progress times"
        SpecialMission.Type.WINS -> "Won $progress battles"
        SpecialMission.Type.VITALS -> "Earned $progress vitals"
        SpecialMission.Type.STEPS -> stringResource(
            R.string.special_mission_steps_progress,
            progress
        )
        SpecialMission.Type.BATTLES -> stringResource(
            R.string.special_mission_battles_progress,
            progress
        )
        SpecialMission.Type.WINS -> stringResource(
            R.string.special_mission_wins_progress,
            progress
        )
        SpecialMission.Type.VITALS -> stringResource(
            R.string.special_mission_vitals_progress,
            progress
        )
    }

    val icon = when (specialMission.missionType) {


@@ 193,7 219,7 @@ fun SpecialMissionsEntry(
        ) {
            Icon(
                painter = painterResource(icon),
                contentDescription = "Vitals",
                contentDescription = stringResource(R.string.special_mission_icon_content_description),
                modifier = Modifier
                    .fillMaxHeight()
                    .padding(16.dp)

M app/src/main/java/com/github/nacabaro/vbhelper/screens/BattlesScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/BattlesScreen.kt +5 -2
@@ 10,13 10,16 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import com.github.nacabaro.vbhelper.components.TopBanner
import androidx.compose.ui.res.stringResource
import com.github.nacabaro.vbhelper.R


@Composable
fun BattlesScreen() {
    Scaffold (
        topBar = {
            TopBanner(
                text = "Online battles"
                text = stringResource(R.string.battles_online_title)
            )
        }
    ) { contentPadding ->


@@ 27,7 30,7 @@ fun BattlesScreen() {
                .padding(top = contentPadding.calculateTopPadding())
                .fillMaxSize()
        ) {
            Text("Coming soon")
            Text(stringResource(R.string.battles_coming_soon))
        }
    }
}

M app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardAdventureScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardAdventureScreen.kt +4 -1
@@ 11,6 11,9 @@ import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.navigation.NavController
import com.github.nacabaro.vbhelper.components.TopBanner
import androidx.compose.ui.res.stringResource
import com.github.nacabaro.vbhelper.R


@Composable
fun CardAdventureScreen(


@@ 28,7 31,7 @@ fun CardAdventureScreen(
    Scaffold (
        topBar = {
            TopBanner(
                text = "Adventure missions",
                text = stringResource(R.string.card_adventure_missions_title),
                onBackClick = {
                    navController.popBackStack()
                }

M app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardEntry.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardEntry.kt +10 -3
@@ 24,6 24,9 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import com.github.nacabaro.vbhelper.utils.BitmapData
import com.github.nacabaro.vbhelper.utils.getBitmap
import androidx.compose.ui.res.stringResource
import com.github.nacabaro.vbhelper.R


@Composable
fun CardEntry(


@@ 75,7 78,11 @@ fun CardEntry(
                    modifier = Modifier
                )
                Text(
                    text = "$obtainedCharacters of $totalCharacters characters obtained",
                    text = stringResource(
                        R.string.card_entry_characters_obtained,
                        obtainedCharacters,
                        totalCharacters
                    ),
                    fontFamily = MaterialTheme.typography.labelSmall.fontFamily,
                    fontSize = MaterialTheme.typography.labelSmall.fontSize,
                    modifier = Modifier


@@ 91,7 98,7 @@ fun CardEntry(
                    ) {
                        Icon(
                            imageVector = Icons.Default.Edit,
                            contentDescription = "Edit"
                            contentDescription = stringResource(R.string.card_entry_edit)
                        )
                    }
                    IconButton(


@@ 99,7 106,7 @@ fun CardEntry(
                    ) {
                        Icon(
                            imageVector = Icons.Default.Delete,
                            contentDescription = "Delete"
                            contentDescription = stringResource(R.string.card_entry_delete)
                        )
                    }
                }

M app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardViewScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardViewScreen.kt +4 -1
@@ 10,6 10,7 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.navigation.NavController
import com.github.nacabaro.vbhelper.utils.BitmapData
import com.github.nacabaro.vbhelper.components.CharacterEntry


@@ 19,6 20,8 @@ import com.github.nacabaro.vbhelper.dtos.CharacterDtos
import com.github.nacabaro.vbhelper.navigation.NavigationItems
import com.github.nacabaro.vbhelper.screens.cardScreen.dialogs.DexCharaDetailsDialog
import com.github.nacabaro.vbhelper.source.DexRepository
import com.github.nacabaro.vbhelper.R


@Composable
fun CardViewScreen(


@@ 35,7 38,7 @@ fun CardViewScreen(
    Scaffold (
        topBar = {
            TopBanner(
                text = "Discovered characters",
                text = stringResource(R.string.card_view_discovered_characters),
                onBackClick = {
                    navController.popBackStack()
                },

M app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardsScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardsScreen.kt +3 -1
@@ 24,6 24,8 @@ import com.github.nacabaro.vbhelper.navigation.NavigationItems
import com.github.nacabaro.vbhelper.screens.cardScreen.dialogs.CardDeleteDialog
import com.github.nacabaro.vbhelper.screens.cardScreen.dialogs.CardRenameDialog
import com.github.nacabaro.vbhelper.source.DexRepository
import androidx.compose.ui.res.stringResource
import com.github.nacabaro.vbhelper.R

@Composable
fun CardsScreen(


@@ 43,7 45,7 @@ fun CardsScreen(
    Scaffold (
        topBar = {
            TopBanner(
                text = "My cards",
                text = stringResource(R.string.cards_my_cards_title),
                onModifyClick = {
                    modifyCards = !modifyCards
                }

M app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/dialogs/DexCharaDetailsDialog.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/dialogs/DexCharaDetailsDialog.kt +39 -13
@@ 33,7 33,8 @@ import com.github.nacabaro.vbhelper.dtos.CharacterDtos
import com.github.nacabaro.vbhelper.source.DexRepository
import com.github.nacabaro.vbhelper.utils.BitmapData
import com.github.nacabaro.vbhelper.utils.getImageBitmap

import androidx.compose.ui.res.stringResource
import com.github.nacabaro.vbhelper.R

@Composable
fun DexCharaDetailsDialog(


@@ 119,7 120,7 @@ fun DexCharaDetailsDialog(
                    ) {
                        Image(
                            bitmap = charaImageBitmapData.imageBitmap,
                            contentDescription = "Icon",
                            contentDescription = stringResource(R.string.dex_chara_icon_description),
                            modifier = Modifier
                                .size(charaImageBitmapData.dpWidth)
                                .padding(8.dp),


@@ 138,7 139,7 @@ fun DexCharaDetailsDialog(
                        Column {
                            Image(
                                bitmap = nameImageBitmapData.imageBitmap,
                                contentDescription = "Icon",
                                contentDescription = stringResource(R.string.dex_chara_name_icon_description),
                                modifier = Modifier
                                    .width(nameImageBitmapData.dpWidth)
                                    .height(nameImageBitmapData.dpHeight),


@@ 147,17 148,28 @@ fun DexCharaDetailsDialog(
                            Spacer(modifier = Modifier.padding(4.dp))
                            if (currentChara.baseHp != 65535) {
                                Text(
                                    text = "HP: ${currentChara.baseHp}, BP: ${currentChara.baseBp}, AP: ${currentChara.baseAp}"
                                    text = stringResource(
                                        R.string.dex_chara_stats,
                                        currentChara.baseHp,
                                        currentChara.baseBp,
                                        currentChara.baseAp
                                    )
                                )
                                Text(
                                    text = stringResource(
                                        R.string.dex_chara_stage_attribute,
                                        romanNumeralsStage,
                                        currentChara.attribute.toString().substring(0, 2)
                                    )
                                )
                                Text(text = "Stg: ${romanNumeralsStage}, Atr: ${currentChara.attribute.toString().substring(0, 2)}")
                            }
                        }
                    } else {
                        Column {
                            Text(text = "????????????????")
                            Text(stringResource(R.string.dex_chara_unknown_name))
                            Spacer(modifier = Modifier.padding(4.dp))
                            Text(text = "Stg: -, Atr: -")
                            Text(text = "HP: -, BP: -, AP: -")
                            Text(stringResource(R.string.dex_chara_stage_attribute_unknown))
                            Text(stringResource(R.string.dex_chara_stats_unknown))
                        }
                    }
                }


@@ 198,7 210,7 @@ fun DexCharaDetailsDialog(
                                ) {
                                    Image(
                                        bitmap = selectedCharaImageBitmap.imageBitmap,
                                        contentDescription = "Icon",
                                        contentDescription = stringResource(R.string.dex_chara_icon_description),
                                        modifier = Modifier
                                            .size(selectedCharaImageBitmap.dpWidth)
                                            .padding(8.dp),


@@ 214,8 226,22 @@ fun DexCharaDetailsDialog(
                                        .padding(16.dp)
                                )
                                Column {
                                    Text("Tr: ${it.requiredTrophies}; Bt: ${it.requiredBattles}; Vr: ${it.requiredVitals}; Wr: ${it.requiredWinRate}%; Ct: ${it.changeTimerHours}h")
                                    Text("AdvLvl ${it.requiredAdventureLevelCompleted + 1}")
                                    Text(
                                        text = stringResource(
                                            R.string.dex_chara_requirements,
                                            it.requiredTrophies,
                                            it.requiredBattles,
                                            it.requiredVitals,
                                            it.requiredWinRate,
                                            it.changeTimerHours
                                        )
                                    )
                                    Text(
                                        text = stringResource(
                                            R.string.dex_chara_adventure_level,
                                            it.requiredAdventureLevelCompleted + 1
                                        )
                                    )
                                }
                            }
                        }


@@ 229,7 255,7 @@ fun DexCharaDetailsDialog(
                                showFusions = true
                            }
                        ) {
                            Text("Fusions")
                            Text(stringResource(R.string.dex_chara_fusions_button))
                        }
                    }



@@ 241,7 267,7 @@ fun DexCharaDetailsDialog(
                    Button(
                        onClick = onClickClose
                    ) {
                        Text("Close")
                        Text(stringResource(R.string.dex_chara_close_button))
                    }
                }
            }

M app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/screens/VBDiMHomeScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/screens/VBDiMHomeScreen.kt +9 -7
@@ 25,6 25,8 @@ import com.github.nacabaro.vbhelper.dtos.ItemDtos
import com.github.nacabaro.vbhelper.screens.homeScreens.HomeScreenControllerImpl
import com.github.nacabaro.vbhelper.utils.BitmapData
import java.util.Locale
import androidx.compose.ui.res.stringResource


@Composable
fun VBDiMHomeScreen(


@@ 65,7 67,7 @@ fun VBDiMHomeScreen(
                ItemDisplay(
                    icon = R.drawable.baseline_vitals_24,
                    textValue = activeMon.vitalPoints.toString(),
                    definition = "Vitals",
                    definition = stringResource(R.string.home_vbdim_vitals),
                    modifier = Modifier
                        .weight(0.5f)
                        .aspectRatio(1f)


@@ 74,7 76,7 @@ fun VBDiMHomeScreen(
                ItemDisplay(
                    icon = R.drawable.baseline_trophy_24,
                    textValue = activeMon.trophies.toString(),
                    definition = "Trophies",
                    definition = stringResource(R.string.home_vbdim_trophies),
                    modifier = Modifier
                        .weight(0.5f)
                        .aspectRatio(1f)


@@ 89,7 91,7 @@ fun VBDiMHomeScreen(
            ItemDisplay(
                icon = R.drawable.baseline_mood_24,
                textValue = activeMon.mood.toString(),
                definition = "Mood",
                definition = stringResource(R.string.home_vbdim_mood),
                modifier = Modifier
                    .weight(1f)
                    .aspectRatio(1f)


@@ 102,7 104,7 @@ fun VBDiMHomeScreen(
                    0 -> "${activeMon.transformationCountdown} m"
                    else -> "$transformationCountdownInHours h"
                },
                definition = "Next timer",
                definition = stringResource(R.string.home_vbdim_next_timer),
                modifier = Modifier
                    .weight(1f)
                    .aspectRatio(1f)


@@ 122,7 124,7 @@ fun VBDiMHomeScreen(
                        ) + " %" // Specify locale
                    }
                },
                definition = "Total battle win %",
                definition = stringResource(R.string.home_vbdim_total_battle_win),
                modifier = Modifier
                    .weight(1f)
                    .aspectRatio(1f)


@@ 142,7 144,7 @@ fun VBDiMHomeScreen(
                        ) + " %" // Specify locale
                    }
                },
                definition = "Current phase win %",
                definition = stringResource(R.string.home_vbdim_current_phase_win),
                modifier = Modifier
                    .weight(1f)
                    .aspectRatio(1f)


@@ 165,7 167,7 @@ fun VBDiMHomeScreen(
                .padding(16.dp)
        ) {
            Text(
                text = "Special missions",
                text = stringResource(R.string.home_vbdim_special_missions),
                fontSize = 24.sp
                )
        }

M app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ChooseCharacterScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ChooseCharacterScreen.kt +4 -3
@@ 15,6 15,7 @@ import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.navigation.NavController
import com.github.nacabaro.vbhelper.components.CharacterEntry
import com.github.nacabaro.vbhelper.components.TopBanner


@@ 26,7 27,7 @@ import com.github.nacabaro.vbhelper.source.StorageRepository
import com.github.nacabaro.vbhelper.utils.BitmapData
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch

import com.github.nacabaro.vbhelper.R

@Composable
fun ChooseCharacterScreen(


@@ 69,7 70,7 @@ fun ChooseCharacterScreen(
            itemsScreenController.applyItem(itemId, selectedCharacter!!) {
                Toast.makeText(
                    application.applicationContext,
                    "Item applied!",
                    application.getString(R.string.choose_character_item_applied),
                    Toast.LENGTH_SHORT
                ).show()
                navController.popBackStack()


@@ 80,7 81,7 @@ fun ChooseCharacterScreen(
    Scaffold(
        topBar = {
            TopBanner(
                text = "Choose character",
                text = stringResource(R.string.choose_character_title),
                onBackClick = {
                    navController.popBackStack()
                }

M app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ItemDialog.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ItemDialog.kt +14 -5
@@ 17,6 17,7 @@ import androidx.compose.runtime.Composable
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.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp


@@ 27,6 28,8 @@ import com.github.nacabaro.vbhelper.domain.items.ItemType
import com.github.nacabaro.vbhelper.dtos.ItemDtos
import com.github.nacabaro.vbhelper.ui.theme.VBHelperTheme



@Composable
fun ItemDialog(
    item: ItemDtos.ItemsWithQuantities,


@@ 95,7 98,10 @@ fun ItemDialog(
                        textAlign = TextAlign.Center,
                        fontSize = MaterialTheme.typography.bodySmall.fontSize,
                        fontFamily = MaterialTheme.typography.bodySmall.fontFamily,
                        text = "Costs ${item.price} credits",
                        text = stringResource(
                            R.string.item_dialog_costs_credits,
                            item.price
                        ),
                        modifier = Modifier
                            .fillMaxWidth()
                    )


@@ 104,7 110,10 @@ fun ItemDialog(
                    textAlign = TextAlign.Center,
                    fontSize = MaterialTheme.typography.bodySmall.fontSize,
                    fontFamily = MaterialTheme.typography.bodySmall.fontFamily,
                    text = "You have ${item.quantity} of this item",
                    text = stringResource(
                        R.string.item_dialog_you_have_quantity,
                        item.quantity
                    ),
                    modifier = Modifier
                        .fillMaxWidth()
                )


@@ 118,7 127,7 @@ fun ItemDialog(
                        Button(
                            onClick = onClickUse
                        ) {
                            Text("Use item")
                            Text(stringResource(R.string.item_dialog_use))
                        }
                    }



@@ 126,7 135,7 @@ fun ItemDialog(
                        Button(
                            onClick = onClickPurchase
                        ) {
                            Text("Purchase")
                            Text(stringResource(R.string.item_dialog_purchase))
                        }
                    }



@@ 134,7 143,7 @@ fun ItemDialog(
                    Button(
                        onClick = onClickCancel
                    ) {
                        Text("Cancel")
                        Text(stringResource(R.string.item_dialog_cancel))
                    }
                }
            }

M app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ItemElement.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ItemElement.kt +1 -0
@@ 14,6 14,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import com.github.nacabaro.vbhelper.dtos.ItemDtos
import com.github.nacabaro.vbhelper.R

@Composable
fun ItemElement(

M app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ItemsScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ItemsScreen.kt +3 -1
@@ 18,6 18,8 @@ import androidx.navigation.NavController
import com.github.nacabaro.vbhelper.components.TopBanner
import com.github.nacabaro.vbhelper.navigation.NavigationItems
import androidx.compose.ui.res.stringResource
import com.github.nacabaro.vbhelper.R


@Composable
fun ItemsScreen(


@@ 31,7 33,7 @@ fun ItemsScreen(
    Scaffold(
        topBar = {
            Column {
                TopBanner("Items")
                TopBanner(text = stringResource(R.string.items_title))
                TabRow(
                    selectedTabIndex = selectedTabItem,
                    modifier = Modifier

M app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ItemsStore.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ItemsStore.kt +18 -12
@@ 21,6 21,7 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import com.github.nacabaro.vbhelper.database.AppDatabase


@@ 30,6 31,7 @@ import com.github.nacabaro.vbhelper.source.CurrencyRepository
import com.github.nacabaro.vbhelper.source.ItemsRepository
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import com.github.nacabaro.vbhelper.R

@Composable
fun ItemsStore(


@@ 52,7 54,7 @@ fun ItemsStore(
            horizontalAlignment = Alignment.CenterHorizontally,
            modifier = Modifier.fillMaxSize()
        ) {
            Text("No items")
            Text(stringResource(R.string.items_no_items))
        }
    } else {
        Column() {


@@ 62,7 64,10 @@ fun ItemsStore(
                    .fillMaxWidth()
            ) {
                Text(
                    text = "${currentCurrency.value} credits",
                    text = stringResource(
                        R.string.items_store_credits,
                        currentCurrency.value
                    ),
                    modifier = Modifier
                        .padding(8.dp)
                )


@@ 94,14 99,15 @@ fun ItemsStore(
                scope.launch {
                    Toast.makeText(
                        application.applicationContext,
                        purchaseItem(
                            application.container.db,
                            myItems[selectedElementIndex!!],
                            currencyRepository
                        application.getString(
                            purchaseItem(
                                application.container.db,
                                myItems[selectedElementIndex!!],
                                currencyRepository
                            )
                        ),
                        Toast.LENGTH_SHORT
                    ).show(
                    )
                    ).show()
                }
            },
            onClickCancel = { selectedElementIndex = null }


@@ 113,9 119,9 @@ suspend fun purchaseItem(
    db: AppDatabase,
    item: ItemDtos.ItemsWithQuantities,
    currencyRepository: CurrencyRepository
): String {
    if (currencyRepository.currencyValue.first() < item.price) {
        return "Not enough credits"
): Int {
    return if (currencyRepository.currencyValue.first() < item.price) {
        R.string.items_not_enough_credits
    } else {
        db
            .itemDao()


@@ 129,6 135,6 @@ suspend fun purchaseItem(
                currencyRepository.currencyValue.first() - item.price
            )

        return "Purchase successful!"
        R.string.items_purchase_success
    }
}
\ No newline at end of file

M app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/MyItems.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/MyItems.kt +4 -1
@@ 17,11 17,14 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import com.github.nacabaro.vbhelper.di.VBHelper
import com.github.nacabaro.vbhelper.navigation.NavigationItems
import com.github.nacabaro.vbhelper.source.ItemsRepository
import com.github.nacabaro.vbhelper.R


@Composable
fun MyItems(


@@ 39,7 42,7 @@ fun MyItems(
            horizontalAlignment = Alignment.CenterHorizontally,
            modifier = Modifier.fillMaxSize()
        ) {
            Text("No items")
            Text(stringResource(R.string.items_no_items))
        }
    } else {
        LazyVerticalGrid(

M app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ObtainedItemDialog.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ObtainedItemDialog.kt +11 -3
@@ 19,6 19,8 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import com.github.nacabaro.vbhelper.dtos.ItemDtos
import androidx.compose.ui.res.stringResource
import com.github.nacabaro.vbhelper.R

@Composable
fun ObtainedItemDialog(


@@ 82,7 84,10 @@ fun ObtainedItemDialog(
                        textAlign = TextAlign.Center,
                        fontSize = MaterialTheme.typography.bodySmall.fontSize,
                        fontFamily = MaterialTheme.typography.bodySmall.fontFamily,
                        text = "You have obtained ${obtainedItem.itemAmount} of this item",
                        text = stringResource(
                            R.string.obtained_item_you_have,
                            obtainedItem.itemAmount
                        ),
                        modifier = Modifier
                            .fillMaxWidth()
                            .padding(top = 4.dp)


@@ 91,7 96,10 @@ fun ObtainedItemDialog(
                        textAlign = TextAlign.Center,
                        fontSize = MaterialTheme.typography.bodySmall.fontSize,
                        fontFamily = MaterialTheme.typography.bodySmall.fontFamily,
                        text = "You also got $obtainedCurrency credits",
                        text = stringResource(
                            R.string.obtained_item_you_also_got_credits,
                            obtainedCurrency
                        ),
                        modifier = Modifier
                            .fillMaxWidth()
                            .padding(bottom = 4.dp)


@@ 101,7 109,7 @@ fun ObtainedItemDialog(
                        modifier = Modifier
                            .fillMaxWidth()
                    ) {
                        Text(text = "Dismiss")
                        Text(text = stringResource(R.string.obtained_item_dismiss))
                    }
                }
            }

M app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/screens/ActionScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/screens/ActionScreen.kt +4 -2
@@ 10,8 10,10 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.github.nacabaro.vbhelper.components.TopBanner
import com.github.nacabaro.vbhelper.R

@Composable
fun ActionScreen(


@@ 33,12 35,12 @@ fun ActionScreen(
                .padding(innerPadding)
                .fillMaxSize()
        ) {
            Text("Place your Vital Bracelet near the reader...")
            Text(stringResource(R.string.action_place_near_reader))
            Button(
                onClick = onClickCancel,
                modifier = Modifier.padding(16.dp)
            ) {
                Text("Cancel")
                Text(stringResource(R.string.action_cancel))
            }
        }
    }

M app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/screens/ReadCharacterScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/screens/ReadCharacterScreen.kt +6 -4
@@ 11,9 11,11 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import com.github.nacabaro.vbhelper.components.TopBanner
import com.github.nacabaro.vbhelper.R

@Composable
fun ReadCharacterScreen(


@@ 23,7 25,7 @@ fun ReadCharacterScreen(
    Scaffold(
        topBar = {
            TopBanner(
                text = "Read character",
                text = stringResource(R.string.read_character_title),
                onBackClick = onClickCancel
            )
        }


@@ 36,12 38,12 @@ fun ReadCharacterScreen(
                .fillMaxSize()
        ) {
            Text(
                text = "Prepare your device!",
                text = stringResource(R.string.read_character_prepare_device),
                textAlign = TextAlign.Center
            )

            Text(
                text = "Go to connect and when ready press confirm!",
                text = stringResource(R.string.read_character_go_to_connect),
                textAlign = TextAlign.Center
            )



@@ 52,7 54,7 @@ fun ReadCharacterScreen(
            Button(
                onClick = onClickConfirm,
            ) {
                Text("Confirm")
                Text(stringResource(R.string.read_character_confirm))
            }
        }
    }

M app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/screens/ReadingScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/screens/ReadingScreen.kt +4 -1
@@ 7,11 7,14 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.res.stringResource
import com.github.nacabaro.vbhelper.ActivityLifecycleListener
import com.github.nacabaro.vbhelper.domain.card.Card
import com.github.nacabaro.vbhelper.screens.cardScreen.ChooseCard
import com.github.nacabaro.vbhelper.screens.scanScreen.SCAN_SCREEN_ACTIVITY_LIFECYCLE_LISTENER
import com.github.nacabaro.vbhelper.screens.scanScreen.ScanScreenController
import com.github.nacabaro.vbhelper.R


@Composable
fun ReadingScreen(


@@ 92,7 95,7 @@ fun ReadingScreen(
    }

    if (readingScreen) {
        ActionScreen("Reading character") {
        ActionScreen(topBannerText = stringResource(R.string.reading_character_title),) {
            readingScreen = false
            scanScreenController.cancelRead()
            onCancel()

M app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/screens/WriteCardScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/screens/WriteCardScreen.kt +15 -5
@@ 24,6 24,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.FilterQuality
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.github.nacabaro.vbhelper.components.TopBanner
import com.github.nacabaro.vbhelper.di.VBHelper


@@ 31,6 32,7 @@ import com.github.nacabaro.vbhelper.domain.card.Card
import com.github.nacabaro.vbhelper.source.ScanRepository
import com.github.nacabaro.vbhelper.utils.BitmapData
import com.github.nacabaro.vbhelper.utils.getImageBitmap
import com.github.nacabaro.vbhelper.R

@Composable
fun WriteCardScreen(


@@ 55,7 57,7 @@ fun WriteCardScreen(
    Scaffold(
        topBar = {
            TopBanner(
                text = "Writing card details",
                text = stringResource(R.string.write_card_title),
                onBackClick = onClickCancel
            )
        }


@@ 101,7 103,9 @@ fun WriteCardScreen(
                        ) {
                            Image(
                                bitmap = charaImageBitmapData.imageBitmap,
                                contentDescription = "Icon",
                                contentDescription =  stringResource(
                                    R.string.write_card_icon_description
                                ),
                                modifier = Modifier
                                    .size(charaImageBitmapData.dpWidth)
                                    .padding(8.dp),


@@ 115,8 119,14 @@ fun WriteCardScreen(
                    )

                    Column {
                        Text("Get your device Ready!")
                        Text("You will need ${cardDetails.name} card!")
                        Text(stringResource(R.string.write_card_device_ready))
                        Text(
                            stringResource(
                                R.string.write_card_required_card,
                                cardDetails.name
                            )
                        )

                    }
                }



@@ 125,7 135,7 @@ fun WriteCardScreen(
            Button(
                onClick = onClickConfirm,
            ) {
                Text("Confirm")
                Text(stringResource(R.string.write_card_confirm))
            }
        }
    }

M app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/screens/WriteCharacterScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/screens/WriteCharacterScreen.kt +8 -5
@@ 25,6 25,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.FilterQuality
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.github.nacabaro.vbhelper.components.TopBanner
import com.github.nacabaro.vbhelper.di.VBHelper


@@ 32,6 33,8 @@ import com.github.nacabaro.vbhelper.domain.card.Card
import com.github.nacabaro.vbhelper.source.ScanRepository
import com.github.nacabaro.vbhelper.utils.BitmapData
import com.github.nacabaro.vbhelper.utils.getImageBitmap
import com.github.nacabaro.vbhelper.R


@Composable
fun WriteCharacterScreen(


@@ 56,7 59,7 @@ fun WriteCharacterScreen(
    Scaffold(
        topBar = {
            TopBanner(
                text = "Writing character",
                text = stringResource(R.string.write_character_title),
                onBackClick = onClickCancel
            )
        }


@@ 102,7 105,7 @@ fun WriteCharacterScreen(
                        ) {
                            Image(
                                bitmap = charaImageBitmapData.imageBitmap,
                                contentDescription = "Icon",
                                contentDescription = stringResource(R.string.write_character_icon_description),
                                modifier = Modifier
                                    .size(charaImageBitmapData.dpWidth)
                                    .padding(8.dp),


@@ 116,8 119,8 @@ fun WriteCharacterScreen(
                    )

                    Column {
                        Text("Card installed successfully!!")
                        Text("Wait until your device is ready, then tap 'Confirm'")
                        Text(stringResource(R.string.write_character_success))
                        Text(stringResource(R.string.write_character_wait_ready))
                    }
                }



@@ 128,7 131,7 @@ fun WriteCharacterScreen(
            Button(
                onClick = onClickConfirm,
            ) {
                Text("Confirm")
                Text(stringResource(R.string.write_character_confirm))
            }
        }
    }

M app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/screens/WritingScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/screens/WritingScreen.kt +4 -2
@@ 17,6 17,8 @@ import com.github.nacabaro.vbhelper.screens.scanScreen.ScanScreenController
import com.github.nacabaro.vbhelper.source.StorageRepository
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import androidx.compose.ui.res.stringResource
import com.github.nacabaro.vbhelper.R

@Composable
fun WritingScreen(


@@ 97,7 99,7 @@ fun WritingScreen(
        )
    } else if (!isDoneSendingCard) {
        writing = true
        ActionScreen("Sending card") {
        ActionScreen( topBannerText = stringResource(R.string.sending_card_title)) {
            scanScreenController.cancelRead()
            onCancel()
        }


@@ 115,7 117,7 @@ fun WritingScreen(
        )
    } else if (!isDoneWritingCharacter) {
        writing = true
        ActionScreen("Writing character") {
        ActionScreen(topBannerText = stringResource(R.string.writing_character_action_title)) {
            isDoneSendingCard = false
            scanScreenController.cancelRead()
            onCancel()

M app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/CreditsScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/CreditsScreen.kt +10 -8
@@ 6,8 6,10 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.navigation.NavController
import com.github.nacabaro.vbhelper.components.TopBanner
import com.github.nacabaro.vbhelper.R

@Composable
fun CreditsScreen(


@@ 16,7 18,7 @@ fun CreditsScreen(
    Scaffold (
        topBar = {
            TopBanner(
                text = "Credits",
                text = stringResource(R.string.credits_title),
                onBackClick = {
                    navController.popBackStack()
                }


@@ 29,13 31,13 @@ fun CreditsScreen(
            modifier = Modifier
                .padding(top = contentPadding.calculateTopPadding())
        ) {
            SettingsSection("Reverse engineering")
            SettingsEntry(title = "cyanic", description = "Reversed the firmware and helped us during development.") { }
            SettingsSection("Application development")
            SettingsEntry(title = "cfogrady", description = "Developed vb-lib-nfc and part of this application.") { }
            SettingsEntry(title = "nacabaro", description = "Developed this application.") { }
            SettingsEntry(title = "lightheel", description = "Developing the battling part for this application, including server. Still in the works.") { }
            SettingsEntry(title = "shvstrz", description = "Designing the app icon in SVG.") { }
            SettingsSection(stringResource(R.string.credits_section_reverse_engineering))
            SettingsEntry(title = "cyanic", description = stringResource(R.string.credits_cyanic_description)) { }
            SettingsSection(stringResource(R.string.credits_section_app_development))
            SettingsEntry(title = "cfogrady", description = stringResource(R.string.credits_cfogrady_description)) { }
            SettingsEntry(title = "nacabaro", description = stringResource(R.string.credits_nacabaro_description)) { }
            SettingsEntry(title = "lightheel", description = stringResource(R.string.credits_lightheel_description)) { }
            SettingsEntry(title = "shvstrz", description = stringResource(R.string.credits_shvstrz_description)) { }
        }
    }
}
\ No newline at end of file

M app/src/main/java/com/github/nacabaro/vbhelper/screens/storageScreen/StorageDialog.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/storageScreen/StorageDialog.kt +10 -7
@@ 33,6 33,9 @@ import com.github.nacabaro.vbhelper.source.StorageRepository
import com.github.nacabaro.vbhelper.utils.BitmapData
import com.github.nacabaro.vbhelper.utils.getBitmap
import kotlinx.coroutines.launch
import androidx.compose.ui.res.stringResource
import com.github.nacabaro.vbhelper.R


@Composable
fun StorageDialog(


@@ 94,7 97,7 @@ fun StorageDialog(
                        val dpSize = (characterSprite.value!!.width * 4 / density).dp
                        Image(
                            bitmap = imageBitmap,
                            contentDescription = "Character image",
                            contentDescription = stringResource(R.string.storage_character_image_description),
                            filterQuality = FilterQuality.None,
                            modifier = Modifier
                                .size(dpSize)


@@ 104,7 107,7 @@ fun StorageDialog(
                        val nameDpSize = (characterName.value!!.width * 4 / density).dp
                        Image(
                            bitmap = nameImageBitmap,
                            contentDescription = "Character image",
                            contentDescription = stringResource(R.string.storage_character_image_description),
                            filterQuality = FilterQuality.None,
                            modifier = Modifier
                                .size(nameDpSize)


@@ 121,7 124,7 @@ fun StorageDialog(
                        modifier = Modifier
                            .weight(1f)
                    ) {
                        Text(text = "Send to watch")
                        Text(text = stringResource(R.string.storage_send_to_watch))
                    }
                    Spacer(
                        modifier = Modifier


@@ 130,7 133,7 @@ fun StorageDialog(
                    Button(
                        onClick = onClickSetActive,
                    ) {
                        Text(text = "Set active")
                        Text(text = stringResource(R.string.storage_set_active))
                    }
                }
                Button(


@@ 140,21 143,21 @@ fun StorageDialog(
                    modifier = Modifier
                        .fillMaxWidth()
                ) {
                    Text(text = "Send on adventure")
                    Text(text = stringResource(R.string.storage_send_on_adventure))
                }
                Button(
                    modifier = Modifier
                        .fillMaxWidth(),
                    onClick = onClickDelete
                ) {
                    Text(text = "Delete character")
                    Text(text = stringResource(R.string.storage_delete_character))
                }
                Button(
                    modifier = Modifier
                        .fillMaxWidth(),
                    onClick = onDismissRequest
                ) {
                    Text(text = "Close")
                    Text(text = stringResource(R.string.storage_close))
                }
            }
        }

M app/src/main/java/com/github/nacabaro/vbhelper/screens/storageScreen/StorageScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/storageScreen/StorageScreen.kt +5 -3
@@ 34,6 34,8 @@ import com.github.nacabaro.vbhelper.navigation.NavigationItems
import com.github.nacabaro.vbhelper.screens.adventureScreen.AdventureScreenControllerImpl
import com.github.nacabaro.vbhelper.source.StorageRepository
import com.github.nacabaro.vbhelper.utils.BitmapData
import androidx.compose.ui.res.stringResource
import com.github.nacabaro.vbhelper.R


@Composable


@@ 51,7 53,7 @@ fun StorageScreen(
    Scaffold (
        topBar = {
            TopBanner(
                text = "My characters",
                text = stringResource(R.string.storage_my_characters_title),
                onAdventureClick = {
                    navController.navigate(NavigationItems.Adventure.route)
                }


@@ 67,7 69,7 @@ fun StorageScreen(
                    .fillMaxSize()
            ) {
                Text(
                    text = "Nothing to see here",
                    text = stringResource(R.string.storage_nothing_to_see_here),
                    textAlign = TextAlign.Center,
                    modifier = Modifier
                )


@@ 92,7 94,7 @@ fun StorageScreen(
                            } else {
                                Toast.makeText(
                                    application,
                                    "This character is in an adventure",
                                    application.getString(R.string.storage_in_adventure_toast),
                                    Toast.LENGTH_SHORT
                                ).show()
                                navController.navigate(

M app/src/main/res/values-pt-rBR/strings.xml => app/src/main/res/values-pt-rBR/strings.xml +128 -0
@@ 89,4 89,132 @@
    <string name="settings_import_data_desc">
        Importar banco de dados do aplicativo
    </string>

    <string name="credits_title">Créditos</string>
    <string name="credits_section_reverse_engineering">Engenharia reversa</string>
    <string name="credits_section_app_development">Desenvolvimento do aplicativo</string>

    <string name="credits_cyanic_description">
        Reverteu o firmware e nos ajudou durante o desenvolvimento.
    </string>
    <string name="credits_cfogrady_description">
        Desenvolveu vb-lib-nfc e parte deste aplicativo.
    </string>
    <string name="credits_nacabaro_description">
        Desenvolveu este aplicativo.
    </string>
    <string name="credits_lightheel_description">
        Está desenvolvendo a parte de batalhas deste aplicativo, incluindo o servidor. Ainda em desenvolvimento.
    </string>
    <string name="credits_shvstrz_description">
        Responsável pelo design do ícone do aplicativo em SVG.
    </string>

    <string name="action_place_near_reader">Aproxime o seu Vital Bracelet do leitor...</string>
    <string name="action_cancel">Cancelar</string>

    <string name="read_character_title">Ler personagem</string>
    <string name="read_character_prepare_device">Prepare seu dispositivo!</string>
    <string name="read_character_go_to_connect">Vá em conectar e, quando estiver pronto, pressione confirmar!</string>
    <string name="read_character_confirm">Confirmar</string>

    <string name="reading_character_title">Lendo personagem</string>

    <string name="write_card_title">Escrevendo detalhes do cartão</string>
    <string name="write_card_icon_description">Ícone do cartão</string>
    <string name="write_card_device_ready">Prepare o seu dispositivo!</string>
    <string name="write_card_required_card">Você vai precisar do cartão %1$s!</string>
    <string name="write_card_confirm">Confirmar</string>

    <string name="write_character_title">Escrevendo personagem</string>
    <string name="write_character_icon_description">Ícone do personagem</string>
    <string name="write_character_success">
        Cartão instalado com sucesso!!
    </string>
    <string name="write_character_wait_ready">
        Aguarde até que seu dispositivo esteja pronto e então toque em Confirmar
    </string>
    <string name="write_character_confirm">Confirmar</string>

    <string name="sending_card_title">Enviando cartão</string>
    <string name="writing_character_action_title">Escrevendo personagem</string>

    <string name="items_title">Itens</string>
    <string name="items_no_items">Nenhum item</string>

    <string name="items_store_credits">%1$d créditos</string>
    <string name="items_not_enough_credits">Créditos insuficientes</string>
    <string name="items_purchase_success">Compra realizada com sucesso!</string>

    <string name="obtained_item_you_have">Você obteve %1$d deste item</string>
    <string name="obtained_item_you_also_got_credits">Você também recebeu %1$d créditos</string>
    <string name="obtained_item_dismiss">Fechar</string>

    <string name="choose_character_title">Escolher personagem</string>
    <string name="choose_character_item_applied">Item aplicado!</string>

    <string name="item_dialog_costs_credits">Custa %1$d créditos</string>
    <string name="item_dialog_you_have_quantity">Você tem %1$d deste item</string>
    <string name="item_dialog_use">Usar item</string>
    <string name="item_dialog_purchase">Comprar</string>
    <string name="item_dialog_cancel">Cancelar</string>

    <string name="battles_online_title">Batalhas online</string>
    <string name="battles_coming_soon">Em breve</string>

    <string name="cards_my_cards_title">Meus cards</string>

    <string name="card_view_discovered_characters">Personagens descobertos</string>

    <string name="dex_chara_icon_description">Ícone do personagem</string>
    <string name="dex_chara_name_icon_description">Nome do personagem</string>
    <string name="dex_chara_stats">HP: %1$d, BP: %2$d, AP: %3$d</string>
    <string name="dex_chara_stage_attribute">Stg: %1$s, Atr: %2$s</string>
    <string name="dex_chara_unknown_name">\?\?\?\?\?\?\?\?\?\?\?\?\?\?\?\?</string>
    <string name="dex_chara_stage_attribute_unknown">Stg: -, Atr: -</string>
    <string name="dex_chara_stats_unknown">HP: -, BP: -, AP: -</string>
    <string name="dex_chara_requirements">
        Tr: %1$d; Bt: %2$d; Vr: %3$d; Wr: %4$d%%; Ct: %5$dh
    </string>
    <string name="dex_chara_adventure_level">AdvLvl %1$d</string>
    <string name="dex_chara_fusions_button">Fusões</string>
    <string name="dex_chara_close_button">Fechar</string>

    <string name="card_adventure_missions_title">Missões de aventura</string>

    <string name="card_entry_characters_obtained">%1$d de %2$d personagens obtidos</string>
    <string name="card_entry_edit">Editar card</string>
    <string name="card_entry_delete">Excluir card</string>

    <string name="storage_my_characters_title">Meus personagens</string>
    <string name="storage_nothing_to_see_here">Nada para ver aqui</string>
    <string name="storage_in_adventure_toast">Este personagem está em uma aventura</string>

    <string name="storage_character_image_description">Imagem do personagem</string>
    <string name="storage_send_to_watch">Enviar para o relógio</string>
    <string name="storage_set_active">Definir como ativo</string>
    <string name="storage_send_on_adventure">Enviar para aventura</string>
    <string name="storage_delete_character">Excluir personagem</string>
    <string name="storage_close">Fechar</string>

    <string name="home_vbdim_vitals">Vitais</string>
    <string name="home_vbdim_trophies">Troféus</string>
    <string name="home_vbdim_mood">Humor</string>
    <string name="home_vbdim_next_timer">Próximo timer</string>
    <string name="home_vbdim_total_battle_win">% vitórias totais</string>
    <string name="home_vbdim_current_phase_win">% vitórias fase atual</string>
    <string name="home_vbdim_special_missions">Missões especiais</string>

    <string name="special_mission_none">Nenhuma missão selecionada</string>
    <string name="special_mission_steps">Ande %1$d passos</string>
    <string name="special_mission_battles">Lute %1$d vezes</string>
    <string name="special_mission_wins">Vença %1$d batalhas</string>
    <string name="special_mission_vitals">Ganhe %1$d vitals</string>
    <string name="special_mission_steps_progress">Andou %1$d passos</string>
    <string name="special_mission_battles_progress">Lutou %1$d vezes</string>
    <string name="special_mission_wins_progress">Venceu %1$d batalhas</string>
    <string name="special_mission_vitals_progress">Ganhou %1$d vitals</string>
    <string name="special_mission_icon_content_description">Ícone de missão especial</string>


</resources>
\ No newline at end of file

M app/src/main/res/values/strings.xml => app/src/main/res/values/strings.xml +129 -0
@@ 94,4 94,133 @@
    <string name="settings_import_data_desc">
        Import application database
    </string>

    <string name="credits_title">Credits</string>
    <string name="credits_section_reverse_engineering">Reverse engineering</string>
    <string name="credits_section_app_development">Application development</string>

    <string name="credits_cyanic_description">
        Reversed the firmware and helped us during development.
    </string>
    <string name="credits_cfogrady_description">
        Developed vb-lib-nfc and part of this application.
    </string>
    <string name="credits_nacabaro_description">
        Developed this application.
    </string>
    <string name="credits_lightheel_description">
        Developing the battling part for this application, including server. Still in the works.
    </string>
    <string name="credits_shvstrz_description">
        Designing the app icon in SVG.
    </string>

    <string name="action_place_near_reader">Place your Vital Bracelet near the reader...</string>
    <string name="action_cancel">Cancel</string>

    <string name="read_character_title">Read character</string>
    <string name="read_character_prepare_device">Prepare your device!</string>
    <string name="read_character_go_to_connect">Go to connect and when ready press confirm!</string>
    <string name="read_character_confirm">Confirm</string>

    <string name="reading_character_title">Reading character</string>

    <string name="write_card_title">Writing card details</string>
    <string name="write_card_icon_description">Card icon</string>
    <string name="write_card_device_ready">Get your device ready!</string>
    <string name="write_card_required_card">You will need %1$s card!</string>
    <string name="write_card_confirm">Confirm</string>


    <string name="write_character_title">Writing character</string>
    <string name="write_character_icon_description">Character icon</string>
    <string name="write_character_success">
        Card installed successfully!!
    </string>
    <string name="write_character_wait_ready">
        Wait until your device is ready, then tap Confirm
    </string>
    <string name="write_character_confirm">Confirm</string>

    <string name="sending_card_title">Sending card</string>
    <string name="writing_character_action_title">Writing character</string>

    <string name="items_title">Items</string>
    <string name="items_no_items">No items</string>

    <string name="items_store_credits">%1$d credits</string>
    <string name="items_not_enough_credits">Not enough credits</string>
    <string name="items_purchase_success">Purchase successful!</string>

    <string name="obtained_item_you_have">You have obtained %1$d of this item</string>
    <string name="obtained_item_you_also_got_credits">You also got %1$d credits</string>
    <string name="obtained_item_dismiss">Dismiss</string>

    <string name="choose_character_title">Choose character</string>
    <string name="choose_character_item_applied">Item applied!</string>

    <string name="item_dialog_costs_credits">Costs %1$d credits</string>
    <string name="item_dialog_you_have_quantity">You have %1$d of this item</string>
    <string name="item_dialog_use">Use item</string>
    <string name="item_dialog_purchase">Purchase</string>
    <string name="item_dialog_cancel">Cancel</string>

    <string name="battles_online_title">Online battles</string>
    <string name="battles_coming_soon">Coming soon</string>

    <string name="cards_my_cards_title">My cards</string>

    <string name="card_view_discovered_characters">Discovered characters</string>


    <string name="dex_chara_icon_description">Character icon</string>
    <string name="dex_chara_name_icon_description">Character name</string>
    <string name="dex_chara_stats">HP: %1$d, BP: %2$d, AP: %3$d</string>
    <string name="dex_chara_stage_attribute">Stg: %1$s, Atr: %2$s</string>
    <string name="dex_chara_unknown_name">\?\?\?\?\?\?\?\?\?\?\?\?\?\?\?\?</string>
    <string name="dex_chara_stage_attribute_unknown">Stg: -, Atr: -</string>
    <string name="dex_chara_stats_unknown">HP: -, BP: -, AP: -</string>
    <string name="dex_chara_requirements">
        Tr: %1$d; Bt: %2$d; Vr: %3$d; Wr: %4$d%%; Ct: %5$dh
    </string>
    <string name="dex_chara_adventure_level">AdvLvl %1$d</string>
    <string name="dex_chara_fusions_button">Fusions</string>
    <string name="dex_chara_close_button">Close</string>

    <string name="card_adventure_missions_title">Adventure missions</string>

    <string name="card_entry_characters_obtained">%1$d of %2$d characters obtained</string>
    <string name="card_entry_edit">Edit card</string>
    <string name="card_entry_delete">Delete card</string>

    <string name="storage_my_characters_title">My characters</string>
    <string name="storage_nothing_to_see_here">Nothing to see here</string>
    <string name="storage_in_adventure_toast">This character is in an adventure</string>

    <string name="storage_character_image_description">Character image</string>
    <string name="storage_send_to_watch">Send to watch</string>
    <string name="storage_set_active">Set active</string>
    <string name="storage_send_on_adventure">Send on adventure</string>
    <string name="storage_delete_character">Delete character</string>
    <string name="storage_close">Close</string>

    <string name="home_vbdim_vitals">Vitals</string>
    <string name="home_vbdim_trophies">Trophies</string>
    <string name="home_vbdim_mood">Mood</string>
    <string name="home_vbdim_next_timer">Next timer</string>
    <string name="home_vbdim_total_battle_win">Total battle win %</string>
    <string name="home_vbdim_current_phase_win">Current phase win %</string>
    <string name="home_vbdim_special_missions">Special missions</string>

    <string name="special_mission_none">No mission selected</string>
    <string name="special_mission_steps">Walk %1$d steps</string>
    <string name="special_mission_battles">Battle %1$d times</string>
    <string name="special_mission_wins">Win %1$d battles</string>
    <string name="special_mission_vitals">Earn %1$d vitals</string>
    <string name="special_mission_steps_progress">Walked %1$d steps</string>
    <string name="special_mission_battles_progress">Battled %1$d times</string>
    <string name="special_mission_wins_progress">Won %1$d battles</string>
    <string name="special_mission_vitals_progress">Earned %1$d vitals</string>
    <string name="special_mission_icon_content_description">Special mission icon</string>

</resources>
\ No newline at end of file