timer can run when invisible (but no sound)
This commit is contained in:
		
							parent
							
								
									e20e972b88
								
							
						
					
					
						commit
						ea4e7a4790
					
				
					 3 changed files with 21 additions and 32 deletions
				
			
		|  | @ -1,7 +1,6 @@ | |||
| package be.ugent.sel.studeez.activities | ||||
| 
 | ||||
| import android.os.Bundle | ||||
| import android.util.Log | ||||
| import androidx.activity.ComponentActivity | ||||
| import androidx.activity.compose.setContent | ||||
| import androidx.compose.foundation.layout.fillMaxSize | ||||
|  | @ -11,11 +10,15 @@ import androidx.compose.material.Text | |||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.ui.Modifier | ||||
| import androidx.compose.ui.tooling.preview.Preview | ||||
| import androidx.lifecycle.lifecycleScope | ||||
| import be.ugent.sel.studeez.StudeezApp | ||||
| import be.ugent.sel.studeez.screens.session.SessionTest | ||||
| import be.ugent.sel.studeez.screens.session.test | ||||
| import be.ugent.sel.studeez.screens.session.InvisibleSessionManager | ||||
| import be.ugent.sel.studeez.ui.theme.StudeezTheme | ||||
| import dagger.hilt.android.AndroidEntryPoint | ||||
| import kotlinx.coroutines.Job | ||||
| import kotlinx.coroutines.launch | ||||
| 
 | ||||
| var onTimerInvisible: Job? = null | ||||
| 
 | ||||
| @AndroidEntryPoint | ||||
| class MainActivity : ComponentActivity() { | ||||
|  | @ -34,13 +37,17 @@ class MainActivity : ComponentActivity() { | |||
|         } | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|     override fun onStop() { | ||||
|         test() | ||||
|         onTimerInvisible = lifecycleScope.launch { | ||||
|             InvisibleSessionManager.updateTimer() | ||||
|         } | ||||
|         super.onStop() | ||||
|     } | ||||
| 
 | ||||
|     override fun onStart() { | ||||
|         SessionTest.updateTimer() | ||||
|         onTimerInvisible?.cancel() | ||||
|         super.onStart() | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -4,10 +4,6 @@ class Time(initialTime: Int) { | |||
| 
 | ||||
|     var time = initialTime | ||||
| 
 | ||||
|     fun min(i: Int) { | ||||
|         time -= i | ||||
|     } | ||||
| 
 | ||||
|     fun minOne() { | ||||
|         time-- | ||||
|     } | ||||
|  |  | |||
|  | @ -3,7 +3,6 @@ package be.ugent.sel.studeez.screens.session | |||
| import android.media.MediaPlayer | ||||
| import android.media.RingtoneManager | ||||
| import android.net.Uri | ||||
| import android.util.Log | ||||
| import androidx.compose.foundation.background | ||||
| import androidx.compose.foundation.border | ||||
| import androidx.compose.foundation.layout.Box | ||||
|  | @ -35,17 +34,11 @@ import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer.S | |||
| import be.ugent.sel.studeez.data.local.models.timer_functional.Time | ||||
| import be.ugent.sel.studeez.resources | ||||
| import kotlinx.coroutines.delay | ||||
| import java.time.Duration | ||||
| import java.time.LocalDateTime | ||||
| import java.time.ZoneId | ||||
| import java.util.* | ||||
| import kotlin.properties.Delegates | ||||
| import kotlin.time.Duration.Companion.hours | ||||
| import kotlin.time.Duration.Companion.minutes | ||||
| import kotlin.time.Duration.Companion.seconds | ||||
| 
 | ||||
| var start: LocalDateTime = Calendar.getInstance().time.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime() | ||||
| 
 | ||||
| @Composable | ||||
| fun SessionScreen( | ||||
|     open: (String) -> Unit, | ||||
|  | @ -57,7 +50,7 @@ fun SessionScreen( | |||
|     val mediaplayer = MediaPlayer.create(context, uri) | ||||
|     mediaplayer.isLooping = false | ||||
| 
 | ||||
|     SessionTest.setNewViewModel(viewModel = viewModel) | ||||
|     InvisibleSessionManager.setNewViewModel(viewModel = viewModel) | ||||
| 
 | ||||
|     Column( | ||||
|        modifier = Modifier.padding(10.dp) | ||||
|  | @ -75,6 +68,7 @@ fun SessionScreen( | |||
|                     mediaplayer.stop() | ||||
|                     mediaplayer.release() | ||||
|                     open(StudeezDestinations.HOME_SCREEN) | ||||
|                     InvisibleSessionManager.isSession = false | ||||
|                     // Vanaf hier ook naar report gaan als "end session" knop word ingedrukt | ||||
|                   }, | ||||
|                 modifier = Modifier | ||||
|  | @ -166,29 +160,21 @@ private fun Timer(viewModel: SessionViewModel = hiltViewModel(), mediaplayer: Me | |||
|     } | ||||
| } | ||||
| 
 | ||||
| fun test() { | ||||
|     start = Calendar.getInstance().time.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime() | ||||
| } | ||||
| 
 | ||||
| object SessionTest { | ||||
| object InvisibleSessionManager { | ||||
|     lateinit var viewModel: SessionViewModel | ||||
|     private var isSession: Boolean = false | ||||
|     var isSession: Boolean = false | ||||
| 
 | ||||
|     fun setNewViewModel(viewModel: SessionViewModel) { | ||||
|         isSession = true | ||||
|         this.viewModel = viewModel | ||||
|     } | ||||
| 
 | ||||
|     fun updateTimer() { | ||||
|     suspend fun updateTimer() { | ||||
|         if (isSession) { | ||||
|             val end = Calendar.getInstance().time.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime() | ||||
| 
 | ||||
|             val duration = Duration.between(start, end) | ||||
| 
 | ||||
|             val hours = duration.toHours() | ||||
|             val minutes = duration.toMinutes() % 60 | ||||
|             val seconds = duration.seconds % 60 | ||||
|             viewModel.getTimer().time.min((hours + minutes + seconds).toInt()) | ||||
|             while (true) { | ||||
|                 delay(1.seconds) | ||||
|                 viewModel.getTimer().tick() | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
		Reference in a new issue
	
	 Rune Dyselinck
						Rune Dyselinck