Timer Zurba

 avatar
unknown
plain_text
19 days ago
7.3 kB
9
Indexable
package com.example.timerapp

import android.app.AlertDialog
import android.media.MediaPlayer
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.compose.BackHandler
import androidx.compose.animation.animateColorAsState
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            TimerApp()
        }
    }
}

@Composable
fun TimerApp() {
    val scope = rememberCoroutineScope()
    
    var timer1 by remember { mutableStateOf(0) }
    var timer2 by remember { mutableStateOf(0) }
    var iterations1 by remember { mutableStateOf(1) }
    var iterations2 by remember { mutableStateOf(1) }
    
    var isPerson1Active by remember { mutableStateOf(true) }
    var isRunning by remember { mutableStateOf(false) }
    var isButtonDisabled by remember { mutableStateOf(false) }

    val highlightColor1 by animateColorAsState(if (isPerson1Active) Color.White else Color.Transparent)
    val highlightColor2 by animateColorAsState(if (!isPerson1Active) Color.White else Color.Transparent)

    val mediaPlayer1 = remember { MediaPlayer() }  // Placeholder for person 1 sound
    val mediaPlayer2 = remember { MediaPlayer() }  // Placeholder for person 2 sound

    // Function to start timers
    fun startTimer1() {
        scope.launch {
            while (timer1 > 0 && isRunning) {
                delay(1000)
                timer1--
            }
            if (timer1 == 0) {
                mediaPlayer1.start()  // Play sound for person 1
                isPerson1Active = true
            }
        }
    }

    fun startTimer2() {
        scope.launch {
            while (timer2 > 0 && isRunning) {
                delay(1000)
                timer2--
            }
            if (timer2 == 0) {
                mediaPlayer2.start()  // Play sound for person 2
                isPerson1Active = false
            }
        }
    }

    fun onPlusPressed(isPerson1: Boolean) {
        if (isButtonDisabled) return
        isButtonDisabled = true

        scope.launch {
            delay(10000)  // Disable buttons for 10 seconds
            isButtonDisabled = false
        }

        if (isPerson1) {
            timer1 += 20
            iterations1++
            isPerson1Active = false
            startTimer1()
        } else {
            timer2 += 20
            iterations2++
            isPerson1Active = true
            startTimer2()
        }
    }

    fun onMinusPressed(isPerson1: Boolean) {
        if (isButtonDisabled) return
        isButtonDisabled = true

        scope.launch {
            delay(10000)  // Disable buttons for 10 seconds
            isButtonDisabled = false
        }

        if (isPerson1) {
            if (timer1 > 20) {
                timer1 -= 20
                iterations1 = maxOf(1, iterations1 - 1)
            }
        } else {
            if (timer2 > 20) {
                timer2 -= 20
                iterations2 = maxOf(1, iterations2 - 1)
            }
        }
    }

    fun formatTime(seconds: Int): String {
        val minutes = seconds / 60
        val remainingSeconds = seconds % 60
        return String.format("%02d:%02d", minutes, remainingSeconds)
    }

    Scaffold(
        topBar = {
            TopAppBar(title = { Text("Workout Timer") })
        }
    ) {
        Column(
            modifier = Modifier
                .fillMaxSize()
                .padding(16.dp),
            horizontalAlignment = Alignment.CenterHorizontally
        ) {
            // Person 1
            Box(
                modifier = Modifier
                    .border(BorderStroke(4.dp, highlightColor1), shape = CircleShape)
                    .padding(8.dp)
            ) {
                Column(horizontalAlignment = Alignment.CenterHorizontally) {
                    Image(
                        painter = painterResource(id = R.drawable.person_placeholder),
                        contentDescription = "Person 1",
                        modifier = Modifier.size(100.dp)
                    )
                    Text("Person 1")
                    Text("Time: ${formatTime(timer1)}")
                    Text("Iterations: $iterations1")
                    Row {
                        Button(
                            onClick = { onPlusPressed(true) },
                            enabled = !isButtonDisabled
                        ) { Text("+") }
                        Spacer(modifier = Modifier.width(8.dp))
                        Button(
                            onClick = { onMinusPressed(true) },
                            enabled = !isButtonDisabled
                        ) { Text("-") }
                    }
                }
            }

            Spacer(modifier = Modifier.height(20.dp))

            // Person 2
            Box(
                modifier = Modifier
                    .border(BorderStroke(4.dp, highlightColor2), shape = CircleShape)
                    .padding(8.dp)
            ) {
                Column(horizontalAlignment = Alignment.CenterHorizontally) {
                    Image(
                        painter = painterResource(id = R.drawable.person_placeholder),
                        contentDescription = "Person 2",
                        modifier = Modifier.size(100.dp)
                    )
                    Text("Person 2")
                    Text("Time: ${formatTime(timer2)}")
                    Text("Iterations: $iterations2")
                    Row {
                        Button(
                            onClick = { onPlusPressed(false) },
                            enabled = !isButtonDisabled
                        ) { Text("+") }
                        Spacer(modifier = Modifier.width(8.dp))
                        Button(
                            onClick = { onMinusPressed(false) },
                            enabled = !isButtonDisabled
                        ) { Text("-") }
                    }
                }
            }

            Spacer(modifier = Modifier.height(40.dp))

            Button(onClick = {
                isRunning = !isRunning
            }) {
                Text(if (isRunning) "Pause" else "Start")
            }
        }
    }

    // Handle back press
    BackHandler {
        AlertDialog.Builder(it)
            .setTitle("Exit App")
            .setMessage("Are you sure you want to exit?")
            .setPositiveButton("Yes") { _, _ -> (it as ComponentActivity).finish() }
            .setNegativeButton("No", null)
            .show()
    }
}
Editor is loading...
Leave a Comment