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 6c035de..1a2e099 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 @@ -21,8 +21,8 @@ class FunctionalCustomTimer(studyTime: Int) : FunctionalTimer(studyTime) { return hasEnded() } - override fun getView(): AbstractSessionScreen { - return CustomSessionScreen(this) + 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 24007e7..41be874 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 { @@ -18,7 +15,7 @@ class FunctionalEndlessTimer : FunctionalTimer(0) { totalStudyTime++ } - override fun getView(): AbstractSessionScreen { - return EndlessSessionScreen() + 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 152cfa4..40660e2 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 @@ -44,7 +44,7 @@ class FunctionalPomodoroTimer( return time.time == 0 } - override fun getView(): AbstractSessionScreen { - return BreakSessionScreen(this) + 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 41733bd..232b189 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 @@ -18,7 +18,6 @@ abstract class FunctionalTimer(initialValue: Int) { abstract fun hasCurrentCountdownEnded(): Boolean - abstract fun getView(): AbstractSessionScreen fun getSessionReport(): SessionReport { return SessionReport( id = "", @@ -27,4 +26,5 @@ abstract class FunctionalTimer(initialValue: Int) { ) } + 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 10fca3f..a503067 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 @@ -7,6 +7,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer import be.ugent.sel.studeez.screens.session.sessionScreens.AbstractSessionScreen +import be.ugent.sel.studeez.screens.session.sessionScreens.GetSessionScreen data class SessionActions( val getTimer: () -> FunctionalTimer, @@ -36,7 +37,6 @@ fun SessionRoute( openAndPopUp: (String, String) -> Unit, viewModel: SessionViewModel, ) { - val sessionScreen: AbstractSessionScreen = viewModel.getTimer().getView() val context = LocalContext.current val uri: Uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION) val mediaplayer = MediaPlayer() @@ -50,8 +50,18 @@ fun SessionRoute( mediaplayer.setOnPreparedListener { // mediaplayer.start() } - sessionScreen.SessionScreen( + + 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, - sessionActions = getSessionActions(viewModel, openAndPopUp, mediaplayer), + sessionActions = getSessionActions(viewModel, openAndPopUp, mediaplayer) ) } diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/AbstractSessionScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/AbstractSessionScreen.kt index 8042450..273e5dc 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/AbstractSessionScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/AbstractSessionScreen.kt @@ -15,8 +15,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalEndlessTimer import be.ugent.sel.studeez.navigation.StudeezDestinations import be.ugent.sel.studeez.screens.session.SessionActions import kotlinx.coroutines.delay @@ -27,7 +29,7 @@ abstract class AbstractSessionScreen { var timerEnd = false @Composable - fun SessionScreen( + operator fun invoke( open: (String) -> Unit, sessionActions: SessionActions, ) { @@ -65,7 +67,7 @@ abstract class AbstractSessionScreen { } @Composable - private fun Timer( + fun Timer( sessionActions: SessionActions, ) { var tikker by remember { mutableStateOf(false) } @@ -84,8 +86,8 @@ abstract class AbstractSessionScreen { if (!timerEnd && sessionActions.getTimer().hasEnded()) { // sessionActions.prepareMediaPlayer() - timerEnd = - true // Placeholder, vanaf hier moet het report opgestart worden en de sessie afgesloten + timerEnd = + true // Placeholder, vanaf hier moet het report opgestart worden en de sessie afgesloten } val hms = sessionActions.getTimer().getHoursMinutesSeconds() @@ -134,4 +136,15 @@ abstract class AbstractSessionScreen { @Composable abstract fun motivationString(): String +} + +@Preview +@Composable +fun TimerPreview() { + val sessionScreen = object : AbstractSessionScreen() { + @Composable + override fun motivationString(): String = "Test" + + } + sessionScreen.Timer(sessionActions = SessionActions({ FunctionalEndlessTimer() }, { "Preview" }, {}, {})) } \ No newline at end of file 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..e378661 --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/GetSessionScreen.kt @@ -0,0 +1,17 @@ +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 = + CustomSessionScreen(functionalCustomTimer) + + override fun visitFunctionalEndlessTimer(functionalEndlessTimer: FunctionalEndlessTimer): AbstractSessionScreen = + EndlessSessionScreen() + + override fun visitFunctionalBreakTimer(functionalPomodoroTimer: FunctionalPomodoroTimer): AbstractSessionScreen = + BreakSessionScreen(functionalPomodoroTimer) +} \ No newline at end of file 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 2daa61e..6e51b4e 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 @@ -36,9 +36,6 @@ class FunctionalCustomTimerUnitTest : FunctionalTimerUnitTest() { timer = FunctionalCustomTimer(0) timer.tick() Assert.assertTrue(timer.hasEnded()) - Assert.assertEquals( - FunctionalTimer.StudyState.DONE, - timer.view - ) + Assert.assertTrue(timer.hasEnded()) } } \ No newline at end of file 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 b83d436..b99c901 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 @@ -37,10 +37,6 @@ class FunctionalEndlessTimerUnitTest : FunctionalTimerUnitTest() { for (i in 1..n) { timer.tick() Assert.assertFalse(timer.hasEnded()) - Assert.assertEquals( - FunctionalTimer.StudyState.FOCUS, - timer.view - ) } } } \ No newline at end of file diff --git a/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalPomodoroTimerUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalPomodoroTimerUnitTest.kt index a49d2f7..3ff1499 100644 --- a/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalPomodoroTimerUnitTest.kt +++ b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalPomodoroTimerUnitTest.kt @@ -29,10 +29,6 @@ class FunctionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { breaks, pomodoroTimer.breaksRemaining, ) - Assert.assertEquals( - FunctionalTimer.StudyState.FOCUS, - pomodoroTimer.view, - ) } @Test @@ -52,10 +48,6 @@ class FunctionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { pomodoroTimer = FunctionalPomodoroTimer(0, 0, 0) pomodoroTimer.tick() Assert.assertTrue(pomodoroTimer.hasEnded()) - Assert.assertEquals( - FunctionalTimer.StudyState.DONE, - pomodoroTimer.view, - ) } @Test @@ -65,10 +57,6 @@ class FunctionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { } Assert.assertFalse(pomodoroTimer.hasEnded()) Assert.assertTrue(pomodoroTimer.isInBreak) - Assert.assertEquals( - FunctionalTimer.StudyState.BREAK, - pomodoroTimer.view - ) } @Test @@ -77,10 +65,6 @@ class FunctionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { pomodoroTimer.tick() } Assert.assertTrue(pomodoroTimer.isInBreak) - Assert.assertEquals( - FunctionalTimer.StudyState.BREAK, - pomodoroTimer.view - ) for (i in 0..breakTime) { pomodoroTimer.tick() } @@ -90,9 +74,5 @@ class FunctionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { breaksRemaining, pomodoroTimer.breaksRemaining ) - Assert.assertEquals( - FunctionalTimer.StudyState.FOCUS_REMAINING, - pomodoroTimer.view - ) } } \ No newline at end of file