Timer Zurba
Anonymous
plain_text
01/29/2025 6:43 PM
9.5 KB
33
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