mirror of
https://github.com/nacabaro/vbhelper.git
synced 2026-01-28 00:15:32 +00:00
Compare commits
No commits in common. "37076a9bf0c296a6730a4d9e995432f1fed3e77c" and "6cce33c5f60609daf87a3d8729c4c6549b29819e" have entirely different histories.
37076a9bf0
...
6cce33c5f6
@ -15,7 +15,7 @@ android {
|
|||||||
minSdk = 28
|
minSdk = 28
|
||||||
targetSdk = 35
|
targetSdk = 35
|
||||||
versionCode = 1
|
versionCode = 1
|
||||||
versionName = "Alpha 0.6.3"
|
versionName = "Alpha 0.6.2"
|
||||||
|
|
||||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -43,7 +43,6 @@ import androidx.compose.ui.res.stringResource
|
|||||||
fun CharacterEntry(
|
fun CharacterEntry(
|
||||||
icon: BitmapData,
|
icon: BitmapData,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
cardIcon: BitmapData? = null,
|
|
||||||
obscure: Boolean = false,
|
obscure: Boolean = false,
|
||||||
disabled: Boolean = false,
|
disabled: Boolean = false,
|
||||||
shape: Shape = MaterialTheme.shapes.medium,
|
shape: Shape = MaterialTheme.shapes.medium,
|
||||||
@ -56,7 +55,6 @@ fun CharacterEntry(
|
|||||||
val bitmap = remember (icon.bitmap) {
|
val bitmap = remember (icon.bitmap) {
|
||||||
if(obscure) icon.getObscuredBitmap() else icon.getBitmap()
|
if(obscure) icon.getObscuredBitmap() else icon.getBitmap()
|
||||||
}
|
}
|
||||||
val iconSizeMultiplier = 3
|
|
||||||
val imageBitmap = remember(bitmap) { bitmap.asImageBitmap() }
|
val imageBitmap = remember(bitmap) { bitmap.asImageBitmap() }
|
||||||
val density: Float = LocalContext.current.resources.displayMetrics.density
|
val density: Float = LocalContext.current.resources.displayMetrics.density
|
||||||
val dpSize = (icon.width * multiplier / density).dp
|
val dpSize = (icon.width * multiplier / density).dp
|
||||||
@ -88,24 +86,7 @@ fun CharacterEntry(
|
|||||||
},
|
},
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.size(dpSize)
|
.size(dpSize)
|
||||||
.align(Alignment.BottomCenter)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if (cardIcon != null) {
|
|
||||||
val bitmap = remember (icon.bitmap) { cardIcon.getBitmap() }
|
|
||||||
val iconBitmap = remember(bitmap) { bitmap.asImageBitmap() }
|
|
||||||
val dpSize = (icon.width * iconSizeMultiplier /density).dp
|
|
||||||
|
|
||||||
Image(
|
|
||||||
bitmap = iconBitmap,
|
|
||||||
contentDescription = "Card icon",
|
|
||||||
filterQuality = FilterQuality.None,
|
|
||||||
modifier = Modifier
|
|
||||||
.size(dpSize)
|
|
||||||
.align(Alignment.BottomEnd)
|
|
||||||
.padding(8.dp)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -152,8 +133,7 @@ fun ItemDisplay(
|
|||||||
fun SpecialMissionsEntry(
|
fun SpecialMissionsEntry(
|
||||||
specialMission: SpecialMissions,
|
specialMission: SpecialMissions,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
onClickMission: (Long) -> Unit = { },
|
onClickCard: () -> Unit = { },
|
||||||
onClickCollect: (Long) -> Unit = { }
|
|
||||||
) {
|
) {
|
||||||
val textValue = when (specialMission.missionType) {
|
val textValue = when (specialMission.missionType) {
|
||||||
SpecialMission.Type.NONE -> stringResource(R.string.special_mission_none)
|
SpecialMission.Type.NONE -> stringResource(R.string.special_mission_none)
|
||||||
@ -220,12 +200,10 @@ fun SpecialMissionsEntry(
|
|||||||
Card(
|
Card(
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
shape = androidx.compose.material.MaterialTheme.shapes.small,
|
shape = androidx.compose.material.MaterialTheme.shapes.small,
|
||||||
onClick = if (specialMission.status == SpecialMission.Status.COMPLETED) {
|
onClick = if (specialMission.status == SpecialMission.Status.COMPLETED || specialMission.status == SpecialMission.Status.FAILED) {
|
||||||
{ onClickCollect(specialMission.id) }
|
onClickCard
|
||||||
} else if (specialMission.status == SpecialMission.Status.UNAVAILABLE) {
|
|
||||||
{ }
|
|
||||||
} else {
|
} else {
|
||||||
{ onClickMission(specialMission.id) }
|
{ }
|
||||||
},
|
},
|
||||||
colors = CardDefaults.cardColors(
|
colors = CardDefaults.cardColors(
|
||||||
containerColor = color
|
containerColor = color
|
||||||
|
|||||||
@ -5,7 +5,6 @@ import androidx.room.Insert
|
|||||||
import androidx.room.OnConflictStrategy
|
import androidx.room.OnConflictStrategy
|
||||||
import androidx.room.Query
|
import androidx.room.Query
|
||||||
import com.github.nacabaro.vbhelper.domain.card.Card
|
import com.github.nacabaro.vbhelper.domain.card.Card
|
||||||
import com.github.nacabaro.vbhelper.dtos.CardDtos
|
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
|
||||||
@Dao
|
@Dao
|
||||||
@ -35,15 +34,4 @@ interface CardDao {
|
|||||||
|
|
||||||
@Query("DELETE FROM Card WHERE id = :id")
|
@Query("DELETE FROM Card WHERE id = :id")
|
||||||
suspend fun deleteCard(id: Long)
|
suspend fun deleteCard(id: Long)
|
||||||
|
|
||||||
@Query("""
|
|
||||||
SELECT
|
|
||||||
c.logo as cardIcon,
|
|
||||||
c.logoWidth as cardIconWidth,
|
|
||||||
c.logoHeight as cardIconHeight
|
|
||||||
FROM Card c
|
|
||||||
JOIN CardCharacter cc ON cc.cardId = c.id
|
|
||||||
WHERE cc.id = :charaId
|
|
||||||
""")
|
|
||||||
fun getCardIconByCharaId(charaId: Long): Flow<CardDtos.CardIcon>
|
|
||||||
}
|
}
|
||||||
@ -2,8 +2,6 @@ package com.github.nacabaro.vbhelper.daos
|
|||||||
|
|
||||||
import androidx.room.Dao
|
import androidx.room.Dao
|
||||||
import androidx.room.Query
|
import androidx.room.Query
|
||||||
import com.github.nacabaro.vbhelper.domain.device_data.SpecialMissions
|
|
||||||
import kotlinx.coroutines.flow.Flow
|
|
||||||
|
|
||||||
@Dao
|
@Dao
|
||||||
interface SpecialMissionDao {
|
interface SpecialMissionDao {
|
||||||
@ -14,11 +12,4 @@ interface SpecialMissionDao {
|
|||||||
WHERE id = :id
|
WHERE id = :id
|
||||||
""")
|
""")
|
||||||
suspend fun clearSpecialMission(id: Long)
|
suspend fun clearSpecialMission(id: Long)
|
||||||
|
|
||||||
@Query("""
|
|
||||||
SELECT *
|
|
||||||
FROM SpecialMissions
|
|
||||||
WHERE id = :id
|
|
||||||
""")
|
|
||||||
fun getSpecialMission(id: Long): Flow<SpecialMissions>
|
|
||||||
}
|
}
|
||||||
@ -53,7 +53,7 @@ interface UserCharacterDao {
|
|||||||
WHERE monId = :monId
|
WHERE monId = :monId
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
fun getTransformationHistory(monId: Long): Flow<List<CharacterDtos.TransformationHistory>>
|
suspend fun getTransformationHistory(monId: Long): List<CharacterDtos.TransformationHistory>?
|
||||||
|
|
||||||
@Query(
|
@Query(
|
||||||
"""
|
"""
|
||||||
@ -110,13 +110,13 @@ interface UserCharacterDao {
|
|||||||
suspend fun getCharacter(id: Long): UserCharacter
|
suspend fun getCharacter(id: Long): UserCharacter
|
||||||
|
|
||||||
@Query("SELECT * FROM BECharacterData WHERE id = :id")
|
@Query("SELECT * FROM BECharacterData WHERE id = :id")
|
||||||
fun getBeData(id: Long): Flow<BECharacterData>
|
suspend fun getBeData(id: Long): BECharacterData
|
||||||
|
|
||||||
@Query("SELECT * FROM VBCharacterData WHERE id = :id")
|
@Query("SELECT * FROM VBCharacterData WHERE id = :id")
|
||||||
fun getVbData(id: Long): Flow<VBCharacterData>
|
suspend fun getVbData(id: Long): VBCharacterData
|
||||||
|
|
||||||
@Query("SELECT * FROM SpecialMissions WHERE characterId = :id")
|
@Query("SELECT * FROM SpecialMissions WHERE characterId = :id")
|
||||||
fun getSpecialMissions(id: Long): Flow<List<SpecialMissions>>
|
suspend fun getSpecialMissions(id: Long): List<SpecialMissions>
|
||||||
|
|
||||||
@Query(
|
@Query(
|
||||||
"""
|
"""
|
||||||
@ -143,7 +143,7 @@ interface UserCharacterDao {
|
|||||||
LIMIT 1
|
LIMIT 1
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
fun getActiveCharacter(): Flow<CharacterDtos.CharacterWithSprites?>
|
suspend fun getActiveCharacter(): CharacterDtos.CharacterWithSprites?
|
||||||
|
|
||||||
@Query("DELETE FROM UserCharacter WHERE id = :id")
|
@Query("DELETE FROM UserCharacter WHERE id = :id")
|
||||||
fun deleteCharacterById(id: Long)
|
fun deleteCharacterById(id: Long)
|
||||||
|
|||||||
@ -24,10 +24,4 @@ object CardDtos {
|
|||||||
val characterHp: Int,
|
val characterHp: Int,
|
||||||
val steps: Int,
|
val steps: Int,
|
||||||
)
|
)
|
||||||
|
|
||||||
data class CardIcon (
|
|
||||||
val cardIcon: ByteArray,
|
|
||||||
val cardIconWidth: Int,
|
|
||||||
val cardIconHeight: Int
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
@ -1,12 +1,13 @@
|
|||||||
package com.github.nacabaro.vbhelper.navigation
|
package com.github.nacabaro.vbhelper.navigation
|
||||||
|
|
||||||
|
import android.util.Log
|
||||||
import androidx.compose.animation.core.tween
|
import androidx.compose.animation.core.tween
|
||||||
import androidx.compose.animation.fadeIn
|
import androidx.compose.animation.fadeIn
|
||||||
import androidx.compose.animation.fadeOut
|
import androidx.compose.animation.fadeOut
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
@ -98,14 +99,20 @@ fun AppNavigation(
|
|||||||
composable(NavigationItems.Scan.route) {
|
composable(NavigationItems.Scan.route) {
|
||||||
val characterIdString = it.arguments?.getString("characterId")
|
val characterIdString = it.arguments?.getString("characterId")
|
||||||
var characterId by remember { mutableStateOf(characterIdString?.toLongOrNull()) }
|
var characterId by remember { mutableStateOf(characterIdString?.toLongOrNull()) }
|
||||||
|
Log.d("ScanScreen", "characterId: $characterId")
|
||||||
val launchedFromHomeScreen = (characterIdString?.toLongOrNull() == null)
|
val launchedFromHomeScreen = (characterIdString?.toLongOrNull() == null)
|
||||||
|
|
||||||
if (characterId == null) {
|
if (characterId == null) {
|
||||||
val context = LocalContext.current.applicationContext as VBHelper
|
val context = LocalContext.current.applicationContext as VBHelper
|
||||||
val storageRepository = StorageRepository(context.container.db)
|
val storageRepository = StorageRepository(context.container.db)
|
||||||
val characterData by storageRepository.getActiveCharacter().collectAsState(null)
|
|
||||||
if (characterData != null) {
|
LaunchedEffect(characterId) {
|
||||||
characterId = characterData!!.id
|
if (characterId == null) {
|
||||||
|
val characterData = storageRepository.getActiveCharacter()
|
||||||
|
if (characterData != null) {
|
||||||
|
characterId = characterData.id
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -11,7 +11,6 @@ import androidx.compose.material3.Scaffold
|
|||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.collectAsState
|
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
@ -29,7 +28,9 @@ import com.github.nacabaro.vbhelper.components.TopBanner
|
|||||||
import com.github.nacabaro.vbhelper.di.VBHelper
|
import com.github.nacabaro.vbhelper.di.VBHelper
|
||||||
import com.github.nacabaro.vbhelper.utils.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.BECharacterData
|
||||||
|
import com.github.nacabaro.vbhelper.domain.device_data.SpecialMissions
|
||||||
import com.github.nacabaro.vbhelper.domain.device_data.VBCharacterData
|
import com.github.nacabaro.vbhelper.domain.device_data.VBCharacterData
|
||||||
|
import com.github.nacabaro.vbhelper.dtos.CharacterDtos
|
||||||
import com.github.nacabaro.vbhelper.dtos.ItemDtos
|
import com.github.nacabaro.vbhelper.dtos.ItemDtos
|
||||||
import com.github.nacabaro.vbhelper.navigation.NavigationItems
|
import com.github.nacabaro.vbhelper.navigation.NavigationItems
|
||||||
import com.github.nacabaro.vbhelper.screens.homeScreens.screens.BEBEmHomeScreen
|
import com.github.nacabaro.vbhelper.screens.homeScreens.screens.BEBEmHomeScreen
|
||||||
@ -37,12 +38,9 @@ import com.github.nacabaro.vbhelper.screens.homeScreens.screens.BEDiMHomeScreen
|
|||||||
import com.github.nacabaro.vbhelper.screens.homeScreens.screens.VBDiMHomeScreen
|
import com.github.nacabaro.vbhelper.screens.homeScreens.screens.VBDiMHomeScreen
|
||||||
import com.github.nacabaro.vbhelper.screens.itemsScreen.ObtainedItemDialog
|
import com.github.nacabaro.vbhelper.screens.itemsScreen.ObtainedItemDialog
|
||||||
import com.github.nacabaro.vbhelper.source.StorageRepository
|
import com.github.nacabaro.vbhelper.source.StorageRepository
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import com.github.nacabaro.vbhelper.R
|
import com.github.nacabaro.vbhelper.R
|
||||||
import com.github.nacabaro.vbhelper.dtos.CardDtos
|
|
||||||
import com.github.nacabaro.vbhelper.source.CardRepository
|
|
||||||
import com.github.nacabaro.vbhelper.utils.BitmapData
|
|
||||||
import kotlinx.coroutines.flow.flowOf
|
|
||||||
import kotlin.collections.emptyList
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun HomeScreen(
|
fun HomeScreen(
|
||||||
@ -51,60 +49,30 @@ fun HomeScreen(
|
|||||||
) {
|
) {
|
||||||
val application = LocalContext.current.applicationContext as VBHelper
|
val application = LocalContext.current.applicationContext as VBHelper
|
||||||
val storageRepository = StorageRepository(application.container.db)
|
val storageRepository = StorageRepository(application.container.db)
|
||||||
val cardRepository = CardRepository(application.container.db)
|
val activeMon = remember { mutableStateOf<CharacterDtos.CharacterWithSprites?>(null) }
|
||||||
|
val transformationHistory = remember { mutableStateOf<List<CharacterDtos.TransformationHistory>?>(null) }
|
||||||
val activeMon by storageRepository
|
val beData = remember { mutableStateOf<BECharacterData?>(null) }
|
||||||
.getActiveCharacter()
|
val vbData = remember { mutableStateOf<VBCharacterData?>(null) }
|
||||||
.collectAsState(initial = null)
|
val vbSpecialMissions = remember { mutableStateOf<List<SpecialMissions>>(emptyList()) }
|
||||||
|
|
||||||
val cardIconData by (
|
|
||||||
activeMon
|
|
||||||
?.let { chara ->
|
|
||||||
cardRepository.getCardIconByCharaId(chara.charId)
|
|
||||||
}
|
|
||||||
?: flowOf<CardDtos.CardIcon?>(null)
|
|
||||||
).collectAsState(initial = null)
|
|
||||||
|
|
||||||
val transformationHistory by (
|
|
||||||
activeMon
|
|
||||||
?.let { chara ->
|
|
||||||
storageRepository.getTransformationHistory(chara.id)
|
|
||||||
}
|
|
||||||
?: flowOf(emptyList())
|
|
||||||
).collectAsState(initial = emptyList())
|
|
||||||
|
|
||||||
val vbSpecialMissions by (
|
|
||||||
activeMon
|
|
||||||
?.takeIf { it.characterType == DeviceType.VBDevice }
|
|
||||||
?.let { chara ->
|
|
||||||
storageRepository.getSpecialMissions(chara.id)
|
|
||||||
}
|
|
||||||
?: flowOf(emptyList())
|
|
||||||
).collectAsState(initial = emptyList())
|
|
||||||
|
|
||||||
val vbData by (
|
|
||||||
activeMon
|
|
||||||
?.takeIf { it.characterType == DeviceType.VBDevice }
|
|
||||||
?.let { chara ->
|
|
||||||
storageRepository.getCharacterVbData(chara.id)
|
|
||||||
}
|
|
||||||
?: flowOf<VBCharacterData?>(null)
|
|
||||||
).collectAsState(initial = null)
|
|
||||||
|
|
||||||
val beData by (
|
|
||||||
activeMon
|
|
||||||
?.takeIf { it.characterType == DeviceType.BEDevice }
|
|
||||||
?.let { chara ->
|
|
||||||
storageRepository.getCharacterBeData(chara.id)
|
|
||||||
}
|
|
||||||
?: flowOf<BECharacterData?>(null)
|
|
||||||
).collectAsState(initial = null)
|
|
||||||
|
|
||||||
var adventureMissionsFinished by rememberSaveable { mutableStateOf(false) }
|
var adventureMissionsFinished by rememberSaveable { mutableStateOf(false) }
|
||||||
var betaWarning by rememberSaveable { mutableStateOf(true) }
|
var betaWarning by rememberSaveable { mutableStateOf(true) }
|
||||||
var collectedItem by remember { mutableStateOf<ItemDtos.PurchasedItem?>(null) }
|
var collectedItem by remember { mutableStateOf<ItemDtos.PurchasedItem?>(null) }
|
||||||
var collectedCurrency by remember { mutableStateOf<Int?>(null) }
|
var collectedCurrency by remember { mutableStateOf<Int?>(null) }
|
||||||
|
|
||||||
|
LaunchedEffect(storageRepository, activeMon, collectedItem) {
|
||||||
|
withContext(Dispatchers.IO) {
|
||||||
|
activeMon.value = storageRepository.getActiveCharacter()
|
||||||
|
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)
|
||||||
|
vbSpecialMissions.value = storageRepository.getSpecialMissions(activeMon.value!!.id)
|
||||||
|
transformationHistory.value = storageRepository.getTransformationHistory(activeMon.value!!.id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
LaunchedEffect(true) {
|
LaunchedEffect(true) {
|
||||||
homeScreenController
|
homeScreenController
|
||||||
.didAdventureMissionsFinish {
|
.didAdventureMissionsFinish {
|
||||||
@ -125,7 +93,7 @@ fun HomeScreen(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
) { contentPadding ->
|
) { contentPadding ->
|
||||||
if (activeMon == null || (beData == null && vbData == null) || cardIconData == null || transformationHistory.isEmpty()) {
|
if (activeMon.value == null || (beData.value == null && vbData.value == null) || transformationHistory.value == null) {
|
||||||
Column (
|
Column (
|
||||||
horizontalAlignment = Alignment.CenterHorizontally,
|
horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
verticalArrangement = Arrangement.Center,
|
verticalArrangement = Arrangement.Center,
|
||||||
@ -136,41 +104,32 @@ fun HomeScreen(
|
|||||||
Text(text = stringResource(R.string.adventure_empty_state))
|
Text(text = stringResource(R.string.adventure_empty_state))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
val cardIcon = BitmapData(
|
if (activeMon.value!!.isBemCard) {
|
||||||
bitmap = cardIconData!!.cardIcon,
|
|
||||||
width = cardIconData!!.cardIconWidth,
|
|
||||||
height = cardIconData!!.cardIconHeight
|
|
||||||
)
|
|
||||||
|
|
||||||
if (activeMon!!.isBemCard && beData != null) {
|
|
||||||
BEBEmHomeScreen(
|
BEBEmHomeScreen(
|
||||||
activeMon = activeMon!!,
|
activeMon = activeMon.value!!,
|
||||||
beData = beData!!,
|
beData = beData.value!!,
|
||||||
transformationHistory = transformationHistory,
|
transformationHistory = transformationHistory.value!!,
|
||||||
contentPadding = contentPadding,
|
contentPadding = contentPadding
|
||||||
cardIcon = cardIcon
|
|
||||||
)
|
)
|
||||||
} else if (!activeMon!!.isBemCard && activeMon!!.characterType == DeviceType.BEDevice && beData != null) {
|
} else if (!activeMon.value!!.isBemCard && activeMon.value!!.characterType == DeviceType.BEDevice) {
|
||||||
BEDiMHomeScreen(
|
BEDiMHomeScreen(
|
||||||
activeMon = activeMon!!,
|
activeMon = activeMon.value!!,
|
||||||
beData = beData!!,
|
beData = beData.value!!,
|
||||||
transformationHistory = transformationHistory,
|
transformationHistory = transformationHistory.value!!,
|
||||||
contentPadding = contentPadding,
|
contentPadding = contentPadding
|
||||||
cardIcon = cardIcon
|
|
||||||
)
|
)
|
||||||
} else if (vbData != null) {
|
} else {
|
||||||
VBDiMHomeScreen(
|
VBDiMHomeScreen(
|
||||||
activeMon = activeMon!!,
|
activeMon = activeMon.value!!,
|
||||||
vbData = vbData!!,
|
vbData = vbData.value!!,
|
||||||
transformationHistory = transformationHistory,
|
transformationHistory = transformationHistory.value!!,
|
||||||
contentPadding = contentPadding,
|
contentPadding = contentPadding,
|
||||||
specialMissions = vbSpecialMissions,
|
specialMissions = vbSpecialMissions.value,
|
||||||
homeScreenController = homeScreenController,
|
homeScreenController = homeScreenController,
|
||||||
onClickCollect = { item, currency ->
|
onClickCollect = { item, currency ->
|
||||||
collectedItem = item
|
collectedItem = item
|
||||||
collectedCurrency = currency
|
collectedCurrency = currency
|
||||||
},
|
}
|
||||||
cardIcon = cardIcon
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,8 +1,9 @@
|
|||||||
package com.github.nacabaro.vbhelper.screens.homeScreens
|
package com.github.nacabaro.vbhelper.screens.homeScreens
|
||||||
|
|
||||||
|
import com.github.cfogrady.vbnfc.vb.SpecialMission
|
||||||
import com.github.nacabaro.vbhelper.dtos.ItemDtos
|
import com.github.nacabaro.vbhelper.dtos.ItemDtos
|
||||||
|
|
||||||
interface HomeScreenController {
|
interface HomeScreenController {
|
||||||
fun didAdventureMissionsFinish(onCompletion: (Boolean) -> Unit)
|
fun didAdventureMissionsFinish(onCompletion: (Boolean) -> Unit)
|
||||||
fun clearSpecialMission(missionId: Long, onCleared: (ItemDtos.PurchasedItem?, Int?) -> Unit)
|
fun clearSpecialMission(missionId: Long, missionCompletion: SpecialMission.Status, onCleared: (ItemDtos.PurchasedItem?, Int?) -> Unit)
|
||||||
}
|
}
|
||||||
@ -33,18 +33,13 @@ class HomeScreenControllerImpl(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun clearSpecialMission(missionId: Long, onCleared: (ItemDtos.PurchasedItem?, Int?) -> Unit) {
|
override fun clearSpecialMission(missionId: Long, missionCompletion: SpecialMission.Status, onCleared: (ItemDtos.PurchasedItem?, Int?) -> Unit) {
|
||||||
componentActivity.lifecycleScope.launch {
|
componentActivity.lifecycleScope.launch {
|
||||||
val missionStatus = database
|
|
||||||
.specialMissionDao()
|
|
||||||
.getSpecialMission(missionId)
|
|
||||||
.first()
|
|
||||||
|
|
||||||
database
|
database
|
||||||
.specialMissionDao()
|
.specialMissionDao()
|
||||||
.clearSpecialMission(missionId)
|
.clearSpecialMission(missionId)
|
||||||
|
|
||||||
if (missionStatus.status == SpecialMission.Status.COMPLETED) {
|
if (missionCompletion == SpecialMission.Status.COMPLETED) {
|
||||||
val randomItem = database
|
val randomItem = database
|
||||||
.itemDao()
|
.itemDao()
|
||||||
.getAllItems()
|
.getAllItems()
|
||||||
@ -78,6 +73,7 @@ class HomeScreenControllerImpl(
|
|||||||
} else {
|
} else {
|
||||||
onCleared(null, null)
|
onCleared(null, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,56 +0,0 @@
|
|||||||
package com.github.nacabaro.vbhelper.screens.homeScreens.dialogs
|
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.Column
|
|
||||||
import androidx.compose.foundation.layout.Row
|
|
||||||
import androidx.compose.foundation.layout.Spacer
|
|
||||||
import androidx.compose.foundation.layout.padding
|
|
||||||
import androidx.compose.material3.Button
|
|
||||||
import androidx.compose.material3.Card
|
|
||||||
import androidx.compose.material3.Text
|
|
||||||
import androidx.compose.runtime.Composable
|
|
||||||
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 androidx.compose.ui.window.Dialog
|
|
||||||
import com.github.nacabaro.vbhelper.R
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun DeleteSpecialMissionDialog(
|
|
||||||
onClickDismiss: () -> Unit,
|
|
||||||
onClickDelete: () -> Unit
|
|
||||||
) {
|
|
||||||
Dialog(
|
|
||||||
onDismissRequest = onClickDismiss
|
|
||||||
) {
|
|
||||||
Card {
|
|
||||||
Column(
|
|
||||||
modifier = Modifier
|
|
||||||
.padding(16.dp)
|
|
||||||
) {
|
|
||||||
Text(
|
|
||||||
text = stringResource(R.string.home_special_mission_delete_main),
|
|
||||||
textAlign = TextAlign.Center
|
|
||||||
)
|
|
||||||
Spacer(modifier = Modifier.padding(8.dp))
|
|
||||||
Row {
|
|
||||||
Button(
|
|
||||||
onClick = onClickDismiss,
|
|
||||||
modifier = Modifier
|
|
||||||
.padding(8.dp)
|
|
||||||
) {
|
|
||||||
Text(text = stringResource(R.string.home_special_mission_delete_dismiss))
|
|
||||||
}
|
|
||||||
|
|
||||||
Button(
|
|
||||||
onClick = onClickDelete,
|
|
||||||
modifier = Modifier
|
|
||||||
.padding(8.dp)
|
|
||||||
) {
|
|
||||||
Text(text = stringResource(R.string.home_special_mission_delete_remove))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -26,7 +26,6 @@ import java.util.Locale
|
|||||||
fun BEBEmHomeScreen(
|
fun BEBEmHomeScreen(
|
||||||
activeMon: CharacterDtos.CharacterWithSprites,
|
activeMon: CharacterDtos.CharacterWithSprites,
|
||||||
beData: BECharacterData,
|
beData: BECharacterData,
|
||||||
cardIcon: BitmapData,
|
|
||||||
transformationHistory: List<CharacterDtos.TransformationHistory>,
|
transformationHistory: List<CharacterDtos.TransformationHistory>,
|
||||||
contentPadding: PaddingValues
|
contentPadding: PaddingValues
|
||||||
) {
|
) {
|
||||||
@ -47,7 +46,6 @@ fun BEBEmHomeScreen(
|
|||||||
),
|
),
|
||||||
multiplier = 8,
|
multiplier = 8,
|
||||||
shape = androidx.compose.material.MaterialTheme.shapes.small,
|
shape = androidx.compose.material.MaterialTheme.shapes.small,
|
||||||
cardIcon = cardIcon,
|
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.weight(1f)
|
.weight(1f)
|
||||||
.aspectRatio(1f)
|
.aspectRatio(1f)
|
||||||
|
|||||||
@ -26,7 +26,6 @@ import kotlin.text.format
|
|||||||
@Composable
|
@Composable
|
||||||
fun BEDiMHomeScreen(
|
fun BEDiMHomeScreen(
|
||||||
activeMon: CharacterDtos.CharacterWithSprites,
|
activeMon: CharacterDtos.CharacterWithSprites,
|
||||||
cardIcon: BitmapData,
|
|
||||||
beData: BECharacterData,
|
beData: BECharacterData,
|
||||||
transformationHistory: List<CharacterDtos.TransformationHistory>,
|
transformationHistory: List<CharacterDtos.TransformationHistory>,
|
||||||
contentPadding: PaddingValues
|
contentPadding: PaddingValues
|
||||||
@ -46,7 +45,6 @@ fun BEDiMHomeScreen(
|
|||||||
width = activeMon.spriteWidth,
|
width = activeMon.spriteWidth,
|
||||||
height = activeMon.spriteHeight
|
height = activeMon.spriteHeight
|
||||||
),
|
),
|
||||||
cardIcon = cardIcon,
|
|
||||||
multiplier = 8,
|
multiplier = 8,
|
||||||
shape = androidx.compose.material.MaterialTheme.shapes.small,
|
shape = androidx.compose.material.MaterialTheme.shapes.small,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
|
|||||||
@ -10,10 +10,6 @@ import androidx.compose.foundation.rememberScrollState
|
|||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.verticalScroll
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
|
||||||
import androidx.compose.runtime.mutableStateOf
|
|
||||||
import androidx.compose.runtime.remember
|
|
||||||
import androidx.compose.runtime.setValue
|
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
@ -30,13 +26,11 @@ import com.github.nacabaro.vbhelper.screens.homeScreens.HomeScreenControllerImpl
|
|||||||
import com.github.nacabaro.vbhelper.utils.BitmapData
|
import com.github.nacabaro.vbhelper.utils.BitmapData
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import com.github.nacabaro.vbhelper.screens.homeScreens.dialogs.DeleteSpecialMissionDialog
|
|
||||||
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun VBDiMHomeScreen(
|
fun VBDiMHomeScreen(
|
||||||
activeMon: CharacterDtos.CharacterWithSprites,
|
activeMon: CharacterDtos.CharacterWithSprites,
|
||||||
cardIcon: BitmapData,
|
|
||||||
vbData: VBCharacterData,
|
vbData: VBCharacterData,
|
||||||
specialMissions: List<SpecialMissions>,
|
specialMissions: List<SpecialMissions>,
|
||||||
homeScreenController: HomeScreenControllerImpl,
|
homeScreenController: HomeScreenControllerImpl,
|
||||||
@ -44,8 +38,6 @@ fun VBDiMHomeScreen(
|
|||||||
contentPadding: PaddingValues,
|
contentPadding: PaddingValues,
|
||||||
onClickCollect: (ItemDtos.PurchasedItem?, Int?) -> Unit
|
onClickCollect: (ItemDtos.PurchasedItem?, Int?) -> Unit
|
||||||
) {
|
) {
|
||||||
var selectedSpecialMissionId by remember { mutableStateOf<Long>(-1) }
|
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(top = contentPadding.calculateTopPadding())
|
.padding(top = contentPadding.calculateTopPadding())
|
||||||
@ -61,7 +53,6 @@ fun VBDiMHomeScreen(
|
|||||||
width = activeMon.spriteWidth,
|
width = activeMon.spriteWidth,
|
||||||
height = activeMon.spriteHeight
|
height = activeMon.spriteHeight
|
||||||
),
|
),
|
||||||
cardIcon = cardIcon,
|
|
||||||
multiplier = 8,
|
multiplier = 8,
|
||||||
shape = androidx.compose.material.MaterialTheme.shapes.small,
|
shape = androidx.compose.material.MaterialTheme.shapes.small,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
@ -190,28 +181,11 @@ fun VBDiMHomeScreen(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.weight(1f)
|
.weight(1f)
|
||||||
.padding(8.dp),
|
.padding(8.dp),
|
||||||
onClickMission = { missionId ->
|
) {
|
||||||
selectedSpecialMissionId = missionId
|
homeScreenController
|
||||||
},
|
.clearSpecialMission(mission.id, mission.status, onClickCollect)
|
||||||
onClickCollect = {
|
}
|
||||||
homeScreenController
|
|
||||||
.clearSpecialMission(selectedSpecialMissionId, onClickCollect)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selectedSpecialMissionId.toInt() != -1) {
|
|
||||||
DeleteSpecialMissionDialog(
|
|
||||||
onClickDismiss = {
|
|
||||||
selectedSpecialMissionId = -1
|
|
||||||
},
|
|
||||||
onClickDelete = {
|
|
||||||
homeScreenController
|
|
||||||
.clearSpecialMission(selectedSpecialMissionId, onClickCollect)
|
|
||||||
selectedSpecialMissionId = -1
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@ -11,8 +11,6 @@ import com.github.nacabaro.vbhelper.domain.device_data.VBCharacterData
|
|||||||
import com.github.nacabaro.vbhelper.dtos.ItemDtos
|
import com.github.nacabaro.vbhelper.dtos.ItemDtos
|
||||||
import com.github.nacabaro.vbhelper.utils.DeviceType
|
import com.github.nacabaro.vbhelper.utils.DeviceType
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.first
|
|
||||||
import kotlinx.coroutines.flow.firstOrNull
|
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
@ -54,16 +52,9 @@ class ItemsScreenControllerImpl (
|
|||||||
var vbCharacterData: VBCharacterData? = null
|
var vbCharacterData: VBCharacterData? = null
|
||||||
|
|
||||||
if (characterData.characterType == DeviceType.BEDevice) {
|
if (characterData.characterType == DeviceType.BEDevice) {
|
||||||
beCharacterData = database
|
beCharacterData = database.userCharacterDao().getBeData(characterId)
|
||||||
.userCharacterDao()
|
|
||||||
.getBeData(characterId)
|
|
||||||
.firstOrNull()
|
|
||||||
|
|
||||||
} else if (characterData.characterType == DeviceType.VBDevice) {
|
} else if (characterData.characterType == DeviceType.VBDevice) {
|
||||||
vbCharacterData = database
|
vbCharacterData = database.userCharacterDao().getVbData(characterId)
|
||||||
.userCharacterDao()
|
|
||||||
.getVbData(characterId)
|
|
||||||
.firstOrNull()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
@ -163,34 +154,32 @@ class ItemsScreenControllerImpl (
|
|||||||
else -> 0
|
else -> 0
|
||||||
}
|
}
|
||||||
|
|
||||||
val specialMissionSlot = when (itemIcon) {
|
|
||||||
ItemTypes.Step8k.id -> 0
|
|
||||||
ItemTypes.Step4k.id -> 0
|
|
||||||
ItemTypes.Vitals1000.id -> 1
|
|
||||||
ItemTypes.Vitals250.id -> 1
|
|
||||||
ItemTypes.Battle20.id -> 2
|
|
||||||
ItemTypes.Battle5.id -> 2
|
|
||||||
ItemTypes.Win10.id -> 3
|
|
||||||
ItemTypes.Win4.id -> 3
|
|
||||||
else -> 0
|
|
||||||
}
|
|
||||||
|
|
||||||
val availableSpecialMissions = database
|
val availableSpecialMissions = database
|
||||||
.userCharacterDao()
|
.userCharacterDao()
|
||||||
.getSpecialMissions(characterId)
|
.getSpecialMissions(characterId)
|
||||||
.first()
|
|
||||||
|
|
||||||
var newSpecialMission = availableSpecialMissions[specialMissionSlot]
|
var firstUnavailableMissionSlot: Long = 0
|
||||||
newSpecialMission = SpecialMissions(
|
var watchId = 0
|
||||||
id = newSpecialMission.id,
|
|
||||||
characterId = newSpecialMission.characterId,
|
for ((index, mission) in availableSpecialMissions.withIndex()) {
|
||||||
|
if (
|
||||||
|
mission.status == SpecialMission.Status.UNAVAILABLE
|
||||||
|
) {
|
||||||
|
firstUnavailableMissionSlot = mission.id
|
||||||
|
watchId = index + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val newSpecialMission = SpecialMissions(
|
||||||
|
id = firstUnavailableMissionSlot,
|
||||||
|
characterId = characterId,
|
||||||
|
missionType = specialMissionType,
|
||||||
goal = specialMissionGoal,
|
goal = specialMissionGoal,
|
||||||
watchId = newSpecialMission.watchId,
|
|
||||||
progress = 0,
|
|
||||||
status = SpecialMission.Status.AVAILABLE,
|
|
||||||
timeElapsedInMinutes = 0,
|
|
||||||
timeLimitInMinutes = itemLength,
|
timeLimitInMinutes = itemLength,
|
||||||
missionType = specialMissionType
|
watchId = watchId,
|
||||||
|
status = SpecialMission.Status.AVAILABLE,
|
||||||
|
progress = 0,
|
||||||
|
timeElapsedInMinutes = 0
|
||||||
)
|
)
|
||||||
|
|
||||||
database
|
database
|
||||||
|
|||||||
@ -55,7 +55,6 @@ class ToNfcConverter(
|
|||||||
val vbData = database
|
val vbData = database
|
||||||
.userCharacterDao()
|
.userCharacterDao()
|
||||||
.getVbData(characterId)
|
.getVbData(characterId)
|
||||||
.first()
|
|
||||||
|
|
||||||
val paddedTransformationArray = generateTransformationHistory(characterId, 9)
|
val paddedTransformationArray = generateTransformationHistory(characterId, 9)
|
||||||
|
|
||||||
@ -117,7 +116,6 @@ class ToNfcConverter(
|
|||||||
val specialMissions = database
|
val specialMissions = database
|
||||||
.userCharacterDao()
|
.userCharacterDao()
|
||||||
.getSpecialMissions(characterId)
|
.getSpecialMissions(characterId)
|
||||||
.first()
|
|
||||||
|
|
||||||
val watchSpecialMissions = specialMissions.map {
|
val watchSpecialMissions = specialMissions.map {
|
||||||
SpecialMission(
|
SpecialMission(
|
||||||
@ -177,7 +175,6 @@ class ToNfcConverter(
|
|||||||
val beData = database
|
val beData = database
|
||||||
.userCharacterDao()
|
.userCharacterDao()
|
||||||
.getBeData(characterId)
|
.getBeData(characterId)
|
||||||
.first()
|
|
||||||
|
|
||||||
val paddedTransformationArray = generateTransformationHistory(characterId)
|
val paddedTransformationArray = generateTransformationHistory(characterId)
|
||||||
|
|
||||||
@ -240,8 +237,7 @@ class ToNfcConverter(
|
|||||||
): Array<NfcCharacter.Transformation> {
|
): Array<NfcCharacter.Transformation> {
|
||||||
val transformationHistory = database
|
val transformationHistory = database
|
||||||
.userCharacterDao()
|
.userCharacterDao()
|
||||||
.getTransformationHistory(characterId)
|
.getTransformationHistory(characterId)!!
|
||||||
.first()
|
|
||||||
.map {
|
.map {
|
||||||
val date = Date(it.transformationDate)
|
val date = Date(it.transformationDate)
|
||||||
val calendar = android.icu.util.GregorianCalendar(TimeZone.getTimeZone("UTC"))
|
val calendar = android.icu.util.GregorianCalendar(TimeZone.getTimeZone("UTC"))
|
||||||
|
|||||||
@ -1,15 +0,0 @@
|
|||||||
package com.github.nacabaro.vbhelper.source
|
|
||||||
|
|
||||||
import com.github.nacabaro.vbhelper.database.AppDatabase
|
|
||||||
import com.github.nacabaro.vbhelper.dtos.CardDtos
|
|
||||||
import kotlinx.coroutines.flow.Flow
|
|
||||||
|
|
||||||
class CardRepository (
|
|
||||||
private val db: AppDatabase
|
|
||||||
) {
|
|
||||||
fun getCardIconByCharaId(charaId: Long): Flow<CardDtos.CardIcon> {
|
|
||||||
return db
|
|
||||||
.cardDao()
|
|
||||||
.getCardIconByCharaId(charaId = charaId)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -19,19 +19,19 @@ class StorageRepository (
|
|||||||
return db.userCharacterDao().getCharacterWithSprites(id)
|
return db.userCharacterDao().getCharacterWithSprites(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getCharacterBeData(id: Long): Flow<BECharacterData> {
|
suspend fun getCharacterBeData(id: Long): BECharacterData {
|
||||||
return db.userCharacterDao().getBeData(id)
|
return db.userCharacterDao().getBeData(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getTransformationHistory(characterId: Long): Flow<List<CharacterDtos.TransformationHistory>> {
|
suspend fun getTransformationHistory(characterId: Long): List<CharacterDtos.TransformationHistory>? {
|
||||||
return db.userCharacterDao().getTransformationHistory(characterId)
|
return db.userCharacterDao().getTransformationHistory(characterId)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getCharacterVbData(id: Long): Flow<VBCharacterData> {
|
suspend fun getCharacterVbData(id: Long): VBCharacterData {
|
||||||
return db.userCharacterDao().getVbData(id)
|
return db.userCharacterDao().getVbData(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getSpecialMissions(id: Long): Flow<List<SpecialMissions>> {
|
suspend fun getSpecialMissions(id: Long): List<SpecialMissions> {
|
||||||
return db.userCharacterDao().getSpecialMissions(id)
|
return db.userCharacterDao().getSpecialMissions(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ class StorageRepository (
|
|||||||
return db.itemDao().getItem(id)
|
return db.itemDao().getItem(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getActiveCharacter(): Flow<CharacterDtos.CharacterWithSprites?> {
|
suspend fun getActiveCharacter(): CharacterDtos.CharacterWithSprites? {
|
||||||
return db.userCharacterDao().getActiveCharacter()
|
return db.userCharacterDao().getActiveCharacter()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -222,8 +222,5 @@
|
|||||||
<string name="special_mission_wins_progress">Won %1$d battles</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_vitals_progress">Earned %1$d vitals</string>
|
||||||
<string name="special_mission_icon_content_description">Special mission icon</string>
|
<string name="special_mission_icon_content_description">Special mission icon</string>
|
||||||
<string name="home_special_mission_delete_main">Are you sure you want to delete this special mission with this progress?</string>
|
|
||||||
<string name="home_special_mission_delete_dismiss">Dismiss</string>
|
|
||||||
<string name="home_special_mission_delete_remove">Remove</string>
|
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
@ -1,5 +1,5 @@
|
|||||||
[versions]
|
[versions]
|
||||||
agp = "8.13.2"
|
agp = "8.13.1"
|
||||||
datastore = "1.1.2"
|
datastore = "1.1.2"
|
||||||
kotlin = "2.0.0"
|
kotlin = "2.0.0"
|
||||||
coreKtx = "1.15.0"
|
coreKtx = "1.15.0"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user