diff --git a/app/src/main/java/th/koeln/pomotik/MainActivity.kt b/app/src/main/java/th/koeln/pomotik/MainActivity.kt index e85c9127cd02ee1a379e4b0540ab20e5b6f6c1eb..5d9985f9e4679b764f13c0a1af353edd9c954f75 100644 --- a/app/src/main/java/th/koeln/pomotik/MainActivity.kt +++ b/app/src/main/java/th/koeln/pomotik/MainActivity.kt @@ -9,6 +9,7 @@ import androidx.compose.runtime.Composable import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController +import th.koeln.pomotik.screens.help.HelpScreenComponent import th.koeln.pomotik.screens.start.StartBildschirm import th.koeln.pomotik.screens.timer.TimerScreenComponent import th.koeln.pomotik.screens.todo.TodoListScreen @@ -47,6 +48,7 @@ class MainActivity : ComponentActivity() { composable("startseite") { StartBildschirm(navController) } composable("timer-activity") { TimerScreenComponent(navController) } composable("todo-list") { TodoListScreen(navController) } + composable("help") { HelpScreenComponent(navController) } } } } diff --git a/app/src/main/java/th/koeln/pomotik/screens/help/Help.kt b/app/src/main/java/th/koeln/pomotik/screens/help/Help.kt new file mode 100644 index 0000000000000000000000000000000000000000..dbe1b8f8875ae7095be0116f28bb3e191f9bd663 --- /dev/null +++ b/app/src/main/java/th/koeln/pomotik/screens/help/Help.kt @@ -0,0 +1,114 @@ +package th.koeln.pomotik.screens.help + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.navigation.NavHostController + +@ExperimentalMaterial3Api +@Composable +fun HelpScreenComponent(navHostController: NavHostController) { + Scaffold( + topBar = { + TopAppBar( + title = { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.Center + ) { + Text( + text = "PomoTik Hilfe", + color = Color.White, + fontWeight = FontWeight.Bold + ) + } + }, + colors = androidx.compose.material3.TopAppBarDefaults.topAppBarColors( + containerColor = Color(0xFF4A4AFC) + ) + ) + }, + content = { innerPadding -> + Modifier.padding(innerPadding) + Column( + modifier = Modifier + .fillMaxSize() + .background( + Brush.verticalGradient( + colors = listOf( + Color(0xFF7DABD8), + Color(0xFFD2BBE8) + ) + ) + ) + .padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Top + ) { + Spacer(modifier = Modifier.height(80.dp)) + + Text( + text = "Willkommen zur PomoTik Hilfe", + fontSize = 28.sp, + fontWeight = FontWeight.Bold, + color = Color.White, + textAlign = TextAlign.Center + ) + + Spacer(modifier = Modifier.height(20.dp)) + + Text( + text = "In dieser App kannst du mit der Pomodoro-Technik arbeiten. \n\n" + + "- Drücke 'Start', um einen Timer zu starten.\n" + + "- Nutze die 'Pause' Taste, um den Timer zu pausieren.\n" + + "- Setze den Timer zurück, um von vorne zu beginnen.\n\n" + + "Vergiss nicht, dass du auch Todo-Listen erstellen kannst, um deine Aufgaben zu verwalten!", + fontSize = 18.sp, + color = Color.White, + textAlign = TextAlign.Left + ) + + Spacer(modifier = Modifier.height(40.dp)) + + Button( + onClick = { + // Navigiere zurück zum Timer + navHostController.popBackStack() + }, + modifier = Modifier + .fillMaxWidth(0.7f) + .height(50.dp), + colors = ButtonDefaults.buttonColors(containerColor = Color(0xFF4A4AFC)) + ) { + Text( + text = "Zurück zum Timer", + color = Color.White, + fontWeight = FontWeight.Bold, + fontSize = 18.sp + ) + } + } + } + ) +} diff --git a/app/src/main/java/th/koeln/pomotik/screens/timer/TimerScreenActivity.kt b/app/src/main/java/th/koeln/pomotik/screens/timer/TimerScreenComponent.kt similarity index 96% rename from app/src/main/java/th/koeln/pomotik/screens/timer/TimerScreenActivity.kt rename to app/src/main/java/th/koeln/pomotik/screens/timer/TimerScreenComponent.kt index ce3aebfb36d2e842e7aa1199f79e628952b34414..772f80b990d6c5cda0d2b1a56432df0a9806ed94 100644 --- a/app/src/main/java/th/koeln/pomotik/screens/timer/TimerScreenActivity.kt +++ b/app/src/main/java/th/koeln/pomotik/screens/timer/TimerScreenComponent.kt @@ -3,6 +3,7 @@ package th.koeln.pomotik.screens.timer import NotificationService import android.app.Activity import android.content.pm.PackageManager +import android.media.MediaPlayer import android.os.Build import android.widget.NumberPicker import androidx.compose.foundation.background @@ -48,6 +49,7 @@ import androidx.core.app.ActivityCompat import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.NavHostController import kotlinx.coroutines.delay +import th.koeln.pomotik.R @ExperimentalMaterial3Api @@ -61,6 +63,10 @@ fun TimerScreenComponent(navHostController: NavHostController) { val notificationService = NotificationService(context) val timerViewModel: TimerViewModel = viewModel() + // MediaPlayer für den Alarmton + val mediaPlayer = remember { + MediaPlayer.create(context, R.raw.alarm_4) // Audio aus res/raw + } LaunchedEffect(isRunning) { @@ -72,6 +78,11 @@ fun TimerScreenComponent(navHostController: NavHostController) { notificationService.showTimerNotification { formatTime(timeLeft) } + + if (timeLeft == 0) { + isRunning = false + mediaPlayer.start() // Alarmton abspielen + } } } diff --git a/app/src/main/java/th/koeln/pomotik/screens/todo/TodoList.kt b/app/src/main/java/th/koeln/pomotik/screens/todo/TodoList.kt index 59cbea2c773d4e8e4af3cf3fd39187b36fee08cd..0bbefd4b10d5c27730dfb29ad39c9e0553bb60f2 100644 --- a/app/src/main/java/th/koeln/pomotik/screens/todo/TodoList.kt +++ b/app/src/main/java/th/koeln/pomotik/screens/todo/TodoList.kt @@ -32,6 +32,7 @@ import th.koeln.pomotik.screens.db.TaskViewModel import java.text.SimpleDateFormat import java.util.Date import androidx.compose.runtime.livedata.observeAsState +import androidx.compose.ui.text.style.TextDecoration @Composable @@ -50,7 +51,7 @@ fun TaskItem( .padding(6.dp), shape = RoundedCornerShape(16.dp), colors = CardDefaults.cardColors( - containerColor = if (item.isCompleted) Color.Gray else Color.White + containerColor = Color.White ) ) { Row( @@ -65,7 +66,8 @@ fun TaskItem( text = item.name, fontSize = 18.sp, fontWeight = FontWeight.Bold, - color = if (item.isCompleted) Color.Gray else Color.Black + color = if (item.isCompleted) Color.Gray else Color.Black, + textDecoration = if (item.isCompleted) TextDecoration.LineThrough else TextDecoration.None // Text wird durchgestrichen, wenn abgeschlossen ) Text( text = dateFormat.format(item.date), @@ -74,6 +76,7 @@ fun TaskItem( ) } + // Checkbox zum Markieren des Tasks als abgeschlossen Checkbox( checked = item.isCompleted, @@ -87,6 +90,7 @@ fun TaskItem( // Button zum Entfernen des Tasks IconButton(onClick = { onRemove(item) }) { Icon( + tint = Color(0xFFF44336), imageVector = Icons.Default.Delete, contentDescription = "Remove Task" ) diff --git a/app/src/main/res/raw/alarm_4.mp3 b/app/src/main/res/raw/alarm_4.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..2d6053135b679fc7dd9d0a583056e322efa4a9e6 Binary files /dev/null and b/app/src/main/res/raw/alarm_4.mp3 differ