From 826acc1186e00a9adac167f399914c58f8dbc6c2 Mon Sep 17 00:00:00 2001 From: reyniersbram <55666730+reyniersbram@users.noreply.github.com> Date: Tue, 18 Apr 2023 14:58:16 +0200 Subject: [PATCH] created studystate for functional timer to improve localisation --- .../timer_functional/FunctionalCustomTimer.kt | 2 +- .../FunctionalPomodoroTimer.kt | 6 ++--- .../timer_functional/FunctionalTimer.kt | 9 +++---- .../studeez/screens/session/SessionScreen.kt | 26 ++++++++++++++++--- app/src/main/res/values/strings.xml | 8 ++++++ .../FunctionalCustomTimerUnitTest.kt | 2 +- .../FunctionalEndlessTimerUnitTest.kt | 2 +- ....kt => FunctionalPomodoroTimerUnitTest.kt} | 12 ++++----- 8 files changed, 45 insertions(+), 22 deletions(-) rename app/src/test/java/be/ugent/sel/studeez/timer_functional/{FuntionalPomodoroTimerUnitTest.kt => FunctionalPomodoroTimerUnitTest.kt} (88%) 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 1cd9a69..5c5f396 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,7 +4,7 @@ class FunctionalCustomTimer(studyTime: Int) : FunctionalTimer(studyTime) { override fun tick() { if (time.time == 0) { - view = DONE + view = StudyState.DONE } else { time.minOne() } 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 326869a..f18d824 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 = DONE + view = StudyState.DONE return } if (time.time == 0) { if (isInBreak) { breaksRemaining-- - view = FOCUS_REMAINING(breaksRemaining) + view = StudyState.FOCUS_REMAINING time.time = studyTime } else { - view = BREAK + view = 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 8faf6d0..9f95296 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: String = FOCUS + var view: StudyState = StudyState.FOCUS fun getHoursMinutesSeconds(): HoursMinutesSeconds { return time.getAsHMS() @@ -12,11 +12,8 @@ abstract class FunctionalTimer(initialValue: Int) { abstract fun hasEnded(): Boolean - companion object { - const val FOCUS: String = "Focus" - const val DONE: String = "Done!" - const val BREAK: String = "Take a break!" - val FOCUS_REMAINING: (Int) -> String = { n -> "Focus! ($n breaks remaining)" } + enum class StudyState { + FOCUS, DONE, BREAK, FOCUS_REMAINING } } \ No newline at end of file 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 341d335..59952d9 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 @@ -3,15 +3,21 @@ package be.ugent.sel.studeez.screens.session import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material.Text -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +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.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.sp import androidx.hilt.navigation.compose.hiltViewModel import be.ugent.sel.studeez.R -import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate -import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate +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.resources import kotlinx.coroutines.delay import kotlin.time.Duration.Companion.seconds @@ -44,12 +50,24 @@ fun Timer(viewModel: SessionViewModel = hiltViewModel()) { fontWeight = FontWeight.Bold, fontSize = 80.sp ) + val stateString: String = when (viewModel.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 -> + (viewModel.getTimer() as FunctionalPomodoroTimer?)?.breaksRemaining?.let { + resources().getQuantityString(R.plurals.state_focus_remaining, it, it) + }.toString() + } + Text( - text = viewModel.getTimer().view, + text = stateString, modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center, fontWeight = FontWeight.Light, fontSize = 30.sp ) } + + } \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5b022c7..39abda6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -64,6 +64,14 @@ Timers Edit Add timer + Focus! + + Focus one more time! + Focus! (%d break remaining) + Focus! (%d breaks remaining) + + Done! + Take a break! Settings 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 90c4fcd..2daa61e 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 @@ -37,7 +37,7 @@ class FunctionalCustomTimerUnitTest : FunctionalTimerUnitTest() { timer.tick() Assert.assertTrue(timer.hasEnded()) Assert.assertEquals( - FunctionalTimer.DONE, + FunctionalTimer.StudyState.DONE, timer.view ) } 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 e0e98af..b83d436 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 @@ -38,7 +38,7 @@ class FunctionalEndlessTimerUnitTest : FunctionalTimerUnitTest() { timer.tick() Assert.assertFalse(timer.hasEnded()) Assert.assertEquals( - FunctionalTimer.FOCUS, + FunctionalTimer.StudyState.FOCUS, timer.view ) } diff --git a/app/src/test/java/be/ugent/sel/studeez/timer_functional/FuntionalPomodoroTimerUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalPomodoroTimerUnitTest.kt similarity index 88% rename from app/src/test/java/be/ugent/sel/studeez/timer_functional/FuntionalPomodoroTimerUnitTest.kt rename to app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalPomodoroTimerUnitTest.kt index d8229a5..a49d2f7 100644 --- a/app/src/test/java/be/ugent/sel/studeez/timer_functional/FuntionalPomodoroTimerUnitTest.kt +++ b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalPomodoroTimerUnitTest.kt @@ -5,7 +5,7 @@ import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer import org.junit.Assert import org.junit.Test -class FuntionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { +class FunctionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { private val breakTime = 10 private val breaks = 2 override val hours = 0 @@ -30,7 +30,7 @@ class FuntionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { pomodoroTimer.breaksRemaining, ) Assert.assertEquals( - FunctionalTimer.FOCUS, + FunctionalTimer.StudyState.FOCUS, pomodoroTimer.view, ) } @@ -53,7 +53,7 @@ class FuntionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { pomodoroTimer.tick() Assert.assertTrue(pomodoroTimer.hasEnded()) Assert.assertEquals( - FunctionalTimer.DONE, + FunctionalTimer.StudyState.DONE, pomodoroTimer.view, ) } @@ -66,7 +66,7 @@ class FuntionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { Assert.assertFalse(pomodoroTimer.hasEnded()) Assert.assertTrue(pomodoroTimer.isInBreak) Assert.assertEquals( - FunctionalTimer.BREAK, + FunctionalTimer.StudyState.BREAK, pomodoroTimer.view ) } @@ -78,7 +78,7 @@ class FuntionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { } Assert.assertTrue(pomodoroTimer.isInBreak) Assert.assertEquals( - FunctionalTimer.BREAK, + FunctionalTimer.StudyState.BREAK, pomodoroTimer.view ) for (i in 0..breakTime) { @@ -91,7 +91,7 @@ class FuntionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { pomodoroTimer.breaksRemaining ) Assert.assertEquals( - FunctionalTimer.FOCUS_REMAINING(breaksRemaining), + FunctionalTimer.StudyState.FOCUS_REMAINING, pomodoroTimer.view ) }