From b7c6e887e3e0e227264988e355d00ba5d8144242 Mon Sep 17 00:00:00 2001 From: reyniersbram <55666730+reyniersbram@users.noreply.github.com> Date: Mon, 17 Apr 2023 17:17:24 +0200 Subject: [PATCH 01/23] #57 first tests --- .../be/ugent/sel/studeez/ExampleUnitTest.kt | 17 -------- .../java/be/ugent/sel/studeez/TimeUnitTest.kt | 39 +++++++++++++++++++ 2 files changed, 39 insertions(+), 17 deletions(-) delete mode 100644 app/src/test/java/be/ugent/sel/studeez/ExampleUnitTest.kt create mode 100644 app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt diff --git a/app/src/test/java/be/ugent/sel/studeez/ExampleUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/ExampleUnitTest.kt deleted file mode 100644 index 4ff9e1c..0000000 --- a/app/src/test/java/be/ugent/sel/studeez/ExampleUnitTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package be.ugent.sel.studeez - -import org.junit.Test - -import org.junit.Assert.* - -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -class ExampleUnitTest { - @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) - } -} \ No newline at end of file diff --git a/app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt new file mode 100644 index 0000000..f66c7b4 --- /dev/null +++ b/app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt @@ -0,0 +1,39 @@ +package be.ugent.sel.studeez + +import be.ugent.sel.studeez.data.local.models.timer_functional.HoursMinutesSeconds +import be.ugent.sel.studeez.data.local.models.timer_functional.Time +import org.junit.Assert +import org.junit.Before +import org.junit.Test + +class TimeUnitTest { + private val hours = 4 + private val minutes = 20 + private val seconds = 39 + private val time: Time = Time(seconds + minutes * 60 + hours * 60 * 60) + + @Before + fun setup() { + + } + + @Test + fun formatTime() { + Assert.assertEquals( + time.getAsHMS(), + HoursMinutesSeconds( + hours.toString().padStart(2, '0'), + minutes.toString().padStart(2, '0'), + seconds.toString().padStart(2, '0'), + ), + ) + } + + @Test + fun getTime() { + Assert.assertEquals( + time.getTime(), + seconds + minutes * 60 + hours * 60 * 60 + ) + } +} \ No newline at end of file From 1bb359374cddc24205dcaf037a09c792e79fe04d Mon Sep 17 00:00:00 2001 From: lbarraga Date: Mon, 17 Apr 2023 17:19:29 +0200 Subject: [PATCH 02/23] onLogoutClick is niet meer nodig --- .../sel/studeez/screens/timers/TimerScreen.kt | 4 -- .../screens/timers/TimerSelectionScreen.kt | 50 +++++++++++++++++++ .../screens/timers/TimerSelectionViewModel.kt | 24 +++++++++ 3 files changed, 74 insertions(+), 4 deletions(-) delete mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerScreen.kt create mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt create mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerScreen.kt deleted file mode 100644 index b7ca484..0000000 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerScreen.kt +++ /dev/null @@ -1,4 +0,0 @@ -package be.ugent.sel.studeez.screens.timers - -class TimerScreen { -} \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt new file mode 100644 index 0000000..1793984 --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt @@ -0,0 +1,50 @@ +package be.ugent.sel.studeez.screens.timers + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel +import be.ugent.sel.studeez.R +import be.ugent.sel.studeez.common.composable.BasicButton +import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate +import be.ugent.sel.studeez.common.ext.basicButton +import be.ugent.sel.studeez.resources +import be.ugent.sel.studeez.screens.timer_overview.TimerEntry +import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewViewModel + +@Composable +fun TimerSelectScreen( + open: (String) -> Unit, + openAndPopUp: (String, String) -> Unit, + viewModel: TimerSelectViewModel = hiltViewModel() +) { + + val timers = viewModel.getAllTimers().collectAsState(initial = emptyList()) + + PrimaryScreenTemplate( + title = resources().getString(R.string.timers), + open = open, + openAndPopUp = openAndPopUp + ) { + + Column { + LazyColumn( + verticalArrangement = Arrangement.spacedBy(7.dp) + ) { + + // All timers + items(timers.value) { + TimerEntry(timerInfo = it, true) { timerInfo -> + viewModel.startSession() + } + } + } + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt new file mode 100644 index 0000000..f7b74a9 --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt @@ -0,0 +1,24 @@ +package be.ugent.sel.studeez.screens.timers + +import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo +import be.ugent.sel.studeez.domain.LogService +import be.ugent.sel.studeez.domain.TimerDAO +import be.ugent.sel.studeez.screens.StudeezViewModel +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.Flow +import javax.inject.Inject + +@HiltViewModel +class TimerSelectViewModel @Inject constructor( + private val timerDAO: TimerDAO, + logService: LogService +) : StudeezViewModel(logService) { + + fun getAllTimers() : Flow> { + return timerDAO.getAllTimers() + } + + fun startSession() { + + } +} \ No newline at end of file From 199b4c2f6f96fc5f1cc96036156c43df2fd2ca36 Mon Sep 17 00:00:00 2001 From: lbarraga Date: Mon, 17 Apr 2023 17:20:10 +0200 Subject: [PATCH 03/23] onLogoutClick is niet meer nodig --- .../be/ugent/sel/studeez/screens/home/HomeViewModel.kt | 7 ------- 1 file changed, 7 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeViewModel.kt index f0f7b64..429c560 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeViewModel.kt @@ -18,11 +18,4 @@ class HomeViewModel @Inject constructor( fun onStartSessionClick(openAndPopUp: (String) -> Unit) { openAndPopUp(StudeezDestinations.SESSION_SCREEN) } - - fun onLogoutClick(openAndPopup: (String, String) -> Unit) { - launchCatching { - accountDAO.signOut() - openAndPopup(LOGIN_SCREEN, HOME_SCREEN) - } - } } \ No newline at end of file From 1c014e6ac55c6449c0be33915c3a83a5796cbf27 Mon Sep 17 00:00:00 2001 From: reyniersbram <55666730+reyniersbram@users.noreply.github.com> Date: Mon, 17 Apr 2023 17:24:54 +0200 Subject: [PATCH 04/23] #57 Time tests --- .../java/be/ugent/sel/studeez/TimeUnitTest.kt | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt index f66c7b4..81730e5 100644 --- a/app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt +++ b/app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt @@ -36,4 +36,46 @@ class TimeUnitTest { seconds + minutes * 60 + hours * 60 * 60 ) } + + @Test + fun minOne() { + time.minOne() + Assert.assertEquals( + time.getTime(), + (seconds + minutes * 60 + hours * 60 * 60) - 1 + ) + } + + @Test + fun plusOne() { + time.plusOne() + Assert.assertEquals( + time.getTime(), + (seconds + minutes * 60 + hours * 60 * 60) + 1 + ) + } + + @Test + fun minMultiple() { + val n = 10 + for (i in 1..n) { + time.minOne() + } + Assert.assertEquals( + time.getTime(), + (seconds + minutes * 60 + hours * 60 * 60) - n + ) + } + + @Test + fun plusMultiple() { + val n = 10 + for (i in 1..n) { + time.plusOne() + } + Assert.assertEquals( + time.getTime(), + (seconds + minutes * 60 + hours * 60 * 60) + n + ) + } } \ No newline at end of file From 9834ce4a06d3b3599b1a6ae3f928c4b884fde762 Mon Sep 17 00:00:00 2001 From: reyniersbram <55666730+reyniersbram@users.noreply.github.com> Date: Mon, 17 Apr 2023 17:31:11 +0200 Subject: [PATCH 05/23] refactor getters/setters --- .../models/timer_functional/FunctionalCustomTimer.kt | 4 ++-- .../models/timer_functional/FunctionalPomodoroTimer.kt | 10 +++++----- .../local/models/timer_functional/FunctionalTimer.kt | 6 +----- .../studeez/data/local/models/timer_functional/Time.kt | 10 +--------- .../ugent/sel/studeez/screens/session/SessionScreen.kt | 2 +- app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt | 10 +++++----- 6 files changed, 15 insertions(+), 27 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 7cae544..cc79e1e 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 @@ -3,7 +3,7 @@ package be.ugent.sel.studeez.data.local.models.timer_functional class FunctionalCustomTimer(studyTime: Int): FunctionalTimer(studyTime) { override fun tick() { - if (time.getTime() == 0) { + if (time.time == 0) { view = "Done!" } else { time.minOne() @@ -11,6 +11,6 @@ class FunctionalCustomTimer(studyTime: Int): FunctionalTimer(studyTime) { } override fun hasEnded(): Boolean { - return time.getTime() == 0 + return time.time == 0 } } \ 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 ef0bf03..4a990f4 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 @@ -9,19 +9,19 @@ class FunctionalPomodoroTimer( private var isInBreak = false override fun tick() { - if (time.getTime() == 0 && breaksRemaining == 0){ + if (time.time == 0 && breaksRemaining == 0){ view = "Done!" return } - if (time.getTime() == 0) { + if (time.time == 0) { if (isInBreak) { breaksRemaining-- view = "Focus! ($breaksRemaining breaks remaining)" - time.setTime(studyTime) + time.time = studyTime } else { view = "Take a break!" - time.setTime(breakTime) + time.time =breakTime } isInBreak = !isInBreak } @@ -29,6 +29,6 @@ class FunctionalPomodoroTimer( } override fun hasEnded(): Boolean { - return breaksRemaining == 0 && time.getTime() == 0 + return breaksRemaining == 0 && time.time == 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 e6965ab..5d06207 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 @@ -2,16 +2,12 @@ package be.ugent.sel.studeez.data.local.models.timer_functional abstract class FunctionalTimer(initialValue: Int) { protected val time: Time = Time(initialValue) - protected var view: String = "Focus" + var view: String = "Focus" fun getHoursMinutesSeconds(): HoursMinutesSeconds { return time.getAsHMS() } - fun getViewString(): String { - return view - } - abstract fun tick() abstract fun hasEnded(): Boolean 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 ff89516..ec7702d 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 @@ -2,7 +2,7 @@ package be.ugent.sel.studeez.data.local.models.timer_functional class Time(initialTime: Int) { - private var time = initialTime + var time = initialTime fun minOne() { time-- @@ -12,14 +12,6 @@ class Time(initialTime: Int) { 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 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 index d69470e..05a7d3d 100644 --- 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 @@ -50,7 +50,7 @@ private fun Timer(viewModel: SessionViewModel = hiltViewModel()) { fontSize = 80.sp ) Text( - text = viewModel.getTimer().getViewString(), + text = viewModel.getTimer().view, modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center, fontWeight = FontWeight.Light, diff --git a/app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt index 81730e5..567ef18 100644 --- a/app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt +++ b/app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt @@ -32,7 +32,7 @@ class TimeUnitTest { @Test fun getTime() { Assert.assertEquals( - time.getTime(), + time.time, seconds + minutes * 60 + hours * 60 * 60 ) } @@ -41,7 +41,7 @@ class TimeUnitTest { fun minOne() { time.minOne() Assert.assertEquals( - time.getTime(), + time.time, (seconds + minutes * 60 + hours * 60 * 60) - 1 ) } @@ -50,7 +50,7 @@ class TimeUnitTest { fun plusOne() { time.plusOne() Assert.assertEquals( - time.getTime(), + time.time, (seconds + minutes * 60 + hours * 60 * 60) + 1 ) } @@ -62,7 +62,7 @@ class TimeUnitTest { time.minOne() } Assert.assertEquals( - time.getTime(), + time.time, (seconds + minutes * 60 + hours * 60 * 60) - n ) } @@ -74,7 +74,7 @@ class TimeUnitTest { time.plusOne() } Assert.assertEquals( - time.getTime(), + time.time, (seconds + minutes * 60 + hours * 60 * 60) + n ) } From 55b35073c7adafed0722a6f4642cb7640bd6ba90 Mon Sep 17 00:00:00 2001 From: reyniersbram <55666730+reyniersbram@users.noreply.github.com> Date: Mon, 17 Apr 2023 17:50:09 +0200 Subject: [PATCH 06/23] #57 FunctionalCustomTimer unit test --- .../timer_functional/FunctionalTimer.kt | 2 +- .../studeez/FunctionalCustomTimerUnitTest.kt | 38 +++++++++++++++++++ .../sel/studeez/FunctionalTimerUnitTest.kt | 25 ++++++++++++ .../java/be/ugent/sel/studeez/TimeUnitTest.kt | 4 +- 4 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 app/src/test/java/be/ugent/sel/studeez/FunctionalCustomTimerUnitTest.kt create mode 100644 app/src/test/java/be/ugent/sel/studeez/FunctionalTimerUnitTest.kt 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 5d06207..dd01924 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,7 +1,7 @@ package be.ugent.sel.studeez.data.local.models.timer_functional abstract class FunctionalTimer(initialValue: Int) { - protected val time: Time = Time(initialValue) + val time: Time = Time(initialValue) var view: String = "Focus" fun getHoursMinutesSeconds(): HoursMinutesSeconds { diff --git a/app/src/test/java/be/ugent/sel/studeez/FunctionalCustomTimerUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/FunctionalCustomTimerUnitTest.kt new file mode 100644 index 0000000..9a875cd --- /dev/null +++ b/app/src/test/java/be/ugent/sel/studeez/FunctionalCustomTimerUnitTest.kt @@ -0,0 +1,38 @@ +package be.ugent.sel.studeez + +import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalCustomTimer +import org.junit.Assert + +class FunctionalCustomTimerUnitTest: FunctionalTimerUnitTest() { + override fun setup() { + timer = FunctionalCustomTimer(time) + } + + override fun testOneTick() { + timer.tick() + Assert.assertEquals( + time - 1, + timer.time.time, + ) + } + + override fun multipleTicks() { + val n = 10 + for (i in 1 .. n) { + timer.tick() + } + Assert.assertEquals( + time - n, + timer.time.time, + ) + } + + override fun testEnded() { + timer = FunctionalCustomTimer(0) + timer.tick() + Assert.assertEquals( + "Done!", + timer.view + ) + } +} \ No newline at end of file diff --git a/app/src/test/java/be/ugent/sel/studeez/FunctionalTimerUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/FunctionalTimerUnitTest.kt new file mode 100644 index 0000000..996dae5 --- /dev/null +++ b/app/src/test/java/be/ugent/sel/studeez/FunctionalTimerUnitTest.kt @@ -0,0 +1,25 @@ +package be.ugent.sel.studeez + +import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer +import org.junit.Before +import org.junit.Test + +abstract class FunctionalTimerUnitTest { + protected lateinit var timer: FunctionalTimer + private val hours = 4 + private val minutes = 20 + private val seconds = 39 + protected val time = seconds + minutes * 60 + hours * 60 * 60 + + @Before + abstract fun setup() + + @Test + abstract fun testOneTick() + + @Test + abstract fun multipleTicks() + + @Test + abstract fun testEnded() +} \ No newline at end of file diff --git a/app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt index 567ef18..f15c821 100644 --- a/app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt +++ b/app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt @@ -58,7 +58,7 @@ class TimeUnitTest { @Test fun minMultiple() { val n = 10 - for (i in 1..n) { + for (i in 1 .. n) { time.minOne() } Assert.assertEquals( @@ -70,7 +70,7 @@ class TimeUnitTest { @Test fun plusMultiple() { val n = 10 - for (i in 1..n) { + for (i in 1 .. n) { time.plusOne() } Assert.assertEquals( From e60a96429c2bbf703e3aad19b6f449880024d108 Mon Sep 17 00:00:00 2001 From: reyniersbram <55666730+reyniersbram@users.noreply.github.com> Date: Mon, 17 Apr 2023 17:52:55 +0200 Subject: [PATCH 07/23] swapped expected and actual --- .../test/java/be/ugent/sel/studeez/TimeUnitTest.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt index f15c821..9570860 100644 --- a/app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt +++ b/app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt @@ -20,20 +20,20 @@ class TimeUnitTest { @Test fun formatTime() { Assert.assertEquals( - time.getAsHMS(), HoursMinutesSeconds( hours.toString().padStart(2, '0'), minutes.toString().padStart(2, '0'), seconds.toString().padStart(2, '0'), ), + time.getAsHMS(), ) } @Test fun getTime() { Assert.assertEquals( + seconds + minutes * 60 + hours * 60 * 60, time.time, - seconds + minutes * 60 + hours * 60 * 60 ) } @@ -41,8 +41,8 @@ class TimeUnitTest { fun minOne() { time.minOne() Assert.assertEquals( + (seconds + minutes * 60 + hours * 60 * 60) - 1, time.time, - (seconds + minutes * 60 + hours * 60 * 60) - 1 ) } @@ -50,8 +50,8 @@ class TimeUnitTest { fun plusOne() { time.plusOne() Assert.assertEquals( + (seconds + minutes * 60 + hours * 60 * 60) + 1, time.time, - (seconds + minutes * 60 + hours * 60 * 60) + 1 ) } @@ -62,8 +62,8 @@ class TimeUnitTest { time.minOne() } Assert.assertEquals( + (seconds + minutes * 60 + hours * 60 * 60) - n, time.time, - (seconds + minutes * 60 + hours * 60 * 60) - n ) } @@ -74,8 +74,8 @@ class TimeUnitTest { time.plusOne() } Assert.assertEquals( + (seconds + minutes * 60 + hours * 60 * 60) + n, time.time, - (seconds + minutes * 60 + hours * 60 * 60) + n ) } } \ No newline at end of file From 2b683732303fc32b449c234e477920dfd0017595 Mon Sep 17 00:00:00 2001 From: reyniersbram <55666730+reyniersbram@users.noreply.github.com> Date: Mon, 17 Apr 2023 18:46:42 +0200 Subject: [PATCH 08/23] #57 finish FunctionalTimer unit tests --- .../timer_functional/FunctionalCustomTimer.kt | 4 +- .../FunctionalEndlessTimer.kt | 2 +- .../FunctionalPomodoroTimer.kt | 16 ++-- .../timer_functional/FunctionalTimer.kt | 9 +- .../studeez/FunctionalCustomTimerUnitTest.kt | 9 +- .../studeez/FunctionalEndlessTimerUnitTest.kt | 41 ++++++++ .../sel/studeez/FunctionalTimerUnitTest.kt | 18 +++- .../studeez/FuntionalPomodoroTimerUnitTest.kt | 93 +++++++++++++++++++ 8 files changed, 171 insertions(+), 21 deletions(-) create mode 100644 app/src/test/java/be/ugent/sel/studeez/FunctionalEndlessTimerUnitTest.kt create mode 100644 app/src/test/java/be/ugent/sel/studeez/FuntionalPomodoroTimerUnitTest.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 cc79e1e..1cd9a69 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,10 +1,10 @@ package be.ugent.sel.studeez.data.local.models.timer_functional -class FunctionalCustomTimer(studyTime: Int): FunctionalTimer(studyTime) { +class FunctionalCustomTimer(studyTime: Int) : FunctionalTimer(studyTime) { override fun tick() { if (time.time == 0) { - view = "Done!" + view = DONE } else { time.minOne() } 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 45eecda..1c055b5 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,6 @@ package be.ugent.sel.studeez.data.local.models.timer_functional -class FunctionalEndlessTimer() : FunctionalTimer(0){ +class FunctionalEndlessTimer() : FunctionalTimer(0) { override fun hasEnded(): Boolean { return false 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 4a990f4..326869a 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 @@ -3,25 +3,25 @@ package be.ugent.sel.studeez.data.local.models.timer_functional class FunctionalPomodoroTimer( private var studyTime: Int, private var breakTime: Int, repeats: Int -): FunctionalTimer(studyTime) { +) : FunctionalTimer(studyTime) { - private var breaksRemaining = repeats - private var isInBreak = false + var breaksRemaining = repeats + var isInBreak = false override fun tick() { - if (time.time == 0 && breaksRemaining == 0){ - view = "Done!" + if (time.time == 0 && breaksRemaining == 0) { + view = DONE return } if (time.time == 0) { if (isInBreak) { breaksRemaining-- - view = "Focus! ($breaksRemaining breaks remaining)" + view = FOCUS_REMAINING(breaksRemaining) time.time = studyTime } else { - view = "Take a break!" - time.time =breakTime + view = BREAK + time.time = breakTime } isInBreak = !isInBreak } 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 dd01924..8faf6d0 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 @@ -2,7 +2,7 @@ package be.ugent.sel.studeez.data.local.models.timer_functional abstract class FunctionalTimer(initialValue: Int) { val time: Time = Time(initialValue) - var view: String = "Focus" + var view: String = FOCUS fun getHoursMinutesSeconds(): HoursMinutesSeconds { return time.getAsHMS() @@ -12,4 +12,11 @@ abstract class FunctionalTimer(initialValue: Int) { abstract fun hasEnded(): Boolean + companion object { + const val FOCUS: String = "Focus" + const val DONE: String = "Done!" + const val BREAK: String = "Take a break!" + val FOCUS_REMAINING: (Int) -> String = { n -> "Focus! ($n breaks remaining)" } + } + } \ No newline at end of file diff --git a/app/src/test/java/be/ugent/sel/studeez/FunctionalCustomTimerUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/FunctionalCustomTimerUnitTest.kt index 9a875cd..29f7fcf 100644 --- a/app/src/test/java/be/ugent/sel/studeez/FunctionalCustomTimerUnitTest.kt +++ b/app/src/test/java/be/ugent/sel/studeez/FunctionalCustomTimerUnitTest.kt @@ -1,10 +1,11 @@ package be.ugent.sel.studeez import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalCustomTimer +import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer import org.junit.Assert -class FunctionalCustomTimerUnitTest: FunctionalTimerUnitTest() { - override fun setup() { +class FunctionalCustomTimerUnitTest : FunctionalTimerUnitTest() { + override fun setTimer() { timer = FunctionalCustomTimer(time) } @@ -18,7 +19,7 @@ class FunctionalCustomTimerUnitTest: FunctionalTimerUnitTest() { override fun multipleTicks() { val n = 10 - for (i in 1 .. n) { + for (i in 1..n) { timer.tick() } Assert.assertEquals( @@ -31,7 +32,7 @@ class FunctionalCustomTimerUnitTest: FunctionalTimerUnitTest() { timer = FunctionalCustomTimer(0) timer.tick() Assert.assertEquals( - "Done!", + FunctionalTimer.DONE, timer.view ) } diff --git a/app/src/test/java/be/ugent/sel/studeez/FunctionalEndlessTimerUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/FunctionalEndlessTimerUnitTest.kt new file mode 100644 index 0000000..ffaf05e --- /dev/null +++ b/app/src/test/java/be/ugent/sel/studeez/FunctionalEndlessTimerUnitTest.kt @@ -0,0 +1,41 @@ +package be.ugent.sel.studeez + +import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalEndlessTimer +import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer +import org.junit.Assert + +class FunctionalEndlessTimerUnitTest : FunctionalTimerUnitTest() { + override fun setTimer() { + timer = FunctionalEndlessTimer() + } + + override fun testOneTick() { + timer.tick() + Assert.assertEquals( + 1, + timer.time.time + ) + } + + override fun multipleTicks() { + val n = 10 + for (i in 1..n) { + timer.tick() + } + Assert.assertEquals( + n, + timer.time.time + ) + } + + override fun testEnded() { + val n = 1000 + for (i in 1..n) { + timer.tick() + Assert.assertEquals( + FunctionalTimer.FOCUS, + timer.view + ) + } + } +} \ No newline at end of file diff --git a/app/src/test/java/be/ugent/sel/studeez/FunctionalTimerUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/FunctionalTimerUnitTest.kt index 996dae5..a330eb9 100644 --- a/app/src/test/java/be/ugent/sel/studeez/FunctionalTimerUnitTest.kt +++ b/app/src/test/java/be/ugent/sel/studeez/FunctionalTimerUnitTest.kt @@ -6,13 +6,21 @@ import org.junit.Test abstract class FunctionalTimerUnitTest { protected lateinit var timer: FunctionalTimer - private val hours = 4 - private val minutes = 20 - private val seconds = 39 - protected val time = seconds + minutes * 60 + hours * 60 * 60 + protected open val hours = 4 + protected open val minutes = 20 + protected open val seconds = 39 + protected var time: Int = 0 @Before - abstract fun setup() + fun setup() { + time = seconds + minutes * 60 + hours * 60 * 60 + setTimer() + } + + /** + * The timer-property should be set to the right implementation in this method. + */ + abstract fun setTimer() @Test abstract fun testOneTick() diff --git a/app/src/test/java/be/ugent/sel/studeez/FuntionalPomodoroTimerUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/FuntionalPomodoroTimerUnitTest.kt new file mode 100644 index 0000000..f7cbfb6 --- /dev/null +++ b/app/src/test/java/be/ugent/sel/studeez/FuntionalPomodoroTimerUnitTest.kt @@ -0,0 +1,93 @@ +package be.ugent.sel.studeez + +import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalPomodoroTimer +import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer +import org.junit.Assert +import org.junit.Test + +class FuntionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { + private val breakTime = 10 + private val breaks = 2 + override val hours = 0 + override val minutes = 0 + override val seconds = 10 + private lateinit var pomodoroTimer: FunctionalPomodoroTimer + + override fun setTimer() { + pomodoroTimer = FunctionalPomodoroTimer(time, breakTime, breaks) + } + + override fun testOneTick() { + pomodoroTimer.tick() + Assert.assertEquals( + time - 1, + pomodoroTimer.time.time, + ) + Assert.assertFalse(pomodoroTimer.isInBreak) + Assert.assertEquals( + breaks, + pomodoroTimer.breaksRemaining, + ) + Assert.assertEquals( + FunctionalTimer.FOCUS, + pomodoroTimer.view, + ) + } + + override fun multipleTicks() { + val n = 10 + for (i in 1..n) { + pomodoroTimer.tick() + } + Assert.assertEquals( + time - n, + pomodoroTimer.time.time + ) + } + + override fun testEnded() { + pomodoroTimer = FunctionalPomodoroTimer(0, 0, 0) + pomodoroTimer.tick() + Assert.assertEquals( + FunctionalTimer.DONE, + pomodoroTimer.view, + ) + } + + @Test + fun switchToBreak() { + for (i in 0..10) { + pomodoroTimer.tick() + } + Assert.assertTrue(pomodoroTimer.isInBreak) + Assert.assertEquals( + FunctionalTimer.BREAK, + pomodoroTimer.view + ) + } + + @Test + fun switchToStudying() { + for (i in 0..time) { + pomodoroTimer.tick() + } + Assert.assertTrue(pomodoroTimer.isInBreak) + Assert.assertEquals( + FunctionalTimer.BREAK, + pomodoroTimer.view + ) + for (i in 0..breakTime) { + pomodoroTimer.tick() + } + Assert.assertFalse(pomodoroTimer.isInBreak) + val breaksRemaining = breaks - 1 + Assert.assertEquals( + breaksRemaining, + pomodoroTimer.breaksRemaining + ) + Assert.assertEquals( + FunctionalTimer.FOCUS_REMAINING(breaksRemaining), + pomodoroTimer.view + ) + } +} \ No newline at end of file From ecea5746f438b07d3c900d4960fd16e7d1449183 Mon Sep 17 00:00:00 2001 From: lbarraga Date: Mon, 17 Apr 2023 21:07:04 +0200 Subject: [PATCH 09/23] werkende timers --- .../java/be/ugent/sel/studeez/StudeezApp.kt | 5 ++ .../studeez/navigation/StudeezDestinations.kt | 3 +- .../sel/studeez/screens/home/HomeViewModel.kt | 4 +- .../studeez/screens/session/SessionScreen.kt | 12 ++--- .../timer_overview/TimerOverviewScreen.kt | 18 ++++--- .../screens/timers/TimerSelectionScreen.kt | 47 +++++++++++-------- .../screens/timers/TimerSelectionViewModel.kt | 15 ++++-- 7 files changed, 66 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt index c1a3ea2..7c49174 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -26,6 +26,7 @@ import be.ugent.sel.studeez.screens.profile.ProfileScreen import be.ugent.sel.studeez.screens.sign_up.SignUpScreen import be.ugent.sel.studeez.screens.splash.SplashScreen import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewScreen +import be.ugent.sel.studeez.screens.timers.TimerSelectionScreen import be.ugent.sel.studeez.ui.theme.StudeezTheme import kotlinx.coroutines.CoroutineScope @@ -130,4 +131,8 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) { composable(StudeezDestinations.EDIT_PROFILE_SCREEN) { EditProfileScreen(goBack, openAndPopUp) } + + composable(StudeezDestinations.TIMER_SELECTION_SCREEN) { + TimerSelectionScreen(open, openAndPopUp) + } } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/navigation/StudeezDestinations.kt b/app/src/main/java/be/ugent/sel/studeez/navigation/StudeezDestinations.kt index a6c8290..760c814 100644 --- a/app/src/main/java/be/ugent/sel/studeez/navigation/StudeezDestinations.kt +++ b/app/src/main/java/be/ugent/sel/studeez/navigation/StudeezDestinations.kt @@ -5,8 +5,9 @@ object StudeezDestinations { const val SIGN_UP_SCREEN = "signup" const val LOGIN_SCREEN = "login" - const val HOME_SCREEN = "home" + const val HOME_SCREEN = "home" const val TIMER_OVERVIEW_SCREEN = "timer_overview" + const val TIMER_SELECTION_SCREEN = "timer_selection" const val SESSION_SCREEN = "session" // const val TASKS_SCREEN = "tasks" // const val SESSIONS_SCREEN = "sessions" diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeViewModel.kt index 429c560..7db6f8d 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/home/HomeViewModel.kt @@ -15,7 +15,7 @@ class HomeViewModel @Inject constructor( logService: LogService ) : StudeezViewModel(logService) { - fun onStartSessionClick(openAndPopUp: (String) -> Unit) { - openAndPopUp(StudeezDestinations.SESSION_SCREEN) + fun onStartSessionClick(open: (String) -> Unit) { + open(StudeezDestinations.TIMER_SELECTION_SCREEN) } } \ No newline at end of file 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 index d69470e..8caac2b 100644 --- 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 @@ -14,33 +14,33 @@ import androidx.hilt.navigation.compose.hiltViewModel import be.ugent.sel.studeez.R import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate import be.ugent.sel.studeez.resources +import be.ugent.sel.studeez.screens.timers.TimerSelectionViewModel import kotlinx.coroutines.delay @Composable fun SessionScreen( open: (String) -> Unit, openAndPopUp: (String, String) -> Unit, - viewModel: SessionViewModel = hiltViewModel() ) { PrimaryScreenTemplate( title = resources().getString(R.string.start_session), open = open, openAndPopUp = openAndPopUp ) { - Timer(viewModel) + Timer() } } @Composable -private fun Timer(viewModel: SessionViewModel = hiltViewModel()) { +fun Timer(viewModel: TimerSelectionViewModel = hiltViewModel()) { var tikker by remember { mutableStateOf(false) } LaunchedEffect(tikker) { delay(1000) - viewModel.getTimer().tick() + viewModel.sessionTimer!!.tick() tikker = !tikker } - val hms = viewModel.getTimer().getHoursMinutesSeconds() + val hms = viewModel.sessionTimer!!.getHoursMinutesSeconds() Column { Text( text = "${hms.hours} : ${hms.minutes} : ${hms.seconds}", @@ -50,7 +50,7 @@ private fun Timer(viewModel: SessionViewModel = hiltViewModel()) { fontSize = 80.sp ) Text( - text = viewModel.getTimer().getViewString(), + text = viewModel.sessionTimer!!.getViewString(), modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center, fontWeight = FontWeight.Light, diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/TimerOverviewScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/TimerOverviewScreen.kt index fccbc66..66ddfad 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/TimerOverviewScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_overview/TimerOverviewScreen.kt @@ -1,5 +1,6 @@ package be.ugent.sel.studeez.screens.timer_overview +import androidx.annotation.StringRes import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -46,12 +47,12 @@ fun TimerOverviewScreen( ) { // Default Timers, cannot be edited items(viewModel.getDefaultTimers()) { - TimerEntry(timerInfo = it, canEdit = false) + TimerEntry(timerInfo = it, canDisplay = false) } // User timers, can be edited items(timers.value) { - TimerEntry(timerInfo = it, true) { timerInfo -> + TimerEntry(timerInfo = it, true, R.string.edit) { timerInfo -> viewModel.update(timerInfo) } } @@ -65,7 +66,12 @@ fun TimerOverviewScreen( } @Composable -fun TimerEntry(timerInfo: TimerInfo, canEdit: Boolean, update: (TimerInfo) -> Unit = {}) { +fun TimerEntry( + timerInfo: TimerInfo, + canDisplay: Boolean, + @StringRes buttonName: Int = -1, + buttonFunction: (TimerInfo) -> Unit = {} +) { Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier.fillMaxWidth(), @@ -83,9 +89,9 @@ fun TimerEntry(timerInfo: TimerInfo, canEdit: Boolean, update: (TimerInfo) -> Un fontSize = 15.sp ) } - if (canEdit) { - BasicButton(R.string.edit, Modifier.card()) { - // TODO + if (canDisplay) { + BasicButton(buttonName, Modifier.card()) { + buttonFunction(timerInfo) } } diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt index 1793984..c0abe68 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt @@ -4,26 +4,24 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items -import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState -import androidx.compose.ui.Modifier +import androidx.compose.runtime.* import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import be.ugent.sel.studeez.R -import be.ugent.sel.studeez.common.composable.BasicButton import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate -import be.ugent.sel.studeez.common.ext.basicButton +import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo import be.ugent.sel.studeez.resources +import be.ugent.sel.studeez.screens.session.Timer import be.ugent.sel.studeez.screens.timer_overview.TimerEntry -import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewViewModel @Composable -fun TimerSelectScreen( +fun TimerSelectionScreen( open: (String) -> Unit, openAndPopUp: (String, String) -> Unit, - viewModel: TimerSelectViewModel = hiltViewModel() + viewModel: TimerSelectionViewModel = hiltViewModel() ) { + val inSession by remember { viewModel.inSession } val timers = viewModel.getAllTimers().collectAsState(initial = emptyList()) PrimaryScreenTemplate( @@ -32,19 +30,28 @@ fun TimerSelectScreen( openAndPopUp = openAndPopUp ) { - Column { - LazyColumn( - verticalArrangement = Arrangement.spacedBy(7.dp) - ) { - - // All timers - items(timers.value) { - TimerEntry(timerInfo = it, true) { timerInfo -> - viewModel.startSession() - } - } - } + if (inSession) { + Timer(viewModel) + } else { + TimerSelection(timers = timers, viewModel = viewModel) } } +} + +@Composable +fun TimerSelection(timers: State>, viewModel: TimerSelectionViewModel, ) { + LazyColumn(verticalArrangement = Arrangement.spacedBy(7.dp)) { + + // All timers + items(timers.value) { + TimerEntry( + timerInfo = it, + canDisplay = true, + buttonName = R.string.start + ) { timerInfo -> + viewModel.startSession(timerInfo) + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt index f7b74a9..473f2f3 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt @@ -1,5 +1,10 @@ package be.ugent.sel.studeez.screens.timers +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo import be.ugent.sel.studeez.domain.LogService import be.ugent.sel.studeez.domain.TimerDAO @@ -9,16 +14,20 @@ import kotlinx.coroutines.flow.Flow import javax.inject.Inject @HiltViewModel -class TimerSelectViewModel @Inject constructor( +class TimerSelectionViewModel @Inject constructor( private val timerDAO: TimerDAO, logService: LogService ) : StudeezViewModel(logService) { + var inSession = mutableStateOf(false) + var sessionTimer: FunctionalTimer? = null + fun getAllTimers() : Flow> { return timerDAO.getAllTimers() } - fun startSession() { - + fun startSession(timerInfo: TimerInfo) { + inSession.value = true + sessionTimer = timerInfo.getFunctionalTimer() } } \ No newline at end of file From b1fd0691f774bcd35646315046cdab73bf5ec475 Mon Sep 17 00:00:00 2001 From: reyniersbram <55666730+reyniersbram@users.noreply.github.com> Date: Mon, 17 Apr 2023 21:16:53 +0200 Subject: [PATCH 10/23] #57 own package for functionalTimer tests --- .../{ => timer_functional}/FunctionalCustomTimerUnitTest.kt | 3 ++- .../{ => timer_functional}/FunctionalEndlessTimerUnitTest.kt | 3 ++- .../studeez/{ => timer_functional}/FunctionalTimerUnitTest.kt | 2 +- .../{ => timer_functional}/FuntionalPomodoroTimerUnitTest.kt | 4 +++- .../ugent/sel/studeez/{ => timer_functional}/TimeUnitTest.kt | 2 +- 5 files changed, 9 insertions(+), 5 deletions(-) rename app/src/test/java/be/ugent/sel/studeez/{ => timer_functional}/FunctionalCustomTimerUnitTest.kt (90%) rename app/src/test/java/be/ugent/sel/studeez/{ => timer_functional}/FunctionalEndlessTimerUnitTest.kt (90%) rename app/src/test/java/be/ugent/sel/studeez/{ => timer_functional}/FunctionalTimerUnitTest.kt (94%) rename app/src/test/java/be/ugent/sel/studeez/{ => timer_functional}/FuntionalPomodoroTimerUnitTest.kt (94%) rename app/src/test/java/be/ugent/sel/studeez/{ => timer_functional}/TimeUnitTest.kt (97%) diff --git a/app/src/test/java/be/ugent/sel/studeez/FunctionalCustomTimerUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalCustomTimerUnitTest.kt similarity index 90% rename from app/src/test/java/be/ugent/sel/studeez/FunctionalCustomTimerUnitTest.kt rename to app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalCustomTimerUnitTest.kt index 29f7fcf..24f9a3a 100644 --- a/app/src/test/java/be/ugent/sel/studeez/FunctionalCustomTimerUnitTest.kt +++ b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalCustomTimerUnitTest.kt @@ -1,4 +1,4 @@ -package be.ugent.sel.studeez +package be.ugent.sel.studeez.timer_functional import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalCustomTimer import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer @@ -31,6 +31,7 @@ class FunctionalCustomTimerUnitTest : FunctionalTimerUnitTest() { override fun testEnded() { timer = FunctionalCustomTimer(0) timer.tick() + Assert.assertTrue(timer.hasEnded()) Assert.assertEquals( FunctionalTimer.DONE, timer.view diff --git a/app/src/test/java/be/ugent/sel/studeez/FunctionalEndlessTimerUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalEndlessTimerUnitTest.kt similarity index 90% rename from app/src/test/java/be/ugent/sel/studeez/FunctionalEndlessTimerUnitTest.kt rename to app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalEndlessTimerUnitTest.kt index ffaf05e..35eca7a 100644 --- a/app/src/test/java/be/ugent/sel/studeez/FunctionalEndlessTimerUnitTest.kt +++ b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalEndlessTimerUnitTest.kt @@ -1,4 +1,4 @@ -package be.ugent.sel.studeez +package be.ugent.sel.studeez.timer_functional import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalEndlessTimer import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer @@ -32,6 +32,7 @@ class FunctionalEndlessTimerUnitTest : FunctionalTimerUnitTest() { val n = 1000 for (i in 1..n) { timer.tick() + Assert.assertFalse(timer.hasEnded()) Assert.assertEquals( FunctionalTimer.FOCUS, timer.view diff --git a/app/src/test/java/be/ugent/sel/studeez/FunctionalTimerUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalTimerUnitTest.kt similarity index 94% rename from app/src/test/java/be/ugent/sel/studeez/FunctionalTimerUnitTest.kt rename to app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalTimerUnitTest.kt index a330eb9..4d26d06 100644 --- a/app/src/test/java/be/ugent/sel/studeez/FunctionalTimerUnitTest.kt +++ b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalTimerUnitTest.kt @@ -1,4 +1,4 @@ -package be.ugent.sel.studeez +package be.ugent.sel.studeez.timer_functional import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer import org.junit.Before diff --git a/app/src/test/java/be/ugent/sel/studeez/FuntionalPomodoroTimerUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FuntionalPomodoroTimerUnitTest.kt similarity index 94% rename from app/src/test/java/be/ugent/sel/studeez/FuntionalPomodoroTimerUnitTest.kt rename to app/src/test/java/be/ugent/sel/studeez/timer_functional/FuntionalPomodoroTimerUnitTest.kt index f7cbfb6..32a3783 100644 --- a/app/src/test/java/be/ugent/sel/studeez/FuntionalPomodoroTimerUnitTest.kt +++ b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FuntionalPomodoroTimerUnitTest.kt @@ -1,4 +1,4 @@ -package be.ugent.sel.studeez +package be.ugent.sel.studeez.timer_functional import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalPomodoroTimer import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer @@ -48,6 +48,7 @@ class FuntionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { override fun testEnded() { pomodoroTimer = FunctionalPomodoroTimer(0, 0, 0) pomodoroTimer.tick() + Assert.assertTrue(pomodoroTimer.hasEnded()) Assert.assertEquals( FunctionalTimer.DONE, pomodoroTimer.view, @@ -59,6 +60,7 @@ class FuntionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { for (i in 0..10) { pomodoroTimer.tick() } + Assert.assertFalse(pomodoroTimer.hasEnded()) Assert.assertTrue(pomodoroTimer.isInBreak) Assert.assertEquals( FunctionalTimer.BREAK, diff --git a/app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/timer_functional/TimeUnitTest.kt similarity index 97% rename from app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt rename to app/src/test/java/be/ugent/sel/studeez/timer_functional/TimeUnitTest.kt index 9570860..86fdce8 100644 --- a/app/src/test/java/be/ugent/sel/studeez/TimeUnitTest.kt +++ b/app/src/test/java/be/ugent/sel/studeez/timer_functional/TimeUnitTest.kt @@ -1,4 +1,4 @@ -package be.ugent.sel.studeez +package be.ugent.sel.studeez.timer_functional import be.ugent.sel.studeez.data.local.models.timer_functional.HoursMinutesSeconds import be.ugent.sel.studeez.data.local.models.timer_functional.Time From e43589c500ad61741158924bd2d034b7afcbf982 Mon Sep 17 00:00:00 2001 From: reyniersbram <55666730+reyniersbram@users.noreply.github.com> Date: Mon, 17 Apr 2023 21:55:27 +0200 Subject: [PATCH 11/23] #57 added @Test annotation in overridden methods --- .../studeez/timer_functional/FunctionalCustomTimerUnitTest.kt | 4 ++++ .../timer_functional/FunctionalEndlessTimerUnitTest.kt | 4 ++++ .../timer_functional/FuntionalPomodoroTimerUnitTest.kt | 3 +++ 3 files changed, 11 insertions(+) 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 24f9a3a..90c4fcd 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 @@ -3,12 +3,14 @@ package be.ugent.sel.studeez.timer_functional import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalCustomTimer import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer import org.junit.Assert +import org.junit.Test class FunctionalCustomTimerUnitTest : FunctionalTimerUnitTest() { override fun setTimer() { timer = FunctionalCustomTimer(time) } + @Test override fun testOneTick() { timer.tick() Assert.assertEquals( @@ -17,6 +19,7 @@ class FunctionalCustomTimerUnitTest : FunctionalTimerUnitTest() { ) } + @Test override fun multipleTicks() { val n = 10 for (i in 1..n) { @@ -28,6 +31,7 @@ class FunctionalCustomTimerUnitTest : FunctionalTimerUnitTest() { ) } + @Test override fun testEnded() { timer = FunctionalCustomTimer(0) timer.tick() 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 35eca7a..e0e98af 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 @@ -3,12 +3,14 @@ package be.ugent.sel.studeez.timer_functional import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalEndlessTimer import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer import org.junit.Assert +import org.junit.Test class FunctionalEndlessTimerUnitTest : FunctionalTimerUnitTest() { override fun setTimer() { timer = FunctionalEndlessTimer() } + @Test override fun testOneTick() { timer.tick() Assert.assertEquals( @@ -17,6 +19,7 @@ class FunctionalEndlessTimerUnitTest : FunctionalTimerUnitTest() { ) } + @Test override fun multipleTicks() { val n = 10 for (i in 1..n) { @@ -28,6 +31,7 @@ class FunctionalEndlessTimerUnitTest : FunctionalTimerUnitTest() { ) } + @Test override fun testEnded() { val n = 1000 for (i in 1..n) { diff --git a/app/src/test/java/be/ugent/sel/studeez/timer_functional/FuntionalPomodoroTimerUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FuntionalPomodoroTimerUnitTest.kt index 32a3783..d8229a5 100644 --- a/app/src/test/java/be/ugent/sel/studeez/timer_functional/FuntionalPomodoroTimerUnitTest.kt +++ b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FuntionalPomodoroTimerUnitTest.kt @@ -17,6 +17,7 @@ class FuntionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { pomodoroTimer = FunctionalPomodoroTimer(time, breakTime, breaks) } + @Test override fun testOneTick() { pomodoroTimer.tick() Assert.assertEquals( @@ -34,6 +35,7 @@ class FuntionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { ) } + @Test override fun multipleTicks() { val n = 10 for (i in 1..n) { @@ -45,6 +47,7 @@ class FuntionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { ) } + @Test override fun testEnded() { pomodoroTimer = FunctionalPomodoroTimer(0, 0, 0) pomodoroTimer.tick() From d409294ad8ee33718d29be9c0fc0200d63f499bb Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 18 Apr 2023 08:40:58 +0200 Subject: [PATCH 12/23] added start --- app/src/main/res/values/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b48d7f8..5b022c7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -13,6 +13,7 @@ Cancel Go back Next + Start Success! From d5b9e1dae842157d7bfb14e8fdd77a710579406f Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 18 Apr 2023 10:36:54 +0200 Subject: [PATCH 13/23] #40 button now starts a new session --- .../sel/studeez/data/SelectedTimerRepo.kt | 11 ++++ .../timer_selection/TimerSelectionScreen.kt | 44 ++++++++++++++ .../TimerSelectionViewModel.kt | 15 ++--- .../screens/timers/TimerSelectionScreen.kt | 57 ------------------- 4 files changed, 61 insertions(+), 66 deletions(-) create mode 100644 app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt create mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionScreen.kt rename app/src/main/java/be/ugent/sel/studeez/screens/{timers => timer_selection}/TimerSelectionViewModel.kt (68%) delete mode 100644 app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt diff --git a/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt b/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt new file mode 100644 index 0000000..1aa763d --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt @@ -0,0 +1,11 @@ +package be.ugent.sel.studeez.screens.timers + +import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class SelectedTimerRepo @Inject constructor(){ + var selectedTimer: FunctionalTimer? = null + +} \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionScreen.kt new file mode 100644 index 0000000..8e8df37 --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionScreen.kt @@ -0,0 +1,44 @@ +package be.ugent.sel.studeez.screens.timer_selection + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.runtime.* +import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel +import be.ugent.sel.studeez.R +import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate +import be.ugent.sel.studeez.resources +import be.ugent.sel.studeez.screens.timer_overview.TimerEntry + +@Composable +fun TimerSelectionScreen( + open: (String) -> Unit, + openAndPopUp: (String, String) -> Unit, + viewModel: TimerSelectionViewModel = hiltViewModel() +) { + + val timers = viewModel.getAllTimers().collectAsState(initial = emptyList()) + + PrimaryScreenTemplate( + title = resources().getString(R.string.timers), + open = open, + openAndPopUp = openAndPopUp, + ) { + + LazyColumn(verticalArrangement = Arrangement.spacedBy(7.dp)) { + + // All timers + items(timers.value) { + TimerEntry( + timerInfo = it, + canDisplay = true, + buttonName = R.string.start + ) { timerInfo -> + viewModel.startSession(open, timerInfo) + } + } + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt similarity index 68% rename from app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt rename to app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt index 473f2f3..d90a54c 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt @@ -1,13 +1,12 @@ package be.ugent.sel.studeez.screens.timers -import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue +import be.ugent.sel.studeez.data.SelectedTimerRepo import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo import be.ugent.sel.studeez.domain.LogService import be.ugent.sel.studeez.domain.TimerDAO +import be.ugent.sel.studeez.navigation.StudeezDestinations import be.ugent.sel.studeez.screens.StudeezViewModel import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.Flow @@ -16,18 +15,16 @@ import javax.inject.Inject @HiltViewModel class TimerSelectionViewModel @Inject constructor( private val timerDAO: TimerDAO, + private val selectedTimerRepo: SelectedTimerRepo, logService: LogService ) : StudeezViewModel(logService) { - var inSession = mutableStateOf(false) - var sessionTimer: FunctionalTimer? = null - fun getAllTimers() : Flow> { return timerDAO.getAllTimers() } - fun startSession(timerInfo: TimerInfo) { - inSession.value = true - sessionTimer = timerInfo.getFunctionalTimer() + fun startSession(open: (String) -> Unit, timerInfo: TimerInfo) { + selectedTimerRepo.selectedTimer = timerInfo.getFunctionalTimer() + open(StudeezDestinations.SESSION_SCREEN) } } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt deleted file mode 100644 index c0abe68..0000000 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerSelectionScreen.kt +++ /dev/null @@ -1,57 +0,0 @@ -package be.ugent.sel.studeez.screens.timers - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.items -import androidx.compose.runtime.* -import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel -import be.ugent.sel.studeez.R -import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate -import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo -import be.ugent.sel.studeez.resources -import be.ugent.sel.studeez.screens.session.Timer -import be.ugent.sel.studeez.screens.timer_overview.TimerEntry - -@Composable -fun TimerSelectionScreen( - open: (String) -> Unit, - openAndPopUp: (String, String) -> Unit, - viewModel: TimerSelectionViewModel = hiltViewModel() -) { - - val inSession by remember { viewModel.inSession } - val timers = viewModel.getAllTimers().collectAsState(initial = emptyList()) - - PrimaryScreenTemplate( - title = resources().getString(R.string.timers), - open = open, - openAndPopUp = openAndPopUp - ) { - - if (inSession) { - Timer(viewModel) - } else { - TimerSelection(timers = timers, viewModel = viewModel) - } - - } -} - -@Composable -fun TimerSelection(timers: State>, viewModel: TimerSelectionViewModel, ) { - LazyColumn(verticalArrangement = Arrangement.spacedBy(7.dp)) { - - // All timers - items(timers.value) { - TimerEntry( - timerInfo = it, - canDisplay = true, - buttonName = R.string.start - ) { timerInfo -> - viewModel.startSession(timerInfo) - } - } - } -} \ No newline at end of file From e3e3eaf1fa8c61d3ddc7b87df207b4b9654956ca Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 18 Apr 2023 10:39:07 +0200 Subject: [PATCH 14/23] #26 session can be started --- .../screens/timer_selection/TimerSelectionViewModel.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt index d90a54c..cae25e3 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt @@ -1,8 +1,6 @@ -package be.ugent.sel.studeez.screens.timers +package be.ugent.sel.studeez.screens.timer_selection -import androidx.compose.runtime.mutableStateOf import be.ugent.sel.studeez.data.SelectedTimerRepo -import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo import be.ugent.sel.studeez.domain.LogService import be.ugent.sel.studeez.domain.TimerDAO From b2d010ff3f3557e4a8ad33f39773e3dcf8640368 Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 18 Apr 2023 10:40:05 +0200 Subject: [PATCH 15/23] #26 timer can be displayed --- .../studeez/screens/session/SessionScreen.kt | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) 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 index 8caac2b..4e6feb2 100644 --- 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 @@ -7,40 +7,39 @@ import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.TextUnit -import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.hilt.navigation.compose.hiltViewModel import be.ugent.sel.studeez.R import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate +import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate import be.ugent.sel.studeez.resources -import be.ugent.sel.studeez.screens.timers.TimerSelectionViewModel import kotlinx.coroutines.delay +import kotlin.time.Duration.Companion.seconds @Composable fun SessionScreen( open: (String) -> Unit, openAndPopUp: (String, String) -> Unit, ) { - PrimaryScreenTemplate( + SecondaryScreenTemplate( title = resources().getString(R.string.start_session), - open = open, - openAndPopUp = openAndPopUp - ) { - Timer() - } + popUp = {}, + content = { Timer() } + ) } @Composable -fun Timer(viewModel: TimerSelectionViewModel = hiltViewModel()) { - var tikker by remember { mutableStateOf(false) } - LaunchedEffect(tikker) { - delay(1000) - viewModel.sessionTimer!!.tick() - tikker = !tikker +fun Timer(viewModel: SessionViewModel = hiltViewModel()) { + + + var ticker by remember { mutableStateOf(false) } + LaunchedEffect(ticker) { + delay(1.seconds) + viewModel.getTimer().tick() + ticker = !ticker } - val hms = viewModel.sessionTimer!!.getHoursMinutesSeconds() + val hms = viewModel.getTimer().getHoursMinutesSeconds() Column { Text( text = "${hms.hours} : ${hms.minutes} : ${hms.seconds}", @@ -50,7 +49,7 @@ fun Timer(viewModel: TimerSelectionViewModel = hiltViewModel()) { fontSize = 80.sp ) Text( - text = viewModel.sessionTimer!!.getViewString(), + text = viewModel.getTimer().getViewString(), modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center, fontWeight = FontWeight.Light, From 42eb9cf208c2c2ee82ab4cc3cdf465f12673a5a4 Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 18 Apr 2023 10:40:56 +0200 Subject: [PATCH 16/23] get selectedtimer from repository --- .../ugent/sel/studeez/screens/session/SessionViewModel.kt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionViewModel.kt index 7326212..8d36a50 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionViewModel.kt @@ -1,20 +1,19 @@ package be.ugent.sel.studeez.screens.session -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.domain.LogService import be.ugent.sel.studeez.screens.StudeezViewModel +import be.ugent.sel.studeez.data.SelectedTimerRepo import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @HiltViewModel class SessionViewModel @Inject constructor( + private val selectedTimerRepo: SelectedTimerRepo, logService: LogService ) : StudeezViewModel(logService) { - private val timer: FunctionalTimer = FunctionalPomodoroTimer(15, 5, 3) - fun getTimer() : FunctionalTimer { - return timer + return selectedTimerRepo.selectedTimer!! } } \ No newline at end of file From 8f84c24bad75b8dc6c585923d075f7e5651bc88f Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 18 Apr 2023 10:41:58 +0200 Subject: [PATCH 17/23] singleton repo for selectedTimer --- .../java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt b/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt index 1aa763d..9fcd487 100644 --- a/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt +++ b/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt @@ -1,11 +1,14 @@ -package be.ugent.sel.studeez.screens.timers +package be.ugent.sel.studeez.data import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer import javax.inject.Inject import javax.inject.Singleton +/** + * Used to communicate the SelectedTimer from the selection screen to the session screen. + * Because this is a singleton-class the view-models of both screens observe the same data. + */ @Singleton class SelectedTimerRepo @Inject constructor(){ var selectedTimer: FunctionalTimer? = null - } \ No newline at end of file From 63bb3f60ac14b07af7be82752dc4e32031024957 Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 18 Apr 2023 10:43:17 +0200 Subject: [PATCH 18/23] add TimerSelectionScreen to imports --- app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt index 7c49174..04b4914 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -26,7 +26,7 @@ import be.ugent.sel.studeez.screens.profile.ProfileScreen import be.ugent.sel.studeez.screens.sign_up.SignUpScreen import be.ugent.sel.studeez.screens.splash.SplashScreen import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewScreen -import be.ugent.sel.studeez.screens.timers.TimerSelectionScreen +import be.ugent.sel.studeez.screens.timer_selection.TimerSelectionScreen import be.ugent.sel.studeez.ui.theme.StudeezTheme import kotlinx.coroutines.CoroutineScope From 38b582ead97fb2b0c25858c5b7045a0e3bf1b163 Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 18 Apr 2023 13:29:52 +0200 Subject: [PATCH 19/23] secondaryscreen gone --- .../be/ugent/sel/studeez/screens/session/SessionScreen.kt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) 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 index 4e6feb2..0c60b3c 100644 --- 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 @@ -21,11 +21,7 @@ fun SessionScreen( open: (String) -> Unit, openAndPopUp: (String, String) -> Unit, ) { - SecondaryScreenTemplate( - title = resources().getString(R.string.start_session), - popUp = {}, - content = { Timer() } - ) + Timer() } @Composable From b3651bbbe59ca8859d92e2cb47b73d90c5a36670 Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 18 Apr 2023 13:31:48 +0200 Subject: [PATCH 20/23] BreaktimerInfo -> PomodoroTimerInfo --- .../timer_info/{BreakTimerInfo.kt => PomodoroTimerInfo.kt} | 2 +- .../ugent/sel/studeez/domain/implementation/ToTimerConverter.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_info/{BreakTimerInfo.kt => PomodoroTimerInfo.kt} (97%) diff --git a/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_info/BreakTimerInfo.kt b/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_info/PomodoroTimerInfo.kt similarity index 97% rename from app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_info/BreakTimerInfo.kt rename to app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_info/PomodoroTimerInfo.kt index 735f917..18bcea6 100644 --- a/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_info/BreakTimerInfo.kt +++ b/app/src/main/java/be/ugent/sel/studeez/data/local/models/timer_info/PomodoroTimerInfo.kt @@ -3,7 +3,7 @@ package be.ugent.sel.studeez.data.local.models.timer_info import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalPomodoroTimer import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer -class BreakTimerInfo( +class PomodoroTimerInfo( name: String, description: String, private val studyTime: Int, diff --git a/app/src/main/java/be/ugent/sel/studeez/domain/implementation/ToTimerConverter.kt b/app/src/main/java/be/ugent/sel/studeez/domain/implementation/ToTimerConverter.kt index 021f9a0..ea06747 100644 --- a/app/src/main/java/be/ugent/sel/studeez/domain/implementation/ToTimerConverter.kt +++ b/app/src/main/java/be/ugent/sel/studeez/domain/implementation/ToTimerConverter.kt @@ -30,7 +30,7 @@ class ToTimerConverter { it.studyTime, it.id ) }, - TimerType.BREAK to TimerFactory { BreakTimerInfo( + TimerType.BREAK to TimerFactory { PomodoroTimerInfo( it.name, it.description, it.studyTime, From d8b95f5d5b2785fdb3dae12c2fbec5d528885e4a Mon Sep 17 00:00:00 2001 From: Lukas Barragan Torres Date: Tue, 18 Apr 2023 13:33:37 +0200 Subject: [PATCH 21/23] change name of SelectedTimerRepo to SelectedTimerState --- .../data/{SelectedTimerRepo.kt => SelectedTimerState.kt} | 2 +- .../ugent/sel/studeez/screens/session/SessionViewModel.kt | 6 +++--- .../screens/timer_selection/TimerSelectionViewModel.kt | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) rename app/src/main/java/be/ugent/sel/studeez/data/{SelectedTimerRepo.kt => SelectedTimerState.kt} (89%) diff --git a/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt b/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerState.kt similarity index 89% rename from app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt rename to app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerState.kt index 9fcd487..f8fcebd 100644 --- a/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerRepo.kt +++ b/app/src/main/java/be/ugent/sel/studeez/data/SelectedTimerState.kt @@ -9,6 +9,6 @@ import javax.inject.Singleton * Because this is a singleton-class the view-models of both screens observe the same data. */ @Singleton -class SelectedTimerRepo @Inject constructor(){ +class SelectedTimerState @Inject constructor(){ var selectedTimer: FunctionalTimer? = null } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionViewModel.kt index 8d36a50..f4bf93c 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/session/SessionViewModel.kt @@ -3,17 +3,17 @@ package be.ugent.sel.studeez.screens.session import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer import be.ugent.sel.studeez.domain.LogService import be.ugent.sel.studeez.screens.StudeezViewModel -import be.ugent.sel.studeez.data.SelectedTimerRepo +import be.ugent.sel.studeez.data.SelectedTimerState import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @HiltViewModel class SessionViewModel @Inject constructor( - private val selectedTimerRepo: SelectedTimerRepo, + private val selectedTimerState: SelectedTimerState, logService: LogService ) : StudeezViewModel(logService) { fun getTimer() : FunctionalTimer { - return selectedTimerRepo.selectedTimer!! + return selectedTimerState.selectedTimer!! } } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt index cae25e3..c555bfa 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/timer_selection/TimerSelectionViewModel.kt @@ -1,6 +1,6 @@ package be.ugent.sel.studeez.screens.timer_selection -import be.ugent.sel.studeez.data.SelectedTimerRepo +import be.ugent.sel.studeez.data.SelectedTimerState import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo import be.ugent.sel.studeez.domain.LogService import be.ugent.sel.studeez.domain.TimerDAO @@ -13,7 +13,7 @@ import javax.inject.Inject @HiltViewModel class TimerSelectionViewModel @Inject constructor( private val timerDAO: TimerDAO, - private val selectedTimerRepo: SelectedTimerRepo, + private val selectedTimerState: SelectedTimerState, logService: LogService ) : StudeezViewModel(logService) { @@ -22,7 +22,7 @@ class TimerSelectionViewModel @Inject constructor( } fun startSession(open: (String) -> Unit, timerInfo: TimerInfo) { - selectedTimerRepo.selectedTimer = timerInfo.getFunctionalTimer() + selectedTimerState.selectedTimer = timerInfo.getFunctionalTimer() open(StudeezDestinations.SESSION_SCREEN) } } \ No newline at end of file From 3a2d13b3d67b3faceed6160231384d95d0326009 Mon Sep 17 00:00:00 2001 From: tdpeuter Date: Tue, 18 Apr 2023 14:28:55 +0200 Subject: [PATCH 22/23] Disable anonymous user --- .../main/java/be/ugent/sel/studeez/data/local/models/User.kt | 2 +- .../sel/studeez/domain/implementation/FirebaseAccountDAO.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/data/local/models/User.kt b/app/src/main/java/be/ugent/sel/studeez/data/local/models/User.kt index 412100a..2fba2ce 100644 --- a/app/src/main/java/be/ugent/sel/studeez/data/local/models/User.kt +++ b/app/src/main/java/be/ugent/sel/studeez/data/local/models/User.kt @@ -1,3 +1,3 @@ package be.ugent.sel.studeez.data.local.models -data class User(val id: String = "", val isAnonymous: Boolean = true) +data class User(val id: String = "") diff --git a/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FirebaseAccountDAO.kt b/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FirebaseAccountDAO.kt index 434f3ce..4a490fe 100644 --- a/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FirebaseAccountDAO.kt +++ b/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FirebaseAccountDAO.kt @@ -39,7 +39,7 @@ class FirebaseAccountDAO @Inject constructor( get() = callbackFlow { val listener = FirebaseAuth.AuthStateListener { auth -> - this.trySend(auth.currentUser?.let { User(it.uid, it.isAnonymous) } ?: User()) + this.trySend(auth.currentUser?.let { User(it.uid) } ?: User()) } auth.addAuthStateListener(listener) awaitClose { auth.removeAuthStateListener(listener) } From 826acc1186e00a9adac167f399914c58f8dbc6c2 Mon Sep 17 00:00:00 2001 From: reyniersbram <55666730+reyniersbram@users.noreply.github.com> Date: Tue, 18 Apr 2023 14:58:16 +0200 Subject: [PATCH 23/23] created studystate for functional timer to improve localisation --- .../timer_functional/FunctionalCustomTimer.kt | 2 +- .../FunctionalPomodoroTimer.kt | 6 ++--- .../timer_functional/FunctionalTimer.kt | 9 +++---- .../studeez/screens/session/SessionScreen.kt | 26 ++++++++++++++++--- app/src/main/res/values/strings.xml | 8 ++++++ .../FunctionalCustomTimerUnitTest.kt | 2 +- .../FunctionalEndlessTimerUnitTest.kt | 2 +- ....kt => FunctionalPomodoroTimerUnitTest.kt} | 12 ++++----- 8 files changed, 45 insertions(+), 22 deletions(-) rename app/src/test/java/be/ugent/sel/studeez/timer_functional/{FuntionalPomodoroTimerUnitTest.kt => FunctionalPomodoroTimerUnitTest.kt} (88%) 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 1cd9a69..5c5f396 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 @@ -4,7 +4,7 @@ class FunctionalCustomTimer(studyTime: Int) : FunctionalTimer(studyTime) { override fun tick() { if (time.time == 0) { - view = DONE + view = StudyState.DONE } else { time.minOne() } 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 326869a..f18d824 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 @@ -10,17 +10,17 @@ class FunctionalPomodoroTimer( override fun tick() { if (time.time == 0 && breaksRemaining == 0) { - view = DONE + view = StudyState.DONE return } if (time.time == 0) { if (isInBreak) { breaksRemaining-- - view = FOCUS_REMAINING(breaksRemaining) + view = StudyState.FOCUS_REMAINING time.time = studyTime } else { - view = BREAK + view = StudyState.BREAK time.time = breakTime } isInBreak = !isInBreak 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 8faf6d0..9f95296 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 @@ -2,7 +2,7 @@ package be.ugent.sel.studeez.data.local.models.timer_functional abstract class FunctionalTimer(initialValue: Int) { val time: Time = Time(initialValue) - var view: String = FOCUS + var view: StudyState = StudyState.FOCUS fun getHoursMinutesSeconds(): HoursMinutesSeconds { return time.getAsHMS() @@ -12,11 +12,8 @@ abstract class FunctionalTimer(initialValue: Int) { abstract fun hasEnded(): Boolean - companion object { - const val FOCUS: String = "Focus" - const val DONE: String = "Done!" - const val BREAK: String = "Take a break!" - val FOCUS_REMAINING: (Int) -> String = { n -> "Focus! ($n breaks remaining)" } + enum class StudyState { + FOCUS, DONE, BREAK, FOCUS_REMAINING } } \ No newline at end of file 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 index 341d335..59952d9 100644 --- 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 @@ -3,15 +3,21 @@ package be.ugent.sel.studeez.screens.session import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material.Text -import androidx.compose.runtime.* +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.Modifier import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.sp import androidx.hilt.navigation.compose.hiltViewModel import be.ugent.sel.studeez.R -import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate -import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate +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.resources import kotlinx.coroutines.delay import kotlin.time.Duration.Companion.seconds @@ -44,12 +50,24 @@ fun Timer(viewModel: SessionViewModel = hiltViewModel()) { fontWeight = FontWeight.Bold, fontSize = 80.sp ) + val stateString: String = when (viewModel.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 -> + (viewModel.getTimer() as FunctionalPomodoroTimer?)?.breaksRemaining?.let { + resources().getQuantityString(R.plurals.state_focus_remaining, it, it) + }.toString() + } + Text( - text = viewModel.getTimer().view, + text = stateString, modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center, fontWeight = FontWeight.Light, fontSize = 30.sp ) } + + } \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5b022c7..39abda6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -64,6 +64,14 @@ Timers Edit Add timer + Focus! + + Focus one more time! + Focus! (%d break remaining) + Focus! (%d breaks remaining) + + Done! + Take a break! Settings 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 90c4fcd..2daa61e 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 @@ -37,7 +37,7 @@ class FunctionalCustomTimerUnitTest : FunctionalTimerUnitTest() { timer.tick() Assert.assertTrue(timer.hasEnded()) Assert.assertEquals( - FunctionalTimer.DONE, + FunctionalTimer.StudyState.DONE, timer.view ) } 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 e0e98af..b83d436 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 @@ -38,7 +38,7 @@ class FunctionalEndlessTimerUnitTest : FunctionalTimerUnitTest() { timer.tick() Assert.assertFalse(timer.hasEnded()) Assert.assertEquals( - FunctionalTimer.FOCUS, + FunctionalTimer.StudyState.FOCUS, timer.view ) } diff --git a/app/src/test/java/be/ugent/sel/studeez/timer_functional/FuntionalPomodoroTimerUnitTest.kt b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalPomodoroTimerUnitTest.kt similarity index 88% rename from app/src/test/java/be/ugent/sel/studeez/timer_functional/FuntionalPomodoroTimerUnitTest.kt rename to app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalPomodoroTimerUnitTest.kt index d8229a5..a49d2f7 100644 --- a/app/src/test/java/be/ugent/sel/studeez/timer_functional/FuntionalPomodoroTimerUnitTest.kt +++ b/app/src/test/java/be/ugent/sel/studeez/timer_functional/FunctionalPomodoroTimerUnitTest.kt @@ -5,7 +5,7 @@ import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer import org.junit.Assert import org.junit.Test -class FuntionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { +class FunctionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { private val breakTime = 10 private val breaks = 2 override val hours = 0 @@ -30,7 +30,7 @@ class FuntionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { pomodoroTimer.breaksRemaining, ) Assert.assertEquals( - FunctionalTimer.FOCUS, + FunctionalTimer.StudyState.FOCUS, pomodoroTimer.view, ) } @@ -53,7 +53,7 @@ class FuntionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { pomodoroTimer.tick() Assert.assertTrue(pomodoroTimer.hasEnded()) Assert.assertEquals( - FunctionalTimer.DONE, + FunctionalTimer.StudyState.DONE, pomodoroTimer.view, ) } @@ -66,7 +66,7 @@ class FuntionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { Assert.assertFalse(pomodoroTimer.hasEnded()) Assert.assertTrue(pomodoroTimer.isInBreak) Assert.assertEquals( - FunctionalTimer.BREAK, + FunctionalTimer.StudyState.BREAK, pomodoroTimer.view ) } @@ -78,7 +78,7 @@ class FuntionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { } Assert.assertTrue(pomodoroTimer.isInBreak) Assert.assertEquals( - FunctionalTimer.BREAK, + FunctionalTimer.StudyState.BREAK, pomodoroTimer.view ) for (i in 0..breakTime) { @@ -91,7 +91,7 @@ class FuntionalPomodoroTimerUnitTest : FunctionalTimerUnitTest() { pomodoroTimer.breaksRemaining ) Assert.assertEquals( - FunctionalTimer.FOCUS_REMAINING(breaksRemaining), + FunctionalTimer.StudyState.FOCUS_REMAINING, pomodoroTimer.view ) }