~cytrogen/vbhelper

635be60cdb62a64729dd97cad4c14d24a2ceecb4 — nacabaro 1 year, 3 months ago 586d6c0 + 8816368
Merge pull request #19 from nacabaro/dex/functionality

Dex stuff
25 files changed, 189 insertions(+), 77 deletions(-)

M app/src/main/java/com/github/nacabaro/vbhelper/MainActivity.kt
M app/src/main/java/com/github/nacabaro/vbhelper/components/DexDimEntry.kt
M app/src/main/java/com/github/nacabaro/vbhelper/daos/CharacterDao.kt
A app/src/main/java/com/github/nacabaro/vbhelper/daos/DexDao.kt
M app/src/main/java/com/github/nacabaro/vbhelper/daos/DiMDao.kt
M app/src/main/java/com/github/nacabaro/vbhelper/daos/UserCharacterDao.kt
M app/src/main/java/com/github/nacabaro/vbhelper/database/AppDatabase.kt
M app/src/main/java/com/github/nacabaro/vbhelper/domain/DimProgress.kt
M app/src/main/java/com/github/nacabaro/vbhelper/domain/Evolutions.kt
M app/src/main/java/com/github/nacabaro/vbhelper/domain/UserMonsters.kt
R app/src/main/java/com/github/nacabaro/vbhelper/domain/{Dim => characters/Card}.kt
R app/src/main/java/com/github/nacabaro/vbhelper/domain/{ => characters}/Character.kt
A app/src/main/java/com/github/nacabaro/vbhelper/domain/characters/Dex.kt
M app/src/main/java/com/github/nacabaro/vbhelper/domain/device_data/TransformationHistory.kt
M app/src/main/java/com/github/nacabaro/vbhelper/domain/device_data/UserCharacter.kt
A app/src/main/java/com/github/nacabaro/vbhelper/dtos/CardDtos.kt
M app/src/main/java/com/github/nacabaro/vbhelper/dtos/CharacterDtos.kt
M app/src/main/java/com/github/nacabaro/vbhelper/navigation/AppNavigation.kt
M app/src/main/java/com/github/nacabaro/vbhelper/navigation/NavigationItems.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/DexScreen.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/DimScreen.kt
M app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/HomeScreen.kt
M app/src/main/java/com/github/nacabaro/vbhelper/source/DexRepository.kt
M app/src/main/java/com/github/nacabaro/vbhelper/utils/CharacterToNFCCharacter.kt
R app/src/main/java/com/github/nacabaro/vbhelper/{domain => utils}/DeviceType.kt
M app/src/main/java/com/github/nacabaro/vbhelper/MainActivity.kt => app/src/main/java/com/github/nacabaro/vbhelper/MainActivity.kt +13 -11
@@ 18,21 18,20 @@ 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.di.VBHelper
import com.github.nacabaro.vbhelper.domain.Dim
import com.github.nacabaro.vbhelper.domain.characters.Card
import com.github.nacabaro.vbhelper.domain.Sprites
import com.github.nacabaro.vbhelper.domain.Character
import com.github.nacabaro.vbhelper.domain.characters.Character
import com.github.nacabaro.vbhelper.domain.characters.Dex
import com.github.nacabaro.vbhelper.domain.device_data.BECharacterData
import com.github.nacabaro.vbhelper.domain.device_data.TransformationHistory
import com.github.nacabaro.vbhelper.domain.device_data.UserCharacter
import com.github.nacabaro.vbhelper.domain.device_data.VBCharacterData
import com.github.nacabaro.vbhelper.navigation.AppNavigationHandlers
import com.github.nacabaro.vbhelper.screens.scanScreen.ScanScreenControllerImpl
import com.github.nacabaro.vbhelper.screens.SettingsScreenController
import com.github.nacabaro.vbhelper.source.ApkSecretsImporter
import com.github.nacabaro.vbhelper.ui.theme.VBHelperTheme
import com.github.nacabaro.vbhelper.utils.DeviceType
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.launch
import java.util.Date
import java.util.GregorianCalendar

class MainActivity : ComponentActivity() {


@@ 113,7 112,7 @@ class MainActivity : ComponentActivity() {

                    Log.i("MainActivity", "Card name: ${card is BemCard}")

                    val dimModel = Dim(
                    val cardModel = Card(
                        dimId = card.header.dimId,
                        logo = card.spriteData.sprites[0].pixelData,
                        name = card.spriteData.text, // TODO Make user write card name


@@ 125,7 124,7 @@ class MainActivity : ComponentActivity() {

                    val dimId = storageRepository
                        .dimDao()
                        .insertNewDim(dimModel)
                        .insertNewDim(cardModel)

                    val characters = card.characterStats.characterEntries



@@ 216,7 215,6 @@ class MainActivity : ComponentActivity() {
    //
    /*
    TODO:
    - Make it able to detect the different model of watches
    - Support for regular VB

    The good news is that the theory behind inserting to the database should be working


@@ 255,8 253,8 @@ class MainActivity : ComponentActivity() {
            activityLevel = nfcCharacter.value!!.activityLevel.toInt(),
            heartRateCurrent = nfcCharacter.value!!.heartRateCurrent.toInt(),
            characterType = when (nfcCharacter.value) {
                is BENfcCharacter -> com.github.nacabaro.vbhelper.domain.DeviceType.BEDevice
                else -> com.github.nacabaro.vbhelper.domain.DeviceType.VBDevice
                is BENfcCharacter -> DeviceType.BEDevice
                else -> DeviceType.VBDevice
            },
            isActive = true
        )


@@ 307,12 305,16 @@ class MainActivity : ComponentActivity() {
                    val date = GregorianCalendar(item.year.toInt(), item.month.toInt(), item.day.toInt())
                        .time
                        .time

                    storageRepository
                        .characterDao()
                        .insertTransformation(characterId, item.toCharIndex.toInt(), dimData.id, date)

                    storageRepository
                        .dexDao()
                        .insertCharacter(item.toCharIndex.toInt(), dimData.id, date)
                }
            }

        } else if (nfcCharacter.value is VBNfcCharacter) {
            return "Not implemented yet"
        }

M app/src/main/java/com/github/nacabaro/vbhelper/components/DexDimEntry.kt => app/src/main/java/com/github/nacabaro/vbhelper/components/DexDimEntry.kt +16 -3
@@ 2,6 2,7 @@ package com.github.nacabaro.vbhelper.components

import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size


@@ 23,6 24,8 @@ import com.github.nacabaro.vbhelper.utils.getBitmap
fun DexDiMEntry(
    name: String,
    logo: BitmapData,
    obtainedCharacters: Int,
    totalCharacters: Int,
    onClick: () -> Unit,
    modifier: Modifier = Modifier
) {


@@ 50,11 53,21 @@ fun DexDiMEntry(
                    .padding(8.dp)
                    .size(dpSize)
            )
            Text(
                text = name,
            Column(
                modifier = Modifier
                    .padding(8.dp)
            )
            ) {
                Text(
                    text = name,
                    modifier = Modifier
                )
                Text(
                    text = "$obtainedCharacters of $totalCharacters characters obtained",
                    fontFamily = MaterialTheme.typography.labelSmall.fontFamily,
                    fontSize = MaterialTheme.typography.labelSmall.fontSize,
                    modifier = Modifier
                )
            }
        }
    }
}
\ No newline at end of file

M app/src/main/java/com/github/nacabaro/vbhelper/daos/CharacterDao.kt => app/src/main/java/com/github/nacabaro/vbhelper/daos/CharacterDao.kt +6 -5
@@ 3,10 3,9 @@ package com.github.nacabaro.vbhelper.daos
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import com.github.nacabaro.vbhelper.domain.Character
import com.github.nacabaro.vbhelper.domain.characters.Character
import com.github.nacabaro.vbhelper.domain.Sprites
import com.github.nacabaro.vbhelper.dtos.CharacterDtos
import java.util.GregorianCalendar

@Dao
interface CharacterDao {


@@ 28,15 27,17 @@ interface CharacterDao {
    @Query("SELECT * FROM Sprites")
    suspend fun getAllSprites(): List<Sprites>

    @Query("""
    @Query(
        """
        SELECT 
            d.dimId as cardId,
            c.monIndex as charId
        FROM Character c
        JOIN UserCharacter uc ON c.id = uc.charId
        JOIN Dim d ON c.dimId = d.id
        JOIN Card d ON c.dimId = d.id
        WHERE uc.id = :charId
    """)
    """
    )
    suspend fun getCharacterInfo(charId: Long): CharacterDtos.DiMInfo

    @Query("""

A app/src/main/java/com/github/nacabaro/vbhelper/daos/DexDao.kt => app/src/main/java/com/github/nacabaro/vbhelper/daos/DexDao.kt +44 -0
@@ 0,0 1,44 @@
package com.github.nacabaro.vbhelper.daos

import androidx.room.Dao
import androidx.room.Query
import com.github.nacabaro.vbhelper.dtos.CardDtos
import com.github.nacabaro.vbhelper.dtos.CharacterDtos

@Dao
interface DexDao {
    @Query("""
        INSERT OR IGNORE INTO Dex(id, discoveredOn)
        VALUES (
            (SELECT id FROM Character WHERE monIndex = :charIndex AND dimId = :cardId), 
            :discoveredOn
        )
    """)
    fun insertCharacter(charIndex: Int, cardId: Long, discoveredOn: Long)

    @Query("""
        SELECT 
            c.id AS id,
            c.sprite1 AS spriteIdle,
            c.spritesWidth AS spriteWidth,
            c.spritesHeight AS spriteHeight,
            d.discoveredOn AS discoveredOn
        FROM character c
        LEFT JOIN dex d ON c.id = d.id
        WHERE c.dimId = :cardId
    """)
    suspend fun getSingleCardProgress(cardId: Long): List<CharacterDtos.CardProgress>

    @Query("""
        SELECT 
            c.id as cardId,
            c.name as cardName,
            c.logo as cardLogo,
            c.logoWidth as logoWidth,
            c.logoHeight as logoHeight, 
            (SELECT COUNT(*) FROM Character cc WHERE cc.dimId = c.id) AS totalCharacters,
            (SELECT COUNT(*) FROM Dex d JOIN Character cc ON d.id = cc.id WHERE cc.dimId = c.id AND d.discoveredOn IS NOT NULL) AS obtainedCharacters
        FROM Card c
    """)
    suspend fun getCardsWithProgress(): List<CardDtos.CardProgress>
}
\ No newline at end of file

M app/src/main/java/com/github/nacabaro/vbhelper/daos/DiMDao.kt => app/src/main/java/com/github/nacabaro/vbhelper/daos/DiMDao.kt +6 -6
@@ 4,16 4,16 @@ import androidx.room.Dao
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import com.github.nacabaro.vbhelper.domain.Dim
import com.github.nacabaro.vbhelper.domain.characters.Card

@Dao
interface DiMDao {
    @Insert(onConflict = OnConflictStrategy.IGNORE)
    suspend fun insertNewDim(dim: Dim): Long
    suspend fun insertNewDim(card: Card): Long

    @Query("SELECT * FROM Dim")
    suspend fun getAllDims(): List<Dim>
    @Query("SELECT * FROM Card")
    suspend fun getAllDims(): List<Card>

    @Query("SELECT * FROM Dim WHERE dimId = :id")
    fun getDimById(id: Int): Dim?
    @Query("SELECT * FROM Card WHERE dimId = :id")
    fun getDimById(id: Int): Card?
}
\ No newline at end of file

M app/src/main/java/com/github/nacabaro/vbhelper/daos/UserCharacterDao.kt => app/src/main/java/com/github/nacabaro/vbhelper/daos/UserCharacterDao.kt +10 -6
@@ 34,7 34,8 @@ interface UserCharacterDao {
    """)
    fun getTransformationHistory(monId: Long): List<CharacterDtos.TransformationHistory>?

    @Query("""
    @Query(
        """
        SELECT
            uc.*,
            c.sprite1 AS spriteIdle,


@@ 43,8 44,9 @@ interface UserCharacterDao {
            d.isBEm as isBemCard
        FROM UserCharacter uc
        JOIN Character c ON uc.charId = c.id
        JOIN Dim d ON c.dimId = d.id
        """)
        JOIN Card d ON c.dimId = d.id
        """
    )
    suspend fun getAllCharacters(): List<CharacterDtos.CharacterWithSprites>

    @Query("SELECT * FROM UserCharacter WHERE id = :id")


@@ 53,7 55,8 @@ interface UserCharacterDao {
    @Query("SELECT * FROM BECharacterData WHERE id = :id")
    suspend fun getBeData(id: Long): BECharacterData

    @Query("""
    @Query(
        """
        SELECT
            uc.*,
            c.sprite1 AS spriteIdle,


@@ 62,10 65,11 @@ interface UserCharacterDao {
            d.isBEm as isBemCard
        FROM UserCharacter uc
        JOIN Character c ON uc.charId = c.id
        JOIN Dim d ON c.dimId = d.id
        JOIN Card d ON c.dimId = d.id
        WHERE uc.isActive = 1
        LIMIT 1
    """)
    """
    )
    suspend fun getActiveCharacter(): CharacterDtos.CharacterWithSprites?

    @Query("DELETE FROM UserCharacter WHERE id = :id")

M app/src/main/java/com/github/nacabaro/vbhelper/database/AppDatabase.kt => app/src/main/java/com/github/nacabaro/vbhelper/database/AppDatabase.kt +8 -4
@@ 3,11 3,13 @@ package com.github.nacabaro.vbhelper.database
import androidx.room.Database
import androidx.room.RoomDatabase
import com.github.nacabaro.vbhelper.daos.CharacterDao
import com.github.nacabaro.vbhelper.daos.DexDao
import com.github.nacabaro.vbhelper.daos.DiMDao
import com.github.nacabaro.vbhelper.daos.UserCharacterDao
import com.github.nacabaro.vbhelper.domain.Character
import com.github.nacabaro.vbhelper.domain.Dim
import com.github.nacabaro.vbhelper.domain.characters.Character
import com.github.nacabaro.vbhelper.domain.characters.Card
import com.github.nacabaro.vbhelper.domain.Sprites
import com.github.nacabaro.vbhelper.domain.characters.Dex
import com.github.nacabaro.vbhelper.domain.device_data.BECharacterData
import com.github.nacabaro.vbhelper.domain.device_data.TransformationHistory
import com.github.nacabaro.vbhelper.domain.device_data.UserCharacter


@@ 15,16 17,18 @@ import com.github.nacabaro.vbhelper.domain.device_data.UserCharacter
@Database(
    version = 1,
    entities = [
        Dim::class,
        Card::class,
        Character::class,
        Sprites::class,
        UserCharacter::class,
        BECharacterData::class,
        TransformationHistory::class
        TransformationHistory::class,
        Dex::class
    ]
)
abstract class AppDatabase : RoomDatabase() {
    abstract fun dimDao(): DiMDao
    abstract fun characterDao(): CharacterDao
    abstract fun userCharacterDao(): UserCharacterDao
    abstract fun dexDao(): DexDao
}
\ No newline at end of file

M app/src/main/java/com/github/nacabaro/vbhelper/domain/DimProgress.kt => app/src/main/java/com/github/nacabaro/vbhelper/domain/DimProgress.kt +2 -1
@@ 3,6 3,7 @@ package com.github.nacabaro.vbhelper.domain
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.PrimaryKey
import com.github.nacabaro.vbhelper.domain.characters.Card

@Entity(
    foreignKeys = [


@@ 13,7 14,7 @@ import androidx.room.PrimaryKey
            onDelete = ForeignKey.CASCADE
        ),
        ForeignKey(
            entity = Dim::class,
            entity = Card::class,
            parentColumns = ["id"],
            childColumns = ["dimId"],
            onDelete = ForeignKey.CASCADE

M app/src/main/java/com/github/nacabaro/vbhelper/domain/Evolutions.kt => app/src/main/java/com/github/nacabaro/vbhelper/domain/Evolutions.kt +1 -0
@@ 3,6 3,7 @@ package com.github.nacabaro.vbhelper.domain
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.PrimaryKey
import com.github.nacabaro.vbhelper.domain.characters.Character

@Entity(
    foreignKeys = [

M app/src/main/java/com/github/nacabaro/vbhelper/domain/UserMonsters.kt => app/src/main/java/com/github/nacabaro/vbhelper/domain/UserMonsters.kt +1 -0
@@ 3,6 3,7 @@ package com.github.nacabaro.vbhelper.domain
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.PrimaryKey
import com.github.nacabaro.vbhelper.domain.characters.Character

@Entity(
    foreignKeys = [

R app/src/main/java/com/github/nacabaro/vbhelper/domain/Dim.kt => app/src/main/java/com/github/nacabaro/vbhelper/domain/characters/Card.kt +2 -3
@@ 1,11 1,10 @@
package com.github.nacabaro.vbhelper.domain
package com.github.nacabaro.vbhelper.domain.characters

import android.icu.text.ListFormatter.Width
import androidx.room.Entity
import androidx.room.PrimaryKey

@Entity
data class Dim(
data class Card(
    @PrimaryKey(autoGenerate = true)
    val id: Long = 0,
    val dimId: Int,

R app/src/main/java/com/github/nacabaro/vbhelper/domain/Character.kt => app/src/main/java/com/github/nacabaro/vbhelper/domain/characters/Character.kt +2 -2
@@ 1,4 1,4 @@
package com.github.nacabaro.vbhelper.domain
package com.github.nacabaro.vbhelper.domain.characters

import androidx.room.Entity
import androidx.room.PrimaryKey


@@ 7,7 7,7 @@ import androidx.room.ForeignKey
@Entity(
    foreignKeys = [
        ForeignKey(
            entity = Dim::class,
            entity = Card::class,
            parentColumns = ["id"],
            childColumns = ["dimId"],
            onDelete = ForeignKey.CASCADE

A app/src/main/java/com/github/nacabaro/vbhelper/domain/characters/Dex.kt => app/src/main/java/com/github/nacabaro/vbhelper/domain/characters/Dex.kt +20 -0
@@ 0,0 1,20 @@
package com.github.nacabaro.vbhelper.domain.characters

import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.PrimaryKey

@Entity(
    foreignKeys = [
        ForeignKey(
            entity = Character::class,
            parentColumns = ["id"],
            childColumns = ["id"],
            onDelete = ForeignKey.CASCADE
        )
    ]
)
data class Dex(
    @PrimaryKey val id: Long = 0,
    val discoveredOn: Long
)
\ No newline at end of file

M app/src/main/java/com/github/nacabaro/vbhelper/domain/device_data/TransformationHistory.kt => app/src/main/java/com/github/nacabaro/vbhelper/domain/device_data/TransformationHistory.kt +1 -1
@@ 3,7 3,7 @@ package com.github.nacabaro.vbhelper.domain.device_data
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.PrimaryKey
import com.github.nacabaro.vbhelper.domain.Character
import com.github.nacabaro.vbhelper.domain.characters.Character

@Entity(
    foreignKeys = [

M app/src/main/java/com/github/nacabaro/vbhelper/domain/device_data/UserCharacter.kt => app/src/main/java/com/github/nacabaro/vbhelper/domain/device_data/UserCharacter.kt +2 -2
@@ 4,8 4,8 @@ import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.PrimaryKey
import com.github.cfogrady.vbnfc.data.NfcCharacter
import com.github.nacabaro.vbhelper.domain.DeviceType
import com.github.nacabaro.vbhelper.domain.Character
import com.github.nacabaro.vbhelper.utils.DeviceType
import com.github.nacabaro.vbhelper.domain.characters.Character

@Entity(
    foreignKeys = [

A app/src/main/java/com/github/nacabaro/vbhelper/dtos/CardDtos.kt => app/src/main/java/com/github/nacabaro/vbhelper/dtos/CardDtos.kt +13 -0
@@ 0,0 1,13 @@
package com.github.nacabaro.vbhelper.dtos

object CardDtos {
    data class CardProgress (
        val cardId: Long,
        val cardName: String,
        val cardLogo: ByteArray,
        val logoWidth: Int,
        val logoHeight: Int,
        val totalCharacters: Int,
        val obtainedCharacters: Int,
    )
}
\ No newline at end of file

M app/src/main/java/com/github/nacabaro/vbhelper/dtos/CharacterDtos.kt => app/src/main/java/com/github/nacabaro/vbhelper/dtos/CharacterDtos.kt +9 -1
@@ 1,7 1,7 @@
package com.github.nacabaro.vbhelper.dtos

import com.github.cfogrady.vbnfc.data.NfcCharacter
import com.github.nacabaro.vbhelper.domain.DeviceType
import com.github.nacabaro.vbhelper.utils.DeviceType


object CharacterDtos {


@@ 43,4 43,12 @@ object CharacterDtos {
        val monIndex: Int,
        val transformationDate: Long
    )

    data class CardProgress(
        val id: Long,
        val spriteIdle: ByteArray,
        val spriteWidth: Int,
        val spriteHeight: Int,
        val discoveredOn: Long?
    )
}
\ No newline at end of file

M app/src/main/java/com/github/nacabaro/vbhelper/navigation/AppNavigation.kt => app/src/main/java/com/github/nacabaro/vbhelper/navigation/AppNavigation.kt +3 -4
@@ 81,12 81,11 @@ fun AppNavigation(
                )
            }
            composable(NavigationItems.CardView.route) {
                val dimId = it.arguments?.getString("dimId")
                Log.d("dimId", dimId.toString())
                if (dimId != null) {
                val cardId = it.arguments?.getString("cardId")
                if (cardId != null) {
                    DiMScreen(
                        navController = navController,
                        dimId = dimId.toInt()
                        dimId = cardId.toLong()
                    )
                }
            }

M app/src/main/java/com/github/nacabaro/vbhelper/navigation/NavigationItems.kt => app/src/main/java/com/github/nacabaro/vbhelper/navigation/NavigationItems.kt +1 -1
@@ 14,6 14,6 @@ sealed class NavigationItems (
    object Storage : NavigationItems("Storage", R.drawable.baseline_catching_pokemon_24, "Storage")
    object Settings : NavigationItems("Settings", R.drawable.baseline_settings_24, "Settings")
    object Viewer : NavigationItems("Viewer", R.drawable.baseline_image_24, "Viewer")
    object CardView : NavigationItems("Card/{dimId}", R.drawable.baseline_image_24, "Card")
    object CardView : NavigationItems("Card/{cardId}", R.drawable.baseline_image_24, "Card")
    object Items : NavigationItems("Items", R.drawable.baseline_data_24, "Items")
}
\ No newline at end of file

M app/src/main/java/com/github/nacabaro/vbhelper/screens/DexScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/DexScreen.kt +11 -8
@@ 18,7 18,8 @@ import com.github.nacabaro.vbhelper.utils.BitmapData
import com.github.nacabaro.vbhelper.components.DexDiMEntry
import com.github.nacabaro.vbhelper.components.TopBanner
import com.github.nacabaro.vbhelper.di.VBHelper
import com.github.nacabaro.vbhelper.domain.Dim
import com.github.nacabaro.vbhelper.domain.characters.Card
import com.github.nacabaro.vbhelper.dtos.CardDtos
import com.github.nacabaro.vbhelper.navigation.NavigationItems
import com.github.nacabaro.vbhelper.source.DexRepository
import kotlinx.coroutines.launch


@@ 31,19 32,19 @@ fun DexScreen(
    val application = LocalContext.current.applicationContext as VBHelper
    val dexRepository = DexRepository(application.container.db)

    val dimList = remember { mutableStateOf<List<Dim>>(emptyList()) }
    val cardList = remember { mutableStateOf<List<CardDtos.CardProgress>>(emptyList()) }

    LaunchedEffect(dexRepository) {
        coroutineScope.launch {
            val newDimList = dexRepository.getAllDims()
            dimList.value = newDimList // Replace the entire list atomically
            cardList.value = newDimList // Replace the entire list atomically
        }
    }

    Scaffold (
        topBar = {
            TopBanner(
                text = "Discovered Digimon",
                text = "Discovered characters",
                onGearClick = {
                    navController.navigate(NavigationItems.Viewer.route)
                }


@@ 54,11 55,11 @@ fun DexScreen(
            modifier = Modifier
                .padding(top = contentPadding.calculateTopPadding())
        ) {
            items(dimList.value) {
            items(cardList.value) {
                DexDiMEntry(
                    name = it.name,
                    name = it.cardName,
                    logo = BitmapData(
                        bitmap = it.logo,
                        bitmap = it.cardLogo,
                        width = it.logoWidth,
                        height = it.logoHeight
                    ),


@@ 67,9 68,11 @@ fun DexScreen(
                            .navigate(
                                NavigationItems
                                    .CardView.route
                                    .replace("{dimId}", "${it.id}")
                                    .replace("{cardId}", "${it.cardId}")
                            )
                    },
                    obtainedCharacters = it.obtainedCharacters,
                    totalCharacters = it.totalCharacters,
                    modifier = Modifier
                        .fillMaxWidth()
                        .padding(8.dp)

M app/src/main/java/com/github/nacabaro/vbhelper/screens/DimScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/DimScreen.kt +9 -9
@@ 1,6 1,5 @@
package com.github.nacabaro.vbhelper.screens

import android.util.Log
import androidx.compose.foundation.lazy.grid.GridCells
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
import androidx.compose.foundation.lazy.grid.items


@@ 15,21 14,22 @@ import androidx.navigation.NavController
import com.github.nacabaro.vbhelper.utils.BitmapData
import com.github.nacabaro.vbhelper.components.CharacterEntry
import com.github.nacabaro.vbhelper.components.TopBanner
import com.github.nacabaro.vbhelper.domain.Character
import com.github.nacabaro.vbhelper.domain.characters.Character
import com.github.nacabaro.vbhelper.di.VBHelper
import com.github.nacabaro.vbhelper.dtos.CharacterDtos
import com.github.nacabaro.vbhelper.source.DexRepository
import kotlinx.coroutines.launch

@Composable
fun DiMScreen(
    navController: NavController,
    dimId: Int
    dimId: Long
) {
    val coroutineScope = rememberCoroutineScope()
    val application = LocalContext.current.applicationContext as VBHelper
    val dexRepository = DexRepository(application.container.db)

    val characterList = remember { mutableStateOf<List<Character>>(emptyList()) }
    val characterList = remember { mutableStateOf<List<CharacterDtos.CardProgress>>(emptyList()) }

    LaunchedEffect(dexRepository) {
        coroutineScope.launch {


@@ 41,7 41,7 @@ fun DiMScreen(
    Scaffold (
        topBar = {
            TopBanner(
                text = "Discovered Digimon",
                text = "Discovered characters",
                onBackClick = {
                    navController.popBackStack()
                }


@@ 55,11 55,11 @@ fun DiMScreen(
            items(characterList.value) { character ->
                CharacterEntry(
                    onClick = {  },
                    obscure = true,
                    obscure = character.discoveredOn == null,
                    icon = BitmapData(
                        bitmap = character.sprite1,
                        width = character.spritesWidth,
                        height = character.spritesHeight
                        bitmap = character.spriteIdle,
                        width = character.spriteWidth,
                        height = character.spriteHeight,
                    ),
                )
            }

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 +1 -1
@@ 17,7 17,7 @@ import androidx.compose.ui.platform.LocalContext
import androidx.navigation.NavController
import com.github.nacabaro.vbhelper.components.TopBanner
import com.github.nacabaro.vbhelper.di.VBHelper
import com.github.nacabaro.vbhelper.domain.DeviceType
import com.github.nacabaro.vbhelper.utils.DeviceType
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

M app/src/main/java/com/github/nacabaro/vbhelper/source/DexRepository.kt => app/src/main/java/com/github/nacabaro/vbhelper/source/DexRepository.kt +7 -7
@@ 1,18 1,18 @@
package com.github.nacabaro.vbhelper.source

import com.github.nacabaro.vbhelper.database.AppDatabase
import com.github.nacabaro.vbhelper.domain.Character
import com.github.nacabaro.vbhelper.domain.Dim
import kotlinx.coroutines.flow.Flow
import com.github.nacabaro.vbhelper.domain.characters.Card
import com.github.nacabaro.vbhelper.dtos.CardDtos
import com.github.nacabaro.vbhelper.dtos.CharacterDtos

class DexRepository (
    private val db: AppDatabase
) {
    suspend fun getAllDims(): List<Dim> {
        return db.dimDao().getAllDims()
    suspend fun getAllDims(): List<CardDtos.CardProgress> {
        return db.dexDao().getCardsWithProgress()
    }

    suspend fun getCharactersByDimId(dimId: Int): List<Character> {
        return db.characterDao().getCharacterByDimId(dimId)
    suspend fun getCharactersByDimId(cardId: Long): List<CharacterDtos.CardProgress> {
        return db.dexDao().getSingleCardProgress(cardId)
    }
}
\ No newline at end of file

M app/src/main/java/com/github/nacabaro/vbhelper/utils/CharacterToNFCCharacter.kt => app/src/main/java/com/github/nacabaro/vbhelper/utils/CharacterToNFCCharacter.kt +0 -1
@@ 7,7 7,6 @@ import com.github.cfogrady.vbnfc.be.BENfcCharacter
import com.github.cfogrady.vbnfc.be.FirmwareVersion
import com.github.cfogrady.vbnfc.data.NfcCharacter
import com.github.nacabaro.vbhelper.di.VBHelper
import com.github.nacabaro.vbhelper.domain.DeviceType
import com.github.nacabaro.vbhelper.source.StorageRepository
import java.util.Date


R app/src/main/java/com/github/nacabaro/vbhelper/domain/DeviceType.kt => app/src/main/java/com/github/nacabaro/vbhelper/utils/DeviceType.kt +1 -1
@@ 1,4 1,4 @@
package com.github.nacabaro.vbhelper.domain
package com.github.nacabaro.vbhelper.utils

enum class DeviceType {
    VBDevice,