From d7f316675cca8a4ced6a170b456a0de6a4932ddf Mon Sep 17 00:00:00 2001 From: lbarraga Date: Sun, 16 Apr 2023 23:37:19 +0200 Subject: [PATCH] #65 functional timer abstract class and subclasses --- .../timer_functional/FunctionalCustomTimer.kt | 14 +++++++- .../FunctionalEndlessTimer.kt | 10 +++++- .../FunctionalPomodoroTimer.kt | 32 ++++++++++++++++++- .../timer_functional/FunctionalTimer.kt | 17 +++++++++- .../timer_functional/HoursMinutesSeconds.kt | 2 +- .../local/models/timer_functional/Time.kt | 28 +++++++++++++++- 6 files changed, 97 insertions(+), 6 deletions(-) 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 abbb2a2..7cae544 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 @@ -1,4 +1,16 @@ 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 + } } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/FunctionalEndlessTimer.kt b/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/FunctionalEndlessTimer.kt index c602f5c..45eecda 100644 --- a/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/FunctionalEndlessTimer.kt +++ b/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/FunctionalEndlessTimer.kt @@ -1,4 +1,12 @@ 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() + } } \ No newline at end of file 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 f9698be..ef0bf03 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 @@ -1,4 +1,34 @@ 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 + } } \ No newline at end of file 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 ba1989f..e6965ab 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 @@ -1,4 +1,19 @@ 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 + } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/HoursMinutesSeconds.kt b/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/HoursMinutesSeconds.kt index f651a68..0712424 100644 --- a/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/HoursMinutesSeconds.kt +++ b/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/HoursMinutesSeconds.kt @@ -1,3 +1,3 @@ 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) \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/Time.kt b/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/Time.kt index 24e1245..250996e 100644 --- a/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/Time.kt +++ b/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/Time.kt @@ -1,4 +1,30 @@ 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) + } + } \ No newline at end of file