diff --git a/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerState.kt b/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerState.kt index f8fcebd..41e3228 100644 --- a/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerState.kt +++ b/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerState.kt @@ -10,5 +10,5 @@ import javax.inject.Singleton */ @Singleton class SelectedTimerState @Inject constructor(){ - var selectedTimer: FunctionalTimer? = null + lateinit var selectedTimer: FunctionalTimer } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/FunctionalCustomTimer.kt b/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/FunctionalCustomTimer.kt index ab533dd..35c636f 100644 --- a/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/FunctionalCustomTimer.kt +++ b/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/FunctionalCustomTimer.kt @@ -4,14 +4,14 @@ class FunctionalCustomTimer(studyTime: Int) : FunctionalTimer(studyTime) { override fun tick() { if (time.time == 0) { - view = StudyState.DONE + state = StudyState.DONE } else { time.minOne() } } override fun hasEnded(): Boolean { - return view == StudyState.DONE + return state == StudyState.DONE } override fun hasCurrentCountdownEnded(): Boolean { diff --git a/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/FunctionalPomodoroTimer.kt b/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/FunctionalPomodoroTimer.kt index 3e2b97e..cdf2098 100644 --- a/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/FunctionalPomodoroTimer.kt +++ b/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/FunctionalPomodoroTimer.kt @@ -10,17 +10,17 @@ class FunctionalPomodoroTimer( override fun tick() { if (time.time == 0 && breaksRemaining == 0) { - view = StudyState.DONE + state = StudyState.DONE return } if (time.time == 0) { if (isInBreak) { breaksRemaining-- - view = StudyState.FOCUS_REMAINING + state = StudyState.FOCUS_REMAINING time.time = studyTime } else { - view = StudyState.BREAK + state = StudyState.BREAK time.time = breakTime } isInBreak = !isInBreak diff --git a/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/FunctionalTimer.kt b/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/FunctionalTimer.kt index dae27c6..5dca63b 100644 --- a/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/FunctionalTimer.kt +++ b/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/FunctionalTimer.kt @@ -2,7 +2,7 @@ package be.ugent.sel.studeez.data.local.models.timer_functional abstract class FunctionalTimer(initialValue: Int) { val time: Time = Time(initialValue) - var view: StudyState = StudyState.FOCUS + var state: StudyState = StudyState.FOCUS fun getHoursMinutesSeconds(): HoursMinutesSeconds { return time.getAsHMS() diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionScreen.kt index 3db95c1..c6df242 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionScreen.kt @@ -28,10 +28,10 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp 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.FunctionalPomodoroTimer 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.resources import kotlinx.coroutines.delay @@ -76,10 +76,7 @@ fun SessionRoute( mediaplayer.setOnPreparedListener { // mediaplayer.start() } - SessionScreen( - open = open, - sessionActions = getSessionActions(viewModel, mediaplayer), - ) + SessionScreen(open = open, sessionActions = getSessionActions(viewModel, mediaplayer)) } @Composable @@ -156,15 +153,13 @@ private fun Timer( fontWeight = FontWeight.Bold, 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 = stateString, 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 @Composable fun TimerPreview() { - Timer(sessionActions = SessionActions({ FunctionalEndlessTimer() }, { "Preview" }, {}, {})) + Timer( + sessionActions = SessionActions({ FunctionalEndlessTimer() }, { "Preview" }, {}, {}), + ) } @Preview @@ -207,6 +244,6 @@ fun TimerPreview() { fun SessionPreview() { SessionScreen( open = {}, - sessionActions = SessionActions({ FunctionalEndlessTimer() }, { "Preview" }, {}, {}) + sessionActions = SessionActions({ FunctionalEndlessTimer() }, { "Preview" }, {}, {}), ) } diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionViewModel.kt index b45364e..f54629a 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionViewModel.kt @@ -18,7 +18,7 @@ class SessionViewModel @Inject constructor( private val task : String = "No task selected" // placeholder for tasks implementation fun getTimer() : FunctionalTimer { - return selectedTimerState.selectedTimer!! + return selectedTimerState.selectedTimer } fun getTask(): String { diff --git a/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalCustomTimerUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalCustomTimerUnitTest.kt index 2daa61e..7c3703b 100644 --- a/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalCustomTimerUnitTest.kt +++ b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalCustomTimerUnitTest.kt @@ -38,7 +38,7 @@ class FunctionalCustomTimerUnitTest : FunctionalTimerUnitTest() { Assert.assertTrue(timer.hasEnded()) Assert.assertEquals( FunctionalTimer.StudyState.DONE, - timer.view + timer.state ) } } \ No newline at end of file diff --git a/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalEndlessTimerUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalEndlessTimerUnitTest.kt index b83d436..30ea35d 100644 --- a/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalEndlessTimerUnitTest.kt +++ b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalEndlessTimerUnitTest.kt @@ -39,7 +39,7 @@ class FunctionalEndlessTimerUnitTest : FunctionalTimerUnitTest() { Assert.assertFalse(timer.hasEnded()) Assert.assertEquals( FunctionalTimer.StudyState.FOCUS, - timer.view + timer.state ) } } diff --git a/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalPomodoroTimerUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalPomodoroTimerUnitTest.kt index a49d2f7..f7624aa 100644 --- a/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalPomodoroTimerUnitTest.kt +++ b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalPomodoroTimerUnitTest.kt @@ -31,7 +31,7 @@ class FunctionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { ) Assert.assertEquals( FunctionalTimer.StudyState.FOCUS, - pomodoroTimer.view, + pomodoroTimer.state, ) } @@ -54,7 +54,7 @@ class FunctionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { Assert.assertTrue(pomodoroTimer.hasEnded()) Assert.assertEquals( FunctionalTimer.StudyState.DONE, - pomodoroTimer.view, + pomodoroTimer.state, ) } @@ -67,7 +67,7 @@ class FunctionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { Assert.assertTrue(pomodoroTimer.isInBreak) Assert.assertEquals( FunctionalTimer.StudyState.BREAK, - pomodoroTimer.view + pomodoroTimer.state ) } @@ -79,7 +79,7 @@ class FunctionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { Assert.assertTrue(pomodoroTimer.isInBreak) Assert.assertEquals( FunctionalTimer.StudyState.BREAK, - pomodoroTimer.view + pomodoroTimer.state ) for (i in 0..breakTime) { pomodoroTimer.tick() @@ -92,7 +92,7 @@ class FunctionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { ) Assert.assertEquals( FunctionalTimer.StudyState.FOCUS_REMAINING, - pomodoroTimer.view + pomodoroTimer.state ) } } \ No newline at end of file