~cytrogen/vbhelper

4d8dcde26e1c80c85305abe6736f9f9d48bc95fb — Nacho 8 months ago 0b1eed7
Forgot to add all the UI methods to preview VB characters
M app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/HomeScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/HomeScreen.kt +7 -1
@@ 1,5 1,6 @@
package com.github.nacabaro.vbhelper.screens.homeScreens

import android.util.Log
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize


@@ 51,9 52,12 @@ fun HomeScreen(
    LaunchedEffect(storageRepository, activeMon) {
        withContext(Dispatchers.IO) {
            activeMon.value = storageRepository.getActiveCharacter()
            if (activeMon.value != null) {
            if (activeMon.value != null && activeMon.value!!.characterType == DeviceType.BEDevice) {
                beData.value = storageRepository.getCharacterBeData(activeMon.value!!.id)
                transformationHistory.value = storageRepository.getTransformationHistory(activeMon.value!!.id)
            } else if (activeMon.value != null && activeMon.value!!.characterType == DeviceType.VBDevice) {
                vbData.value = storageRepository.getCharacterVbData(activeMon.value!!.id)
                transformationHistory.value = storageRepository.getTransformationHistory(activeMon.value!!.id)
            }
        }
    }


@@ 79,6 83,7 @@ fun HomeScreen(
        }
    ) { contentPadding ->
        if (activeMon.value == null || (beData.value == null && vbData.value == null) || transformationHistory.value == null) {
            Log.d("TetTet", "Something is null")
            Column (
                horizontalAlignment = Alignment.CenterHorizontally,
                verticalArrangement = Arrangement.Center,


@@ 89,6 94,7 @@ fun HomeScreen(
                Text(text = "Nothing to see here")
            }
        } else {
            Log.d("TetTet", "Something is not null")
            if (activeMon.value!!.isBemCard) {
                BEBEmHomeScreen(
                    activeMon = activeMon.value!!,

M app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/VBDiMHomeScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/VBDiMHomeScreen.kt +140 -1
@@ 1,9 1,24 @@
package com.github.nacabaro.vbhelper.screens.homeScreens

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.github.nacabaro.vbhelper.R
import com.github.nacabaro.vbhelper.components.CharacterEntry
import com.github.nacabaro.vbhelper.components.ItemDisplay
import com.github.nacabaro.vbhelper.components.TransformationHistoryCard
import com.github.nacabaro.vbhelper.domain.device_data.VBCharacterData
import com.github.nacabaro.vbhelper.dtos.CharacterDtos
import com.github.nacabaro.vbhelper.utils.BitmapData
import java.util.Locale

@Composable
fun VBDiMHomeScreen(


@@ 12,5 27,129 @@ fun VBDiMHomeScreen(
    transformationHistory: List<CharacterDtos.TransformationHistory>,
    contentPadding: PaddingValues
) {
    TODO("Not implemented yet")
    Column(
        modifier = Modifier
            .padding(top = contentPadding.calculateTopPadding())
            .verticalScroll(state = rememberScrollState())
    ) {
        Row(
            modifier = Modifier
                .fillMaxWidth()
        ) {
            CharacterEntry(
                icon = BitmapData(
                    bitmap = activeMon.spriteIdle,
                    width = activeMon.spriteWidth,
                    height = activeMon.spriteHeight
                ),
                multiplier = 8,
                shape = androidx.compose.material.MaterialTheme.shapes.small,
                modifier = Modifier
                    .weight(1f)
                    .aspectRatio(1f)
            )
            Column(
                modifier = Modifier
                    .weight(0.5f)
                    .aspectRatio(0.5f)
            ) {
                ItemDisplay(
                    icon = R.drawable.baseline_vitals_24,
                    textValue = activeMon.vitalPoints.toString(),
                    definition = "Vitals",
                    modifier = Modifier
                        .weight(0.5f)
                        .aspectRatio(1f)
                        .padding(8.dp)
                )
                ItemDisplay(
                    icon = R.drawable.baseline_trophy_24,
                    textValue = activeMon.trophies.toString(),
                    definition = "Trophies",
                    modifier = Modifier
                        .weight(0.5f)
                        .aspectRatio(1f)
                        .padding(8.dp)
                )
            }
        }
        Row(
            modifier = Modifier
                .fillMaxWidth()
        ) {
            ItemDisplay(
                icon = R.drawable.baseline_mood_24,
                textValue = activeMon.mood.toString(),
                definition = "Mood",
                modifier = Modifier
                    .weight(1f)
                    .aspectRatio(1f)
                    .padding(8.dp)
            )
            val transformationCountdownInHours = activeMon.transformationCountdown / 60
            ItemDisplay(
                icon = R.drawable.baseline_next_24,
                textValue = when (transformationCountdownInHours) {
                    0 -> "${activeMon.transformationCountdown} m"
                    else -> "$transformationCountdownInHours h"
                },
                definition = "Next timer",
                modifier = Modifier
                    .weight(1f)
                    .aspectRatio(1f)
                    .padding(8.dp)
            )
            ItemDisplay(
                icon = R.drawable.baseline_swords_24,
                textValue = when {
                    activeMon.totalBattlesLost == 0 -> "0.00 %"
                    else -> {
                        val battleWinPercentage =
                            activeMon.totalBattlesWon.toFloat() / (activeMon.totalBattlesWon + activeMon.totalBattlesLost).toFloat()
                        String.format(
                            Locale.getDefault(),
                            "%.2f",
                            battleWinPercentage * 100
                        ) + " %" // Specify locale
                    }
                },
                definition = "Total battle win %",
                modifier = Modifier
                    .weight(1f)
                    .aspectRatio(1f)
                    .padding(8.dp)
            )
            ItemDisplay(
                icon = R.drawable.baseline_swords_24,
                textValue = when {
                    activeMon.totalBattlesLost == 0 -> "0.00 %"
                    else -> {
                        val battleWinPercentage =
                            activeMon.currentPhaseBattlesWon.toFloat() / (activeMon.currentPhaseBattlesWon + activeMon.currentPhaseBattlesLost).toFloat()
                        String.format(
                            Locale.getDefault(),
                            "%.2f",
                            battleWinPercentage * 100
                        ) + " %" // Specify locale
                    }
                },
                definition = "Current phase win %",
                modifier = Modifier
                    .weight(1f)
                    .aspectRatio(1f)
                    .padding(8.dp)
            )
        }
        Row(
            modifier = Modifier
                .fillMaxWidth()
        ) {
            TransformationHistoryCard(
                transformationHistory = transformationHistory,
                modifier = Modifier
                    .weight(1f)
                    .padding(8.dp)
            )
        }
    }
}
\ No newline at end of file

M app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/ScanScreenControllerImpl.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/ScanScreenControllerImpl.kt +15 -2
@@ 11,7 11,9 @@ import android.widget.Toast
import androidx.activity.ComponentActivity
import androidx.lifecycle.lifecycleScope
import com.github.cfogrady.vbnfc.TagCommunicator
import com.github.cfogrady.vbnfc.be.BENfcCharacter
import com.github.cfogrady.vbnfc.data.NfcCharacter
import com.github.cfogrady.vbnfc.vb.VBNfcCharacter
import com.github.nacabaro.vbhelper.ActivityLifecycleListener
import com.github.nacabaro.vbhelper.screens.scanScreen.converters.FromNfcConverter
import com.github.nacabaro.vbhelper.screens.scanScreen.converters.ToNfcConverter


@@ 118,7 120,15 @@ class ScanScreenControllerImpl(
    ) {
        handleTag(secrets) { tagCommunicator ->
            try {
                tagCommunicator.sendCharacter(nfcCharacter)
                if (nfcCharacter is VBNfcCharacter) {
                    Log.d("SendCharacter", "VBNfcCharacter")
                    val castNfcCharacter: VBNfcCharacter = nfcCharacter
                    tagCommunicator.sendCharacter(castNfcCharacter)
                } else if (nfcCharacter is BENfcCharacter) {
                    Log.d("SendCharacter", "BENfcCharacter")
                    val castNfcCharacter: BENfcCharacter = nfcCharacter
                    tagCommunicator.sendCharacter(castNfcCharacter)
                }
                onComplete.invoke()
                "Sent character successfully!"
            } catch (e: Throwable) {


@@ 157,6 167,9 @@ class ScanScreenControllerImpl(
        val nfcGenerator = ToNfcConverter(
            componentActivity = componentActivity
        )
        return nfcGenerator.characterToNfc(characterId)

        val character = nfcGenerator.characterToNfc(characterId)
        Log.d("CharacterType", character.toString())
        return character
    }
}
\ No newline at end of file

M app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/converters/ToNfcConverter.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/converters/ToNfcConverter.kt +7 -5
@@ 59,7 59,7 @@ class ToNfcConverter(
            .userCharacterDao()
            .getVbData(characterId)

        val paddedTransformationArray = generateTransformationHistory(characterId)
        val paddedTransformationArray = generateTransformationHistory(characterId, 9)

        val watchSpecialMissions = generateSpecialMissionsArray(characterId)



@@ 218,7 218,8 @@ class ToNfcConverter(


    private suspend fun generateTransformationHistory(
        characterId: Long
        characterId: Long,
        length: Int = 8
    ): Array<NfcCharacter.Transformation> {
        val transformationHistory = database
            .userCharacterDao()


@@ 242,7 243,7 @@ class ToNfcConverter(
                )
            }.toTypedArray()

        val paddedTransformationArray = padTransformationArray(transformationHistory)
        val paddedTransformationArray = padTransformationArray(transformationHistory, length)

        return paddedTransformationArray
    }


@@ 250,13 251,14 @@ class ToNfcConverter(


    private fun padTransformationArray(
        transformationArray: Array<NfcCharacter.Transformation>
        transformationArray: Array<NfcCharacter.Transformation>,
        length: Int
    ): Array<NfcCharacter.Transformation> {
        if (transformationArray.size >= 8) {
            return transformationArray
        }

        val paddedArray = Array(8) {
        val paddedArray = Array(length) {
            NfcCharacter.Transformation(
                toCharIndex = 255u,
                year = 65535u,

M app/src/main/java/com/github/nacabaro/vbhelper/source/StorageRepository.kt => app/src/main/java/com/github/nacabaro/vbhelper/source/StorageRepository.kt +5 -0
@@ 2,6 2,7 @@ package com.github.nacabaro.vbhelper.source

import com.github.nacabaro.vbhelper.database.AppDatabase
import com.github.nacabaro.vbhelper.domain.device_data.BECharacterData
import com.github.nacabaro.vbhelper.domain.device_data.VBCharacterData
import com.github.nacabaro.vbhelper.dtos.CharacterDtos

class StorageRepository (


@@ 23,6 24,10 @@ class StorageRepository (
        return db.userCharacterDao().getTransformationHistory(characterId)
    }

    suspend fun getCharacterVbData(id: Long): VBCharacterData {
        return db.userCharacterDao().getVbData(id)
    }

    suspend fun getActiveCharacter(): CharacterDtos.CharacterWithSprites? {
        return db.userCharacterDao().getActiveCharacter()
    }