diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/components/CharacterEntry.kt b/app/src/main/java/com/github/nacabaro/vbhelper/components/CharacterEntry.kt index 4d8110b..767d1cc 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/components/CharacterEntry.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/components/CharacterEntry.kt @@ -152,7 +152,8 @@ fun ItemDisplay( fun SpecialMissionsEntry( specialMission: SpecialMissions, modifier: Modifier = Modifier, - onClickCard: () -> Unit = { }, + onClickMission: (Long) -> Unit = { }, + onClickCollect: (Long) -> Unit = { } ) { val textValue = when (specialMission.missionType) { SpecialMission.Type.NONE -> stringResource(R.string.special_mission_none) @@ -219,10 +220,12 @@ fun SpecialMissionsEntry( Card( modifier = modifier, shape = androidx.compose.material.MaterialTheme.shapes.small, - onClick = if (specialMission.status == SpecialMission.Status.COMPLETED || specialMission.status == SpecialMission.Status.FAILED) { - onClickCard + onClick = if (specialMission.status == SpecialMission.Status.COMPLETED) { + { onClickCollect(specialMission.id) } + } else if (specialMission.status == SpecialMission.Status.UNAVAILABLE) { + { } } else { - { } + { onClickMission(specialMission.id) } }, colors = CardDefaults.cardColors( containerColor = color diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/daos/SpecialMissionDao.kt b/app/src/main/java/com/github/nacabaro/vbhelper/daos/SpecialMissionDao.kt index 7dc5c74..ccc864c 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/daos/SpecialMissionDao.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/daos/SpecialMissionDao.kt @@ -2,6 +2,8 @@ package com.github.nacabaro.vbhelper.daos import androidx.room.Dao import androidx.room.Query +import com.github.nacabaro.vbhelper.domain.device_data.SpecialMissions +import kotlinx.coroutines.flow.Flow @Dao interface SpecialMissionDao { @@ -12,4 +14,11 @@ interface SpecialMissionDao { WHERE id = :id """) suspend fun clearSpecialMission(id: Long) + + @Query(""" + SELECT * + FROM SpecialMissions + WHERE id = :id + """) + fun getSpecialMission(id: Long): Flow } \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/HomeScreenController.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/HomeScreenController.kt index 1c0093b..0e06410 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/HomeScreenController.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/HomeScreenController.kt @@ -1,9 +1,8 @@ package com.github.nacabaro.vbhelper.screens.homeScreens -import com.github.cfogrady.vbnfc.vb.SpecialMission import com.github.nacabaro.vbhelper.dtos.ItemDtos interface HomeScreenController { fun didAdventureMissionsFinish(onCompletion: (Boolean) -> Unit) - fun clearSpecialMission(missionId: Long, missionCompletion: SpecialMission.Status, onCleared: (ItemDtos.PurchasedItem?, Int?) -> Unit) + fun clearSpecialMission(missionId: Long, onCleared: (ItemDtos.PurchasedItem?, Int?) -> Unit) } \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/HomeScreenControllerImpl.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/HomeScreenControllerImpl.kt index e8824e8..6a126fa 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/HomeScreenControllerImpl.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/HomeScreenControllerImpl.kt @@ -33,13 +33,18 @@ class HomeScreenControllerImpl( } } - override fun clearSpecialMission(missionId: Long, missionCompletion: SpecialMission.Status, onCleared: (ItemDtos.PurchasedItem?, Int?) -> Unit) { + override fun clearSpecialMission(missionId: Long, onCleared: (ItemDtos.PurchasedItem?, Int?) -> Unit) { componentActivity.lifecycleScope.launch { + val missionStatus = database + .specialMissionDao() + .getSpecialMission(missionId) + .first() + database .specialMissionDao() .clearSpecialMission(missionId) - if (missionCompletion == SpecialMission.Status.COMPLETED) { + if (missionStatus.status == SpecialMission.Status.COMPLETED) { val randomItem = database .itemDao() .getAllItems() @@ -73,7 +78,6 @@ class HomeScreenControllerImpl( } else { onCleared(null, null) } - } } } \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/dialogs/DeleteSpecialMissionDialog.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/dialogs/DeleteSpecialMissionDialog.kt new file mode 100644 index 0000000..df5d9dc --- /dev/null +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/dialogs/DeleteSpecialMissionDialog.kt @@ -0,0 +1,56 @@ +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)) + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/screens/VBDiMHomeScreen.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/screens/VBDiMHomeScreen.kt index f29c7c0..8460b49 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/screens/VBDiMHomeScreen.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/screens/VBDiMHomeScreen.kt @@ -10,6 +10,10 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Text 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.unit.dp import androidx.compose.ui.unit.sp @@ -26,6 +30,7 @@ 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 +import com.github.nacabaro.vbhelper.screens.homeScreens.dialogs.DeleteSpecialMissionDialog @Composable @@ -39,6 +44,8 @@ fun VBDiMHomeScreen( contentPadding: PaddingValues, onClickCollect: (ItemDtos.PurchasedItem?, Int?) -> Unit ) { + var selectedSpecialMissionId by remember { mutableStateOf(-1) } + Column( modifier = Modifier .padding(top = contentPadding.calculateTopPadding()) @@ -183,11 +190,28 @@ fun VBDiMHomeScreen( modifier = Modifier .weight(1f) .padding(8.dp), - ) { - homeScreenController - .clearSpecialMission(mission.id, mission.status, onClickCollect) - } + onClickMission = { missionId -> + selectedSpecialMissionId = missionId + }, + onClickCollect = { + homeScreenController + .clearSpecialMission(selectedSpecialMissionId, onClickCollect) + } + ) } } } + + if (selectedSpecialMissionId.toInt() != -1) { + DeleteSpecialMissionDialog( + onClickDismiss = { + selectedSpecialMissionId = -1 + }, + onClickDelete = { + homeScreenController + .clearSpecialMission(selectedSpecialMissionId, onClickCollect) + selectedSpecialMissionId = -1 + } + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ItemsScreenControllerImpl.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ItemsScreenControllerImpl.kt index e3397d9..eb3f477 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ItemsScreenControllerImpl.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ItemsScreenControllerImpl.kt @@ -162,33 +162,35 @@ class ItemsScreenControllerImpl ( ItemTypes.Win4.id -> 4 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 .userCharacterDao() .getSpecialMissions(characterId) + .first() - var firstUnavailableMissionSlot: Long = 0 - var watchId = 0 - - for ((index, mission) in availableSpecialMissions.first().withIndex()) { - if ( - mission.status == SpecialMission.Status.UNAVAILABLE - ) { - firstUnavailableMissionSlot = mission.id - watchId = index + 1 - } - } - - val newSpecialMission = SpecialMissions( - id = firstUnavailableMissionSlot, - characterId = characterId, - missionType = specialMissionType, + var newSpecialMission = availableSpecialMissions[specialMissionSlot] + newSpecialMission = SpecialMissions( + id = newSpecialMission.id, + characterId = newSpecialMission.characterId, goal = specialMissionGoal, - timeLimitInMinutes = itemLength, - watchId = watchId, - status = SpecialMission.Status.AVAILABLE, + watchId = newSpecialMission.watchId, progress = 0, - timeElapsedInMinutes = 0 + status = SpecialMission.Status.AVAILABLE, + timeElapsedInMinutes = 0, + timeLimitInMinutes = itemLength, + missionType = specialMissionType ) database diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c9f31a3..b5c51fd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -222,5 +222,8 @@ Won %1$d battles Earned %1$d vitals Special mission icon + Are you sure you want to delete this special mission with this progress? + Dismiss + Remove \ No newline at end of file