Merge pull request #79 from SELab1/localisation
created studystate for functional timer to improve localisation
This commit is contained in:
		
						commit
						9fd3df68f0
					
				
					 8 changed files with 45 additions and 22 deletions
				
			
		|  | @ -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() | ||||
|         } | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
|  | @ -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 | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | @ -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 | ||||
|         ) | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
|  | @ -64,6 +64,14 @@ | |||
|     <string name="timers">Timers</string> | ||||
|     <string name="edit">Edit</string> | ||||
|     <string name="add_timer">Add timer</string> | ||||
|     <string name="state_focus">Focus!</string> | ||||
|     <plurals name="state_focus_remaining"> | ||||
|         <item quantity="zero">Focus one more time!</item> | ||||
|         <item quantity="one">Focus! (%d break remaining)</item> | ||||
|         <item quantity="other">Focus! (%d breaks remaining)</item> | ||||
|     </plurals> | ||||
|     <string name="state_done">Done!</string> | ||||
|     <string name="state_take_a_break">Take a break!</string> | ||||
| 
 | ||||
|     <!-- Settings --> | ||||
|     <string name="settings">Settings</string> | ||||
|  |  | |||
|  | @ -37,7 +37,7 @@ class FunctionalCustomTimerUnitTest : FunctionalTimerUnitTest() { | |||
|         timer.tick() | ||||
|         Assert.assertTrue(timer.hasEnded()) | ||||
|         Assert.assertEquals( | ||||
|             FunctionalTimer.DONE, | ||||
|             FunctionalTimer.StudyState.DONE, | ||||
|             timer.view | ||||
|         ) | ||||
|     } | ||||
|  |  | |||
|  | @ -38,7 +38,7 @@ class FunctionalEndlessTimerUnitTest : FunctionalTimerUnitTest() { | |||
|             timer.tick() | ||||
|             Assert.assertFalse(timer.hasEnded()) | ||||
|             Assert.assertEquals( | ||||
|                 FunctionalTimer.FOCUS, | ||||
|                 FunctionalTimer.StudyState.FOCUS, | ||||
|                 timer.view | ||||
|             ) | ||||
|         } | ||||
|  |  | |||
|  | @ -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 | ||||
|         ) | ||||
|     } | ||||
		Reference in a new issue
	
	 brreynie
						brreynie