From 7fe7416388084fc76d3ea43ca623b9c137be7351 Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 25 Apr 2023 15:20:28 +0200 Subject: [PATCH 01/10] added getview function --- .../timer_functional/FunctionalCustomTimer.kt | 19 +- .../FunctionalEndlessTimer.kt | 9 +- .../FunctionalPomodoroTimer.kt | 20 +- .../timer_functional/FunctionalTimer.kt | 6 +- .../studeez/screens/session/SessionRoute.kt | 51 +++++ .../studeez/screens/session/SessionScreen.kt | 212 ------------------ .../sessionScreens/AbstractSessionScreen.kt | 138 ++++++++++++ .../sessionScreens/BreakSessionScreen.kt | 30 +++ .../sessionScreens/CustomSessionScreen.kt | 21 ++ .../sessionScreens/EndlessSessionScreen.kt | 17 ++ 10 files changed, 293 insertions(+), 230 deletions(-) create mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/session/SessionRoute.kt delete mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/session/SessionScreen.kt create mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/AbstractSessionScreen.kt create mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/BreakSessionScreen.kt create mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/CustomSessionScreen.kt create mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/EndlessSessionScreen.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 ab533dd..15dd00c 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,21 +1,26 @@ package be.ugent.sel.studeez.data.local.models.timer_functional +import be.ugent.sel.studeez.screens.session.sessionScreens.CustomSessionScreen +import be.ugent.sel.studeez.screens.session.sessionScreens.AbstractSessionScreen + class FunctionalCustomTimer(studyTime: Int) : FunctionalTimer(studyTime) { override fun tick() { - if (time.time == 0) { - view = StudyState.DONE - } else { + if (!hasEnded()) { time.minOne() } } override fun hasEnded(): Boolean { - return view == StudyState.DONE - } - - override fun hasCurrentCountdownEnded(): Boolean { return time.time == 0 } + override fun hasCurrentCountdownEnded(): Boolean { + return hasEnded() + } + + override fun getView(): AbstractSessionScreen { + return CustomSessionScreen(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 70fcf7d..eb368f4 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,6 +1,9 @@ package be.ugent.sel.studeez.data.local.models.timer_functional -class FunctionalEndlessTimer() : FunctionalTimer(0) { +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 { return false @@ -13,4 +16,8 @@ class FunctionalEndlessTimer() : FunctionalTimer(0) { override fun tick() { time.plusOne() } + + override fun getView(): AbstractSessionScreen { + return EndlessSessionScreen() + } } \ 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 3e2b97e..931cbe6 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,5 +1,8 @@ package be.ugent.sel.studeez.data.local.models.timer_functional +import be.ugent.sel.studeez.screens.session.sessionScreens.BreakSessionScreen +import be.ugent.sel.studeez.screens.session.sessionScreens.AbstractSessionScreen + class FunctionalPomodoroTimer( private var studyTime: Int, private var breakTime: Int, repeats: Int @@ -9,18 +12,15 @@ class FunctionalPomodoroTimer( var isInBreak = false override fun tick() { - if (time.time == 0 && breaksRemaining == 0) { - view = StudyState.DONE + if (hasEnded()) { return } - if (time.time == 0) { + if (hasCurrentCountdownEnded()) { if (isInBreak) { breaksRemaining-- - view = StudyState.FOCUS_REMAINING time.time = studyTime } else { - view = StudyState.BREAK time.time = breakTime } isInBreak = !isInBreak @@ -29,10 +29,18 @@ class FunctionalPomodoroTimer( } override fun hasEnded(): Boolean { - return breaksRemaining == 0 && time.time == 0 + return !hasBreaksRemaining() && hasCurrentCountdownEnded() + } + + private fun hasBreaksRemaining(): Boolean { + return breaksRemaining > 0 } override fun hasCurrentCountdownEnded(): Boolean { return time.time == 0 } + + override fun getView(): AbstractSessionScreen { + return BreakSessionScreen(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 dae27c6..449b85c 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,8 +1,8 @@ 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) - var view: StudyState = StudyState.FOCUS fun getHoursMinutesSeconds(): HoursMinutesSeconds { return time.getAsHMS() @@ -14,8 +14,6 @@ abstract class FunctionalTimer(initialValue: Int) { abstract fun hasCurrentCountdownEnded(): Boolean - enum class StudyState { - FOCUS, DONE, BREAK, FOCUS_REMAINING - } + abstract fun getView(): AbstractSessionScreen } \ 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 new file mode 100644 index 0000000..bf81215 --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionRoute.kt @@ -0,0 +1,51 @@ +package be.ugent.sel.studeez.screens.session + +import android.media.MediaPlayer +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.FunctionalTimer + +data class SessionActions( + val getTimer: () -> FunctionalTimer, + val getTask: () -> String, + val prepareMediaPlayer: () -> Unit, + val releaseMediaPlayer: () -> Unit, +) + +private fun getSessionActions( + viewModel: SessionViewModel, + mediaplayer: MediaPlayer, +): SessionActions { + return SessionActions( + getTimer = viewModel::getTimer, + getTask = viewModel::getTask, + prepareMediaPlayer = mediaplayer::prepareAsync, + releaseMediaPlayer = mediaplayer::release, + ) +} + +@Composable +fun SessionRoute( + open: (String) -> Unit, + viewModel: SessionViewModel, +) { + val context = LocalContext.current + val uri: Uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION) + val mediaplayer = MediaPlayer() + mediaplayer.setDataSource(context, uri) + mediaplayer.setOnCompletionListener { + mediaplayer.stop() + //if (timerEnd) { +// mediaplayer.release() + //} + } + mediaplayer.setOnPreparedListener { +// mediaplayer.start() + } + viewModel.getTimer().getView().SessionScreen( + open = open, + sessionActions = getSessionActions(viewModel, mediaplayer), + ) +} diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionScreen.kt deleted file mode 100644 index 3db95c1..0000000 --- a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionScreen.kt +++ /dev/null @@ -1,212 +0,0 @@ -package be.ugent.sel.studeez.screens.session - -import android.media.MediaPlayer -import android.media.RingtoneManager -import android.net.Uri -import androidx.compose.foundation.background -import androidx.compose.foundation.border -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.Text -import androidx.compose.material.TextButton -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalContext -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.R -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.StudyState -import be.ugent.sel.studeez.navigation.StudeezDestinations -import be.ugent.sel.studeez.resources -import kotlinx.coroutines.delay -import kotlin.time.Duration.Companion.seconds - -var timerEnd = false - -data class SessionActions( - val getTimer: () -> FunctionalTimer, - val getTask: () -> String, - val prepareMediaPlayer: () -> Unit, - val releaseMediaPlayer: () -> Unit, -) - -fun getSessionActions( - viewModel: SessionViewModel, - mediaplayer: MediaPlayer, -): SessionActions { - return SessionActions( - getTimer = viewModel::getTimer, - getTask = viewModel::getTask, - prepareMediaPlayer = mediaplayer::prepareAsync, - releaseMediaPlayer = mediaplayer::release, - ) -} - -@Composable -fun SessionRoute( - open: (String) -> Unit, - viewModel: SessionViewModel, -) { - val context = LocalContext.current - val uri: Uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION) - val mediaplayer = MediaPlayer() - mediaplayer.setDataSource(context, uri) - mediaplayer.setOnCompletionListener { - mediaplayer.stop() - if (timerEnd) { -// mediaplayer.release() - } - } - mediaplayer.setOnPreparedListener { -// mediaplayer.start() - } - SessionScreen( - open = open, - sessionActions = getSessionActions(viewModel, mediaplayer), - ) -} - -@Composable -fun SessionScreen( - open: (String) -> Unit, - sessionActions: SessionActions, -) { - Column( - modifier = Modifier.padding(10.dp) - ) { - Timer( - sessionActions = sessionActions, - ) - Box( - contentAlignment = Alignment.Center, modifier = Modifier - .fillMaxWidth() - .padding(50.dp) - ) { - TextButton( - onClick = { - sessionActions.releaseMediaPlayer - open(StudeezDestinations.HOME_SCREEN) - // Vanaf hier ook naar report gaan als "end session" knop word ingedrukt - }, - modifier = Modifier - .padding(horizontal = 20.dp) - .border(1.dp, Color.Red, RoundedCornerShape(32.dp)) - .background(Color.Transparent) - ) { - Text( - text = "End session", - color = Color.Red, - fontWeight = FontWeight.Bold, - fontSize = 18.sp, - modifier = Modifier.padding(1.dp) - ) - } - } - } -} - -@Composable -private fun Timer( - sessionActions: SessionActions, -) { - var tikker by remember { mutableStateOf(false) } - LaunchedEffect(tikker) { - delay(1.seconds) - sessionActions.getTimer().tick() - tikker = !tikker - } - - if ( - sessionActions.getTimer().hasCurrentCountdownEnded() && !sessionActions.getTimer() - .hasEnded() - ) { -// sessionActions.prepareMediaPlayer() - } - - if (!timerEnd && sessionActions.getTimer().hasEnded()) { -// sessionActions.prepareMediaPlayer() - timerEnd = - true // Placeholder, vanaf hier moet het report opgestart worden en de sessie afgesloten - } - - val hms = sessionActions.getTimer().getHoursMinutesSeconds() - Column { - Text( - text = "${hms.hours} : ${hms.minutes} : ${hms.seconds}", - modifier = Modifier - .fillMaxWidth() - .padding(50.dp), - textAlign = TextAlign.Center, - fontWeight = FontWeight.Bold, - fontSize = 40.sp, - ) - val stateString: String = when (sessionActions.getTimer().view) { - StudyState.DONE -> resources().getString(R.string.state_done) - StudyState.FOCUS -> resources().getString(R.string.state_focus) - StudyState.BREAK -> resources().getString(R.string.state_take_a_break) - StudyState.FOCUS_REMAINING -> (sessionActions.getTimer() as FunctionalPomodoroTimer?)?.breaksRemaining?.let { - resources().getQuantityString(R.plurals.state_focus_remaining, it, it) - }.toString() - } - - Text( - text = stateString, - modifier = Modifier.fillMaxWidth(), - textAlign = TextAlign.Center, - fontWeight = FontWeight.Light, - fontSize = 30.sp - ) - - Box( - contentAlignment = Alignment.Center, modifier = Modifier - .fillMaxWidth() - .padding(50.dp) - ) { - Box( - contentAlignment = Alignment.Center, - modifier = Modifier - .padding(16.dp) - .background(Color.Blue, RoundedCornerShape(32.dp)) - ) { - Text( - text = sessionActions.getTask(), - color = Color.White, - fontSize = 18.sp, - fontWeight = FontWeight.Bold, - modifier = Modifier.padding(vertical = 4.dp, horizontal = 20.dp) - ) - } - } - } -} - -@Preview -@Composable -fun TimerPreview() { - Timer(sessionActions = SessionActions({ FunctionalEndlessTimer() }, { "Preview" }, {}, {})) -} - -@Preview -@Composable -fun SessionPreview() { - SessionScreen( - open = {}, - sessionActions = SessionActions({ FunctionalEndlessTimer() }, { "Preview" }, {}, {}) - ) -} 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 new file mode 100644 index 0000000..effa1ba --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/AbstractSessionScreen.kt @@ -0,0 +1,138 @@ +package be.ugent.sel.studeez.screens.session.sessionScreens + +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.Text +import androidx.compose.material.TextButton +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +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.unit.dp +import androidx.compose.ui.unit.sp +import be.ugent.sel.studeez.navigation.StudeezDestinations +import be.ugent.sel.studeez.screens.session.SessionActions +import kotlinx.coroutines.delay +import kotlin.time.Duration.Companion.seconds + +abstract class SessionScreen { + + var timerEnd = false + + @Composable + fun SessionScreen( + open: (String) -> Unit, + sessionActions: SessionActions, + ) { + Column( + modifier = Modifier.padding(10.dp) + ) { + Timer( + sessionActions = sessionActions, + ) + Box( + contentAlignment = Alignment.Center, modifier = Modifier + .fillMaxWidth() + .padding(50.dp) + ) { + TextButton( + onClick = { + sessionActions.releaseMediaPlayer + open(StudeezDestinations.HOME_SCREEN) + // Vanaf hier ook naar report gaan als "end session" knop word ingedrukt + }, + modifier = Modifier + .padding(horizontal = 20.dp) + .border(1.dp, Color.Red, RoundedCornerShape(32.dp)) + .background(Color.Transparent) + ) { + Text( + text = "End session", + color = Color.Red, + fontWeight = FontWeight.Bold, + fontSize = 18.sp, + modifier = Modifier.padding(1.dp) + ) + } + } + } + } + + @Composable + private fun Timer( + sessionActions: SessionActions, + ) { + var tikker by remember { mutableStateOf(false) } + LaunchedEffect(tikker) { + delay(1.seconds) + sessionActions.getTimer().tick() + tikker = !tikker + } + + if ( + sessionActions.getTimer().hasCurrentCountdownEnded() && !sessionActions.getTimer() + .hasEnded() + ) { +// sessionActions.prepareMediaPlayer() + } + + if (!timerEnd && sessionActions.getTimer().hasEnded()) { +// sessionActions.prepareMediaPlayer() + timerEnd = + true // Placeholder, vanaf hier moet het report opgestart worden en de sessie afgesloten + } + + val hms = sessionActions.getTimer().getHoursMinutesSeconds() + Column { + Text( + text = "${hms.hours} : ${hms.minutes} : ${hms.seconds}", + modifier = Modifier + .fillMaxWidth() + .padding(50.dp), + textAlign = TextAlign.Center, + fontWeight = FontWeight.Bold, + fontSize = 40.sp, + ) + + Text( + text = motivationString(), + modifier = Modifier.fillMaxWidth(), + textAlign = TextAlign.Center, + fontWeight = FontWeight.Light, + fontSize = 30.sp + ) + + Box( + contentAlignment = Alignment.Center, modifier = Modifier + .fillMaxWidth() + .padding(50.dp) + ) { + Box( + contentAlignment = Alignment.Center, + modifier = Modifier + .padding(16.dp) + .background(Color.Blue, RoundedCornerShape(32.dp)) + ) { + Text( + text = sessionActions.getTask(), + color = Color.White, + fontSize = 18.sp, + fontWeight = FontWeight.Bold, + modifier = Modifier.padding(vertical = 4.dp, horizontal = 20.dp) + ) + } + } + } + } + + @Composable + abstract fun motivationString(): String + +} \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/BreakSessionScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/BreakSessionScreen.kt new file mode 100644 index 0000000..b2fd53f --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/BreakSessionScreen.kt @@ -0,0 +1,30 @@ +package be.ugent.sel.studeez.screens.session.SessionScreens + +import androidx.compose.runtime.Composable +import be.ugent.sel.studeez.R +import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalPomodoroTimer +import be.ugent.sel.studeez.resources +import be.ugent.sel.studeez.R.string as AppText + +class BreakSessionScreen( + private val funPomoDoroTimer: FunctionalPomodoroTimer +): SessionScreen(funPomoDoroTimer) { + + @Composable + override fun motivationString(): String { + if (funPomoDoroTimer.isInBreak) { + return resources().getString(AppText.state_take_a_break) + } + + if (funPomoDoroTimer.hasEnded()) { + return resources().getString(AppText.state_done) + } + + return resources().getQuantityString( + R.plurals.state_focus_remaining, + funPomoDoroTimer.breaksRemaining, + funPomoDoroTimer.breaksRemaining + ) + } + +} \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/CustomSessionScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/CustomSessionScreen.kt new file mode 100644 index 0000000..92c2b5e --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/CustomSessionScreen.kt @@ -0,0 +1,21 @@ +package be.ugent.sel.studeez.screens.session.SessionScreens + +import androidx.compose.runtime.Composable +import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalCustomTimer +import be.ugent.sel.studeez.resources +import be.ugent.sel.studeez.R.string as AppText + + +class CustomSessionScreen( + private val functionalTimer: FunctionalCustomTimer +): SessionScreen(functionalTimer) { + + @Composable + override fun motivationString(): String { + if (functionalTimer.hasEnded()) { + return resources().getString(AppText.state_done) + } + return resources().getString(AppText.state_focus) + } + +} \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/EndlessSessionScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/EndlessSessionScreen.kt new file mode 100644 index 0000000..688243b --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/EndlessSessionScreen.kt @@ -0,0 +1,17 @@ +package be.ugent.sel.studeez.screens.session.SessionScreens + +import androidx.compose.runtime.Composable +import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalEndlessTimer +import be.ugent.sel.studeez.resources +import be.ugent.sel.studeez.R.string as AppText + + +class EndlessSessionScreen( + functionalTimer: FunctionalEndlessTimer + ): SessionScreen(functionalTimer) { + + @Composable + override fun motivationString(): String { + return resources().getString(AppText.state_focus) + } +} \ No newline at end of file From ae9a36373145611d23b1931b47bffdafaa54fe67 Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 25 Apr 2023 15:22:01 +0200 Subject: [PATCH 02/10] abstract session screen --- .../screens/session/sessionScreens/AbstractSessionScreen.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 effa1ba..9bb9d73 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 @@ -22,7 +22,7 @@ import be.ugent.sel.studeez.screens.session.SessionActions import kotlinx.coroutines.delay import kotlin.time.Duration.Companion.seconds -abstract class SessionScreen { +abstract class AbstractSessionScreen { var timerEnd = false From d318016f95762c2ccd14820f673e6aa9979e28f9 Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 25 Apr 2023 15:22:20 +0200 Subject: [PATCH 03/10] session screen implementations --- .../screens/session/sessionScreens/BreakSessionScreen.kt | 4 ++-- .../screens/session/sessionScreens/CustomSessionScreen.kt | 4 ++-- .../screens/session/sessionScreens/EndlessSessionScreen.kt | 7 ++----- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/BreakSessionScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/BreakSessionScreen.kt index b2fd53f..edc8475 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/BreakSessionScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/BreakSessionScreen.kt @@ -1,4 +1,4 @@ -package be.ugent.sel.studeez.screens.session.SessionScreens +package be.ugent.sel.studeez.screens.session.sessionScreens import androidx.compose.runtime.Composable import be.ugent.sel.studeez.R @@ -8,7 +8,7 @@ import be.ugent.sel.studeez.R.string as AppText class BreakSessionScreen( private val funPomoDoroTimer: FunctionalPomodoroTimer -): SessionScreen(funPomoDoroTimer) { +): AbstractSessionScreen() { @Composable override fun motivationString(): String { diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/CustomSessionScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/CustomSessionScreen.kt index 92c2b5e..36ee492 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/CustomSessionScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/CustomSessionScreen.kt @@ -1,4 +1,4 @@ -package be.ugent.sel.studeez.screens.session.SessionScreens +package be.ugent.sel.studeez.screens.session.sessionScreens import androidx.compose.runtime.Composable import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalCustomTimer @@ -8,7 +8,7 @@ import be.ugent.sel.studeez.R.string as AppText class CustomSessionScreen( private val functionalTimer: FunctionalCustomTimer -): SessionScreen(functionalTimer) { +): AbstractSessionScreen() { @Composable override fun motivationString(): String { diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/EndlessSessionScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/EndlessSessionScreen.kt index 688243b..fc46c9d 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/EndlessSessionScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/session/sessionScreens/EndlessSessionScreen.kt @@ -1,14 +1,11 @@ -package be.ugent.sel.studeez.screens.session.SessionScreens +package be.ugent.sel.studeez.screens.session.sessionScreens import androidx.compose.runtime.Composable -import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalEndlessTimer import be.ugent.sel.studeez.resources import be.ugent.sel.studeez.R.string as AppText -class EndlessSessionScreen( - functionalTimer: FunctionalEndlessTimer - ): SessionScreen(functionalTimer) { +class EndlessSessionScreen : AbstractSessionScreen() { @Composable override fun motivationString(): String { From 4996d387ad3170ed9f23f5e5fe3c5690be7cf51b Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 25 Apr 2023 15:22:42 +0200 Subject: [PATCH 04/10] route is now a single file --- .../java/be/ugent/sel/studeez/screens/session/SessionRoute.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 bf81215..0d930dc 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 @@ -6,6 +6,7 @@ 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.FunctionalTimer +import be.ugent.sel.studeez.screens.session.sessionScreens.AbstractSessionScreen data class SessionActions( val getTimer: () -> FunctionalTimer, @@ -31,6 +32,7 @@ fun SessionRoute( open: (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() @@ -44,7 +46,7 @@ fun SessionRoute( mediaplayer.setOnPreparedListener { // mediaplayer.start() } - viewModel.getTimer().getView().SessionScreen( + sessionScreen.SessionScreen( open = open, sessionActions = getSessionActions(viewModel, mediaplayer), ) From c3a9826001aed884c23df606c013fd15317daceb Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Wed, 26 Apr 2023 11:05:08 +0200 Subject: [PATCH 05/10] remove getView from functional timer and add when in sessionRoute --- .../timer_functional/FunctionalCustomTimer.kt | 4 ---- .../FunctionalEndlessTimer.kt | 4 ---- .../FunctionalPomodoroTimer.kt | 4 ---- .../timer_functional/FunctionalTimer.kt | 3 --- .../studeez/screens/session/SessionRoute.kt | 20 +++++++++++++++---- .../sessionScreens/AbstractSessionScreen.kt | 2 +- 6 files changed, 17 insertions(+), 20 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 15dd00c..822d3af 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,8 +19,4 @@ class FunctionalCustomTimer(studyTime: Int) : FunctionalTimer(studyTime) { return hasEnded() } - override fun getView(): AbstractSessionScreen { - return CustomSessionScreen(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 eb368f4..d9d3613 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 @@ -16,8 +16,4 @@ class FunctionalEndlessTimer : FunctionalTimer(0) { override fun tick() { time.plusOne() } - - override fun getView(): AbstractSessionScreen { - return EndlessSessionScreen() - } } \ 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 931cbe6..f35c0f7 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,8 +39,4 @@ class FunctionalPomodoroTimer( override fun hasCurrentCountdownEnded(): Boolean { return time.time == 0 } - - override fun getView(): AbstractSessionScreen { - return BreakSessionScreen(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 449b85c..71eb38a 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 @@ -13,7 +13,4 @@ abstract class FunctionalTimer(initialValue: Int) { abstract fun hasEnded(): Boolean abstract fun hasCurrentCountdownEnded(): Boolean - - abstract fun getView(): AbstractSessionScreen - } \ 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 0d930dc..2511fde 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,8 +5,13 @@ 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.AbstractSessionScreen +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 data class SessionActions( val getTimer: () -> FunctionalTimer, @@ -32,7 +37,6 @@ fun SessionRoute( open: (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() @@ -46,8 +50,16 @@ fun SessionRoute( mediaplayer.setOnPreparedListener { // mediaplayer.start() } - sessionScreen.SessionScreen( + + 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, mediaplayer), + sessionActions = getSessionActions(viewModel, 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 9bb9d73..3db5b36 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 @@ -27,7 +27,7 @@ abstract class AbstractSessionScreen { var timerEnd = false @Composable - fun SessionScreen( + operator fun invoke( open: (String) -> Unit, sessionActions: SessionActions, ) { From 351547f1110b028250f6f6346efa1d8c6035c057 Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Wed, 26 Apr 2023 11:35:26 +0200 Subject: [PATCH 06/10] 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 From 9a18bcc41467b29eb597c2e584925ff78dfa0afc Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Wed, 26 Apr 2023 14:34:44 +0200 Subject: [PATCH 07/10] preview + visitor refactor --- .../sessionScreens/AbstractSessionScreen.kt | 19 ++++++++++++++++--- .../sessionScreens/GetSessionScreen.kt | 15 ++++++--------- 2 files changed, 22 insertions(+), 12 deletions(-) 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 3db5b36..98a5871 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 @@ -66,7 +68,7 @@ abstract class AbstractSessionScreen { } @Composable - private fun Timer( + fun Timer( sessionActions: SessionActions, ) { var tikker by remember { mutableStateOf(false) } @@ -85,8 +87,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() @@ -135,4 +137,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 index e5ee42c..e378661 100644 --- 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 @@ -6,15 +6,12 @@ import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalPomodor 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 visitFunctionalCustomTimer(functionalCustomTimer: FunctionalCustomTimer): AbstractSessionScreen = + CustomSessionScreen(functionalCustomTimer) - override fun visitFunctionalEndlessTimer(functionalEndlessTimer: FunctionalEndlessTimer): AbstractSessionScreen { - return EndlessSessionScreen() - } + override fun visitFunctionalEndlessTimer(functionalEndlessTimer: FunctionalEndlessTimer): AbstractSessionScreen = + EndlessSessionScreen() - override fun visitFunctionalBreakTimer(functionalPomodoroTimer: FunctionalPomodoroTimer): AbstractSessionScreen { - return BreakSessionScreen(functionalPomodoroTimer) - } + override fun visitFunctionalBreakTimer(functionalPomodoroTimer: FunctionalPomodoroTimer): AbstractSessionScreen = + BreakSessionScreen(functionalPomodoroTimer) } \ No newline at end of file From 66a566b7794741361543e0e7373f007bd8b4b7ad Mon Sep 17 00:00:00 2001 From: lbarraga Date: Wed, 26 Apr 2023 19:07:26 +0200 Subject: [PATCH 08/10] remove state from tests --- .../FunctionalCustomTimerUnitTest.kt | 5 +---- .../FunctionalEndlessTimerUnitTest.kt | 4 ---- .../FunctionalPomodoroTimerUnitTest.kt | 20 ------------------- 3 files changed, 1 insertion(+), 28 deletions(-) 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 From 71a6bce61c6f045bb913f6fb1084178601279251 Mon Sep 17 00:00:00 2001 From: lbarraga Date: Wed, 26 Apr 2023 19:26:46 +0200 Subject: [PATCH 09/10] preview error fix --- .../screens/session/sessionScreens/AbstractSessionScreen.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 98a5871..7844587 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 @@ -147,5 +147,5 @@ fun TimerPreview() { override fun motivationString(): String = "Test" } - sessionScreen.Timer(sessionActions = SessionActions({ FunctionalEndlessTimer() }, { "Preview" }, {}, {})) + sessionScreen.Timer(sessionActions = SessionActions({ FunctionalEndlessTimer() }, { "Preview" }, {}, {}, {})) } \ No newline at end of file From a2648509ac06b64fbf065fb146ad69e55fc1b73b Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Fri, 28 Apr 2023 11:43:53 +0200 Subject: [PATCH 10/10] remove bracket --- .../screens/session/sessionScreens/AbstractSessionScreen.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 7844587..98a5871 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 @@ -147,5 +147,5 @@ fun TimerPreview() { override fun motivationString(): String = "Test" } - sessionScreen.Timer(sessionActions = SessionActions({ FunctionalEndlessTimer() }, { "Preview" }, {}, {}, {})) + sessionScreen.Timer(sessionActions = SessionActions({ FunctionalEndlessTimer() }, { "Preview" }, {}, {})) } \ No newline at end of file