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