localdatetime version
This commit is contained in:
		
							parent
							
								
									dc43b26dc0
								
							
						
					
					
						commit
						e20e972b88
					
				
					 5 changed files with 64 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
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,6 +12,8 @@ import androidx.compose.runtime.Composable
 | 
			
		|||
import androidx.compose.ui.Modifier
 | 
			
		||||
import androidx.compose.ui.tooling.preview.Preview
 | 
			
		||||
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.ui.theme.StudeezTheme
 | 
			
		||||
import dagger.hilt.android.AndroidEntryPoint
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -30,6 +33,16 @@ class MainActivity : ComponentActivity() {
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onStop() {
 | 
			
		||||
        test()
 | 
			
		||||
        super.onStop()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onStart() {
 | 
			
		||||
        SessionTest.updateTimer()
 | 
			
		||||
        super.onStart()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@Composable
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
package be.ugent.sel.studeez.data.local.models.timer_functional
 | 
			
		||||
 | 
			
		||||
abstract class FunctionalTimer(initialValue: Int) {
 | 
			
		||||
    val time: Time = Time(initialValue)
 | 
			
		||||
    var time: Time = Time(initialValue)
 | 
			
		||||
    var view: StudyState = StudyState.FOCUS
 | 
			
		||||
 | 
			
		||||
    fun getHoursMinutesSeconds(): HoursMinutesSeconds {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,10 @@ class Time(initialTime: Int) {
 | 
			
		|||
 | 
			
		||||
    var time = initialTime
 | 
			
		||||
 | 
			
		||||
    fun min(i: Int) {
 | 
			
		||||
        time -= i
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun minOne() {
 | 
			
		||||
        time--
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@ 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
 | 
			
		||||
| 
						 | 
				
			
			@ -31,10 +32,20 @@ import androidx.hilt.navigation.compose.hiltViewModel
 | 
			
		|||
import be.ugent.sel.studeez.R
 | 
			
		||||
import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalPomodoroTimer
 | 
			
		||||
import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer.StudyState
 | 
			
		||||
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,
 | 
			
		||||
| 
						 | 
				
			
			@ -46,6 +57,8 @@ fun SessionScreen(
 | 
			
		|||
    val mediaplayer = MediaPlayer.create(context, uri)
 | 
			
		||||
    mediaplayer.isLooping = false
 | 
			
		||||
 | 
			
		||||
    SessionTest.setNewViewModel(viewModel = viewModel)
 | 
			
		||||
 | 
			
		||||
    Column(
 | 
			
		||||
       modifier = Modifier.padding(10.dp)
 | 
			
		||||
   ) {
 | 
			
		||||
| 
						 | 
				
			
			@ -81,6 +94,11 @@ fun SessionScreen(
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
private operator fun Time.minus(time: Time): Time {
 | 
			
		||||
    return Time(this.time - time.time)
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@Composable
 | 
			
		||||
private fun Timer(viewModel: SessionViewModel = hiltViewModel(), mediaplayer: MediaPlayer) {
 | 
			
		||||
    var tikker by remember { mutableStateOf(false) }
 | 
			
		||||
| 
						 | 
				
			
			@ -146,6 +164,33 @@ private fun Timer(viewModel: SessionViewModel = hiltViewModel(), mediaplayer: Me
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fun test() {
 | 
			
		||||
    start = Calendar.getInstance().time.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
object SessionTest {
 | 
			
		||||
    lateinit var viewModel: SessionViewModel
 | 
			
		||||
    private var isSession: Boolean = false
 | 
			
		||||
 | 
			
		||||
    fun setNewViewModel(viewModel: SessionViewModel) {
 | 
			
		||||
        isSession = true
 | 
			
		||||
        this.viewModel = viewModel
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    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())
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Reference in a new issue