From 351547f1110b028250f6f6346efa1d8c6035c057 Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Wed, 26 Apr 2023 11:35:26 +0200 Subject: [PATCH] visitor --- .../timer_functional/FunctionalCustomTimer.kt | 4 ++++ .../FunctionalEndlessTimer.kt | 7 +++--- .../FunctionalPomodoroTimer.kt | 4 ++++ .../timer_functional/FunctionalTimer.kt | 3 ++- .../FunctionalTimerVisitor.kt | 11 ++++++++++ .../studeez/screens/session/SessionRoute.kt | 22 +++++++++---------- .../sessionScreens/GetSessionScreen.kt | 20 +++++++++++++++++ 7 files changed, 55 insertions(+), 16 deletions(-) create mode 100644 app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/FunctionalTimerVisitor.kt create mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/GetSessionScreen.kt 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 822d3af..412432b 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 @@ -19,4 +19,8 @@ class FunctionalCustomTimer(studyTime: Int) : FunctionalTimer(studyTime) { return hasEnded() } + override fun accept(visitor: FunctionalTimerVisitor): T { + return visitor.visitFunctionalCustomTimer(this) + } + } \ 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 d9d3613..67ed4e1 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,8 +1,5 @@ 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) { override fun hasEnded(): Boolean { @@ -16,4 +13,8 @@ class FunctionalEndlessTimer : FunctionalTimer(0) { override fun tick() { time.plusOne() } + + override fun accept(visitor: FunctionalTimerVisitor): T { + return visitor.visitFunctionalEndlessTimer(this) + } } \ 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 f35c0f7..07f9a39 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 @@ -39,4 +39,8 @@ class FunctionalPomodoroTimer( override fun hasCurrentCountdownEnded(): Boolean { return time.time == 0 } + + override fun accept(visitor: FunctionalTimerVisitor): T { + return visitor.visitFunctionalBreakTimer(this) + } } \ 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 71eb38a..2d904d8 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,6 +1,5 @@ package be.ugent.sel.studeez.data.local.models.timer_functional -import be.ugent.sel.studeez.screens.session.sessionScreens.AbstractSessionScreen abstract class FunctionalTimer(initialValue: Int) { val time: Time = Time(initialValue) @@ -13,4 +12,6 @@ abstract class FunctionalTimer(initialValue: Int) { abstract fun hasEnded(): Boolean abstract fun hasCurrentCountdownEnded(): Boolean + + abstract fun accept(visitor: FunctionalTimerVisitor): T } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/FunctionalTimerVisitor.kt b/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/FunctionalTimerVisitor.kt new file mode 100644 index 0000000..3acc805 --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_functional/FunctionalTimerVisitor.kt @@ -0,0 +1,11 @@ +package be.ugent.sel.studeez.data.local.models.timer_functional + +interface FunctionalTimerVisitor { + + fun visitFunctionalCustomTimer(functionalCustomTimer: FunctionalCustomTimer): T + + fun visitFunctionalEndlessTimer(functionalEndlessTimer: FunctionalEndlessTimer): T + + fun visitFunctionalBreakTimer(functionalPomodoroTimer: FunctionalPomodoroTimer): T + +} \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionRoute.kt b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionRoute.kt index 2511fde..57dd7af 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionRoute.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionRoute.kt @@ -5,13 +5,9 @@ import android.media.RingtoneManager import android.net.Uri import androidx.compose.runtime.Composable 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.screens.session.sessionScreens.BreakSessionScreen -import be.ugent.sel.studeez.screens.session.sessionScreens.CustomSessionScreen -import be.ugent.sel.studeez.screens.session.sessionScreens.EndlessSessionScreen +import be.ugent.sel.studeez.screens.session.sessionScreens.AbstractSessionScreen +import be.ugent.sel.studeez.screens.session.sessionScreens.GetSessionScreen data class SessionActions( val getTimer: () -> FunctionalTimer, @@ -51,12 +47,14 @@ fun SessionRoute( // mediaplayer.start() } - val sessionScreen = when (val timer = viewModel.getTimer()) { - is FunctionalCustomTimer -> CustomSessionScreen(timer) - is FunctionalPomodoroTimer -> BreakSessionScreen(timer) - is FunctionalEndlessTimer -> EndlessSessionScreen() - else -> throw java.lang.IllegalArgumentException("Unknown Timer") - } + val sessionScreen: AbstractSessionScreen = viewModel.getTimer().accept(GetSessionScreen()) + + //val sessionScreen = when (val timer = viewModel.getTimer()) { + // is FunctionalCustomTimer -> CustomSessionScreen(timer) + // is FunctionalPomodoroTimer -> BreakSessionScreen(timer) + // is FunctionalEndlessTimer -> EndlessSessionScreen() + // else -> throw java.lang.IllegalArgumentException("Unknown Timer") + //} sessionScreen( open = open, diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/GetSessionScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/GetSessionScreen.kt new file mode 100644 index 0000000..e5ee42c --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/GetSessionScreen.kt @@ -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 { + 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) + } +} \ No newline at end of file