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