#65 functional timer abstract class and subclasses

This commit is contained in:
lbarraga 2023-04-16 23:37:19 +02:00
parent 89eda17bc2
commit d7f316675c
6 changed files with 97 additions and 6 deletions

View file

@ -1,4 +1,16 @@
package be.ugent.sel.studeez.data.local.models.timer_functional package be.ugent.sel.studeez.data.local.models.timer_functional
class FunctionalCustomTimer { class FunctionalCustomTimer(studyTime: Int): FunctionalTimer(studyTime) {
override fun tick() {
if (time.getTime() == 0) {
view = "Done!"
} else {
time.minOne()
}
}
override fun hasEnded(): Boolean {
return time.getTime() == 0
}
} }

View file

@ -1,4 +1,12 @@
package be.ugent.sel.studeez.data.local.models.timer_functional package be.ugent.sel.studeez.data.local.models.timer_functional
class FunctionalEndlessTimer { class FunctionalEndlessTimer() : FunctionalTimer(0){
override fun hasEnded(): Boolean {
return false
}
override fun tick() {
time.plusOne()
}
} }

View file

@ -1,4 +1,34 @@
package be.ugent.sel.studeez.data.local.models.timer_functional package be.ugent.sel.studeez.data.local.models.timer_functional
class FunctionalPomodoroTimer { class FunctionalPomodoroTimer(
private var studyTime: Int,
private var breakTime: Int, repeats: Int
): FunctionalTimer(studyTime) {
private var breaksRemaining = repeats
private var isInBreak = false
override fun tick() {
if (time.getTime() == 0 && breaksRemaining == 0){
view = "Done!"
return
}
if (time.getTime() == 0) {
if (isInBreak) {
breaksRemaining--
view = "Focus! ($breaksRemaining breaks remaining)"
time.setTime(studyTime)
} else {
view = "Take a break!"
time.setTime(breakTime)
}
isInBreak = !isInBreak
}
time.minOne()
}
override fun hasEnded(): Boolean {
return breaksRemaining == 0 && time.getTime() == 0
}
} }

View file

@ -1,4 +1,19 @@
package be.ugent.sel.studeez.data.local.models.timer_functional package be.ugent.sel.studeez.data.local.models.timer_functional
class FunctionalTimer { abstract class FunctionalTimer(initialValue: Int) {
protected val time: Time = Time(initialValue)
protected var view: String = "Focus"
fun getHoursMinutesSeconds(): HoursMinutesSeconds {
return time.getAsHMS()
}
fun getViewString(): String {
return view
}
abstract fun tick()
abstract fun hasEnded(): Boolean
} }

View file

@ -1,3 +1,3 @@
package be.ugent.sel.studeez.data.local.models.timer_functional package be.ugent.sel.studeez.data.local.models.timer_functional
data class HoursMinutesSeconds() data class HoursMinutesSeconds(val hours: Int, val minutes: Int, val seconds: Int)

View file

@ -1,4 +1,30 @@
package be.ugent.sel.studeez.data.local.models.timer_functional package be.ugent.sel.studeez.data.local.models.timer_functional
class Time { class Time(initialTime: Int) {
private var time = initialTime
fun minOne() {
time--
}
fun plusOne() {
time++
}
fun setTime(newTime: Int) {
time = newTime
}
fun getTime(): Int {
return time
}
fun getAsHMS(): HoursMinutesSeconds {
val hours: Int = time / (60 * 60)
val minutes: Int = (time / (60)) % 60
val seconds: Int = time % 60
return HoursMinutesSeconds(hours, minutes, seconds)
}
} }