#76 session recap viewmodel en screen
This commit is contained in:
parent
53d292aef4
commit
96795d0e18
2 changed files with 93 additions and 1 deletions
|
@ -1,2 +1,65 @@
|
||||||
package be.ugent.sel.studeez.screens.session_recap
|
package be.ugent.sel.studeez.screens.session_recap
|
||||||
|
|
||||||
|
import androidx.compose.foundation.layout.Column
|
||||||
|
import androidx.compose.material.ButtonDefaults
|
||||||
|
import androidx.compose.material.Text
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import be.ugent.sel.studeez.R
|
||||||
|
import be.ugent.sel.studeez.common.composable.BasicButton
|
||||||
|
import be.ugent.sel.studeez.common.ext.basicButton
|
||||||
|
import be.ugent.sel.studeez.data.local.models.SessionReport
|
||||||
|
import be.ugent.sel.studeez.data.local.models.timer_functional.HoursMinutesSeconds
|
||||||
|
import be.ugent.sel.studeez.data.local.models.timer_functional.Time
|
||||||
|
|
||||||
|
data class SessionRecapActions(
|
||||||
|
val getSessionReport: () -> SessionReport,
|
||||||
|
val saveSession: () -> Unit,
|
||||||
|
val discardSession: () -> Unit
|
||||||
|
)
|
||||||
|
|
||||||
|
fun getSessionRecapActions(
|
||||||
|
viewModel: SessionRecapViewModel,
|
||||||
|
openAndPopUp: (String, String) -> Unit,
|
||||||
|
): SessionRecapActions {
|
||||||
|
return SessionRecapActions(
|
||||||
|
viewModel::getSessionReport,
|
||||||
|
{viewModel.saveSession(openAndPopUp)},
|
||||||
|
{viewModel.saveSession(openAndPopUp)}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun SessionRecapRoute(
|
||||||
|
openAndPopUp: (String, String) -> Unit,
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
|
viewModel: SessionRecapViewModel,
|
||||||
|
) {
|
||||||
|
SessionRecapScreen(
|
||||||
|
modifier = modifier,
|
||||||
|
getSessionRecapActions(viewModel, openAndPopUp)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun SessionRecapScreen(modifier: Modifier, sessionRecapActions: SessionRecapActions) {
|
||||||
|
val sessionReport: SessionReport = sessionRecapActions.getSessionReport()
|
||||||
|
val studyTime: Int = sessionReport.studyTime
|
||||||
|
val hms: HoursMinutesSeconds = Time(studyTime).getAsHMS()
|
||||||
|
Column {
|
||||||
|
Text(text = "You studied: ${hms.hours} : ${hms.minutes} : ${hms.seconds}")
|
||||||
|
|
||||||
|
BasicButton(
|
||||||
|
R.string.save, Modifier.basicButton()
|
||||||
|
) {
|
||||||
|
sessionRecapActions.saveSession()
|
||||||
|
}
|
||||||
|
BasicButton(
|
||||||
|
R.string.discard, Modifier.basicButton(),
|
||||||
|
colors = ButtonDefaults.buttonColors(backgroundColor = Color.Red)
|
||||||
|
) {
|
||||||
|
sessionRecapActions.discardSession()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,33 @@
|
||||||
package be.ugent.sel.studeez.screens.session_recap
|
package be.ugent.sel.studeez.screens.session_recap
|
||||||
|
|
||||||
class SessionRecapViewModel {
|
import be.ugent.sel.studeez.data.SessionReportState
|
||||||
|
import be.ugent.sel.studeez.data.local.models.SessionReport
|
||||||
|
import be.ugent.sel.studeez.domain.LogService
|
||||||
|
import be.ugent.sel.studeez.domain.SessionDAO
|
||||||
|
import be.ugent.sel.studeez.navigation.StudeezDestinations
|
||||||
|
import be.ugent.sel.studeez.screens.StudeezViewModel
|
||||||
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@HiltViewModel
|
||||||
|
class SessionRecapViewModel @Inject constructor(
|
||||||
|
private val sessionReportState: SessionReportState,
|
||||||
|
private val sessionDAO: SessionDAO,
|
||||||
|
logService: LogService
|
||||||
|
) : StudeezViewModel(logService) {
|
||||||
|
|
||||||
|
private val report: SessionReport = sessionReportState.sessionReport!!
|
||||||
|
|
||||||
|
fun getSessionReport(): SessionReport {
|
||||||
|
return report
|
||||||
|
}
|
||||||
|
|
||||||
|
fun saveSession(open: (String, String) -> Unit) {
|
||||||
|
sessionDAO.saveSession(getSessionReport())
|
||||||
|
open(StudeezDestinations.HOME_SCREEN, StudeezDestinations.SESSION_RECAP)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun discardSession(open: (String, String) -> Unit) {
|
||||||
|
open(StudeezDestinations.HOME_SCREEN, StudeezDestinations.SESSION_RECAP)
|
||||||
|
}
|
||||||
}
|
}
|
Reference in a new issue