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
)
}