timer can run when invisible (but no sound)

This commit is contained in:
Rune Dyselinck 2023-04-24 21:35:48 +02:00
parent e20e972b88
commit ea4e7a4790
3 changed files with 21 additions and 32 deletions

View file

@ -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()
} }
} }

View file

@ -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--
} }

View file

@ -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())
} }
} }