refactor to get string in sessionscreen much cleaner

This commit is contained in:
brreynie 2023-04-25 18:37:50 +02:00
parent c73c06b11c
commit 50e2a3377e
9 changed files with 67 additions and 30 deletions

View file

@ -10,5 +10,5 @@ import javax.inject.Singleton
*/ */
@Singleton @Singleton
class SelectedTimerState @Inject constructor(){ class SelectedTimerState @Inject constructor(){
var selectedTimer: FunctionalTimer? = null lateinit var selectedTimer: FunctionalTimer
} }

View file

@ -4,14 +4,14 @@ class FunctionalCustomTimer(studyTime: Int) : FunctionalTimer(studyTime) {
override fun tick() { override fun tick() {
if (time.time == 0) { if (time.time == 0) {
view = StudyState.DONE state = StudyState.DONE
} else { } else {
time.minOne() time.minOne()
} }
} }
override fun hasEnded(): Boolean { override fun hasEnded(): Boolean {
return view == StudyState.DONE return state == StudyState.DONE
} }
override fun hasCurrentCountdownEnded(): Boolean { override fun hasCurrentCountdownEnded(): Boolean {

View file

@ -10,17 +10,17 @@ class FunctionalPomodoroTimer(
override fun tick() { override fun tick() {
if (time.time == 0 && breaksRemaining == 0) { if (time.time == 0 && breaksRemaining == 0) {
view = StudyState.DONE state = StudyState.DONE
return return
} }
if (time.time == 0) { if (time.time == 0) {
if (isInBreak) { if (isInBreak) {
breaksRemaining-- breaksRemaining--
view = StudyState.FOCUS_REMAINING state = StudyState.FOCUS_REMAINING
time.time = studyTime time.time = studyTime
} else { } else {
view = StudyState.BREAK state = StudyState.BREAK
time.time = breakTime time.time = breakTime
} }
isInBreak = !isInBreak isInBreak = !isInBreak

View file

@ -2,7 +2,7 @@ package be.ugent.sel.studeez.data.local.models.timer_functional
abstract class FunctionalTimer(initialValue: Int) { abstract class FunctionalTimer(initialValue: Int) {
val time: Time = Time(initialValue) val time: Time = Time(initialValue)
var view: StudyState = StudyState.FOCUS var state: StudyState = StudyState.FOCUS
fun getHoursMinutesSeconds(): HoursMinutesSeconds { fun getHoursMinutesSeconds(): HoursMinutesSeconds {
return time.getAsHMS() return time.getAsHMS()

View file

@ -28,10 +28,10 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import be.ugent.sel.studeez.R import be.ugent.sel.studeez.R
import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalCustomTimer
import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalEndlessTimer import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalEndlessTimer
import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalPomodoroTimer import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalPomodoroTimer
import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer
import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer.StudyState
import be.ugent.sel.studeez.navigation.StudeezDestinations import be.ugent.sel.studeez.navigation.StudeezDestinations
import be.ugent.sel.studeez.resources import be.ugent.sel.studeez.resources
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
@ -76,10 +76,7 @@ fun SessionRoute(
mediaplayer.setOnPreparedListener { mediaplayer.setOnPreparedListener {
// mediaplayer.start() // mediaplayer.start()
} }
SessionScreen( SessionScreen(open = open, sessionActions = getSessionActions(viewModel, mediaplayer))
open = open,
sessionActions = getSessionActions(viewModel, mediaplayer),
)
} }
@Composable @Composable
@ -156,15 +153,13 @@ private fun Timer(
fontWeight = FontWeight.Bold, fontWeight = FontWeight.Bold,
fontSize = 40.sp, fontSize = 40.sp,
) )
val stateString: String = when (sessionActions.getTimer().view) {
StudyState.DONE -> resources().getString(R.string.state_done)
StudyState.FOCUS -> resources().getString(R.string.state_focus)
StudyState.BREAK -> resources().getString(R.string.state_take_a_break)
StudyState.FOCUS_REMAINING -> (sessionActions.getTimer() as FunctionalPomodoroTimer?)?.breaksRemaining?.let {
resources().getQuantityString(R.plurals.state_focus_remaining, it, it)
}.toString()
}
val stateString = when (val timer = sessionActions.getTimer()) {
is FunctionalCustomTimer -> customTimerStateString(timer = timer)
is FunctionalPomodoroTimer -> pomodoroTimerStateString(timer = timer)
is FunctionalEndlessTimer -> endlessTimerStateString(timer = timer)
else -> "Unknown timer."
}
Text( Text(
text = stateString, text = stateString,
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
@ -196,10 +191,52 @@ private fun Timer(
} }
} }
@Composable
fun customTimerStateString(
timer: FunctionalCustomTimer,
): String {
return when (timer.state) {
FunctionalTimer.StudyState.DONE -> resources().getString(R.string.state_done)
FunctionalTimer.StudyState.FOCUS -> resources().getString(R.string.state_focus)
else -> "Unknown state"
}
}
@Composable
fun pomodoroTimerStateString(
timer: FunctionalPomodoroTimer,
): String {
return when (timer.state) {
FunctionalTimer.StudyState.DONE -> resources().getString(R.string.state_done)
FunctionalTimer.StudyState.FOCUS -> resources().getString(R.string.state_focus)
FunctionalTimer.StudyState.BREAK -> resources().getString(R.string.state_take_a_break)
FunctionalTimer.StudyState.FOCUS_REMAINING -> resources().getQuantityString(
R.plurals.state_focus_remaining,
timer.breaksRemaining,
timer.breaksRemaining,
)
else -> "Unknown state"
}
}
@Composable
fun endlessTimerStateString(
timer: FunctionalEndlessTimer,
): String {
return when (timer.state) {
FunctionalTimer.StudyState.DONE -> resources().getString(R.string.state_done)
FunctionalTimer.StudyState.FOCUS -> resources().getString(R.string.state_focus)
else -> "Unknown state"
}
}
@Preview @Preview
@Composable @Composable
fun TimerPreview() { fun TimerPreview() {
Timer(sessionActions = SessionActions({ FunctionalEndlessTimer() }, { "Preview" }, {}, {})) Timer(
sessionActions = SessionActions({ FunctionalEndlessTimer() }, { "Preview" }, {}, {}),
)
} }
@Preview @Preview
@ -207,6 +244,6 @@ fun TimerPreview() {
fun SessionPreview() { fun SessionPreview() {
SessionScreen( SessionScreen(
open = {}, open = {},
sessionActions = SessionActions({ FunctionalEndlessTimer() }, { "Preview" }, {}, {}) sessionActions = SessionActions({ FunctionalEndlessTimer() }, { "Preview" }, {}, {}),
) )
} }

View file

@ -18,7 +18,7 @@ class SessionViewModel @Inject constructor(
private val task : String = "No task selected" // placeholder for tasks implementation private val task : String = "No task selected" // placeholder for tasks implementation
fun getTimer() : FunctionalTimer { fun getTimer() : FunctionalTimer {
return selectedTimerState.selectedTimer!! return selectedTimerState.selectedTimer
} }
fun getTask(): String { fun getTask(): String {

View file

@ -38,7 +38,7 @@ class FunctionalCustomTimerUnitTest : FunctionalTimerUnitTest() {
Assert.assertTrue(timer.hasEnded()) Assert.assertTrue(timer.hasEnded())
Assert.assertEquals( Assert.assertEquals(
FunctionalTimer.StudyState.DONE, FunctionalTimer.StudyState.DONE,
timer.view timer.state
) )
} }
} }

View file

@ -39,7 +39,7 @@ class FunctionalEndlessTimerUnitTest : FunctionalTimerUnitTest() {
Assert.assertFalse(timer.hasEnded()) Assert.assertFalse(timer.hasEnded())
Assert.assertEquals( Assert.assertEquals(
FunctionalTimer.StudyState.FOCUS, FunctionalTimer.StudyState.FOCUS,
timer.view timer.state
) )
} }
} }

View file

@ -31,7 +31,7 @@ class FunctionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() {
) )
Assert.assertEquals( Assert.assertEquals(
FunctionalTimer.StudyState.FOCUS, FunctionalTimer.StudyState.FOCUS,
pomodoroTimer.view, pomodoroTimer.state,
) )
} }
@ -54,7 +54,7 @@ class FunctionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() {
Assert.assertTrue(pomodoroTimer.hasEnded()) Assert.assertTrue(pomodoroTimer.hasEnded())
Assert.assertEquals( Assert.assertEquals(
FunctionalTimer.StudyState.DONE, FunctionalTimer.StudyState.DONE,
pomodoroTimer.view, pomodoroTimer.state,
) )
} }
@ -67,7 +67,7 @@ class FunctionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() {
Assert.assertTrue(pomodoroTimer.isInBreak) Assert.assertTrue(pomodoroTimer.isInBreak)
Assert.assertEquals( Assert.assertEquals(
FunctionalTimer.StudyState.BREAK, FunctionalTimer.StudyState.BREAK,
pomodoroTimer.view pomodoroTimer.state
) )
} }
@ -79,7 +79,7 @@ class FunctionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() {
Assert.assertTrue(pomodoroTimer.isInBreak) Assert.assertTrue(pomodoroTimer.isInBreak)
Assert.assertEquals( Assert.assertEquals(
FunctionalTimer.StudyState.BREAK, FunctionalTimer.StudyState.BREAK,
pomodoroTimer.view pomodoroTimer.state
) )
for (i in 0..breakTime) { for (i in 0..breakTime) {
pomodoroTimer.tick() pomodoroTimer.tick()
@ -92,7 +92,7 @@ class FunctionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() {
) )
Assert.assertEquals( Assert.assertEquals(
FunctionalTimer.StudyState.FOCUS_REMAINING, FunctionalTimer.StudyState.FOCUS_REMAINING,
pomodoroTimer.view pomodoroTimer.state
) )
} }
} }