This commit is contained in:
Lukas Barragan Torres 2023-04-26 11:35:26 +02:00
parent c3a9826001
commit 351547f111
7 changed files with 55 additions and 16 deletions

View file

@ -19,4 +19,8 @@ class FunctionalCustomTimer(studyTime: Int) : FunctionalTimer(studyTime) {
return hasEnded() return hasEnded()
} }
override fun <T> accept(visitor: FunctionalTimerVisitor<T>): T {
return visitor.visitFunctionalCustomTimer(this)
}
} }

View file

@ -1,8 +1,5 @@
package be.ugent.sel.studeez.data.local.models.timer_functional package be.ugent.sel.studeez.data.local.models.timer_functional
import be.ugent.sel.studeez.screens.session.sessionScreens.EndlessSessionScreen
import be.ugent.sel.studeez.screens.session.sessionScreens.AbstractSessionScreen
class FunctionalEndlessTimer : FunctionalTimer(0) { class FunctionalEndlessTimer : FunctionalTimer(0) {
override fun hasEnded(): Boolean { override fun hasEnded(): Boolean {
@ -16,4 +13,8 @@ class FunctionalEndlessTimer : FunctionalTimer(0) {
override fun tick() { override fun tick() {
time.plusOne() time.plusOne()
} }
override fun <T> accept(visitor: FunctionalTimerVisitor<T>): T {
return visitor.visitFunctionalEndlessTimer(this)
}
} }

View file

@ -39,4 +39,8 @@ class FunctionalPomodoroTimer(
override fun hasCurrentCountdownEnded(): Boolean { override fun hasCurrentCountdownEnded(): Boolean {
return time.time == 0 return time.time == 0
} }
override fun <T> accept(visitor: FunctionalTimerVisitor<T>): T {
return visitor.visitFunctionalBreakTimer(this)
}
} }

View file

@ -1,6 +1,5 @@
package be.ugent.sel.studeez.data.local.models.timer_functional package be.ugent.sel.studeez.data.local.models.timer_functional
import be.ugent.sel.studeez.screens.session.sessionScreens.AbstractSessionScreen
abstract class FunctionalTimer(initialValue: Int) { abstract class FunctionalTimer(initialValue: Int) {
val time: Time = Time(initialValue) val time: Time = Time(initialValue)
@ -13,4 +12,6 @@ abstract class FunctionalTimer(initialValue: Int) {
abstract fun hasEnded(): Boolean abstract fun hasEnded(): Boolean
abstract fun hasCurrentCountdownEnded(): Boolean abstract fun hasCurrentCountdownEnded(): Boolean
abstract fun <T> accept(visitor: FunctionalTimerVisitor<T>): T
} }

View file

@ -0,0 +1,11 @@
package be.ugent.sel.studeez.data.local.models.timer_functional
interface FunctionalTimerVisitor<T> {
fun visitFunctionalCustomTimer(functionalCustomTimer: FunctionalCustomTimer): T
fun visitFunctionalEndlessTimer(functionalEndlessTimer: FunctionalEndlessTimer): T
fun visitFunctionalBreakTimer(functionalPomodoroTimer: FunctionalPomodoroTimer): T
}

View file

@ -5,13 +5,9 @@ import android.media.RingtoneManager
import android.net.Uri import android.net.Uri
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
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
import be.ugent.sel.studeez.screens.session.sessionScreens.BreakSessionScreen import be.ugent.sel.studeez.screens.session.sessionScreens.AbstractSessionScreen
import be.ugent.sel.studeez.screens.session.sessionScreens.CustomSessionScreen import be.ugent.sel.studeez.screens.session.sessionScreens.GetSessionScreen
import be.ugent.sel.studeez.screens.session.sessionScreens.EndlessSessionScreen
data class SessionActions( data class SessionActions(
val getTimer: () -> FunctionalTimer, val getTimer: () -> FunctionalTimer,
@ -51,12 +47,14 @@ fun SessionRoute(
// mediaplayer.start() // mediaplayer.start()
} }
val sessionScreen = when (val timer = viewModel.getTimer()) { val sessionScreen: AbstractSessionScreen = viewModel.getTimer().accept(GetSessionScreen())
is FunctionalCustomTimer -> CustomSessionScreen(timer)
is FunctionalPomodoroTimer -> BreakSessionScreen(timer) //val sessionScreen = when (val timer = viewModel.getTimer()) {
is FunctionalEndlessTimer -> EndlessSessionScreen() // is FunctionalCustomTimer -> CustomSessionScreen(timer)
else -> throw java.lang.IllegalArgumentException("Unknown Timer") // is FunctionalPomodoroTimer -> BreakSessionScreen(timer)
} // is FunctionalEndlessTimer -> EndlessSessionScreen()
// else -> throw java.lang.IllegalArgumentException("Unknown Timer")
//}
sessionScreen( sessionScreen(
open = open, open = open,

View file

@ -0,0 +1,20 @@
package be.ugent.sel.studeez.screens.session.sessionScreens
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.FunctionalTimerVisitor
class GetSessionScreen : FunctionalTimerVisitor<AbstractSessionScreen> {
override fun visitFunctionalCustomTimer(functionalCustomTimer: FunctionalCustomTimer): AbstractSessionScreen {
return CustomSessionScreen(functionalCustomTimer)
}
override fun visitFunctionalEndlessTimer(functionalEndlessTimer: FunctionalEndlessTimer): AbstractSessionScreen {
return EndlessSessionScreen()
}
override fun visitFunctionalBreakTimer(functionalPomodoroTimer: FunctionalPomodoroTimer): AbstractSessionScreen {
return BreakSessionScreen(functionalPomodoroTimer)
}
}