M app/src/main/java/com/github/nacabaro/vbhelper/components/CharacterEntry.kt => app/src/main/java/com/github/nacabaro/vbhelper/components/CharacterEntry.kt +7 -4
@@ 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
M app/src/main/java/com/github/nacabaro/vbhelper/daos/SpecialMissionDao.kt => app/src/main/java/com/github/nacabaro/vbhelper/daos/SpecialMissionDao.kt +9 -0
@@ 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<SpecialMissions>
}=
\ No newline at end of file
M app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/HomeScreenController.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/HomeScreenController.kt +1 -2
@@ 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
M app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/HomeScreenControllerImpl.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/HomeScreenControllerImpl.kt +7 -3
@@ 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
A app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/dialogs/DeleteSpecialMissionDialog.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/dialogs/DeleteSpecialMissionDialog.kt +56 -0
@@ 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
M app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/screens/VBDiMHomeScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/screens/VBDiMHomeScreen.kt +28 -4
@@ 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<Long>(-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
M app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ItemsScreenControllerImpl.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/itemsScreen/ItemsScreenControllerImpl.kt +22 -20
@@ 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
M app/src/main/res/values/strings.xml => app/src/main/res/values/strings.xml +3 -0
@@ 222,5 222,8 @@
<string name="special_mission_wins_progress">Won %1$d battles</string>
<string name="special_mission_vitals_progress">Earned %1$d vitals</string>
<string name="special_mission_icon_content_description">Special mission icon</string>
+ <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>=
\ No newline at end of file