Skip to content
Snippets Groups Projects
Commit afa65512 authored by Kaan Kalinkarci's avatar Kaan Kalinkarci
Browse files

background operations -> workmanager -> timer continues to work after system restart

parent c4b39dd1
No related branches found
No related tags found
1 merge request!3background operations -> workmanager -> timer continues to work after system restart
...@@ -2,6 +2,9 @@ ...@@ -2,6 +2,9 @@
<project version="4"> <project version="4">
<component name="deploymentTargetSelector"> <component name="deploymentTargetSelector">
<selectionStates> <selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
<SelectionState runConfigName="MainActivity"> <SelectionState runConfigName="MainActivity">
<option name="selectionMode" value="DROPDOWN" /> <option name="selectionMode" value="DROPDOWN" />
</SelectionState> </SelectionState>
......
...@@ -72,4 +72,8 @@ dependencies { ...@@ -72,4 +72,8 @@ dependencies {
implementation("androidx.room:room-runtime:$room_version") implementation("androidx.room:room-runtime:$room_version")
implementation("androidx.room:room-ktx:$room_version") implementation("androidx.room:room-ktx:$room_version")
ksp("androidx.room:room-compiler:$room_version") ksp("androidx.room:room-compiler:$room_version")
// WORKMANAGER
val work_version = "2.8.0"
implementation("androidx.work:work-runtime-ktx:$work_version")
} }
\ No newline at end of file
...@@ -27,6 +27,7 @@ import androidx.compose.ui.platform.LocalContext ...@@ -27,6 +27,7 @@ import androidx.compose.ui.platform.LocalContext
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import com.example.myapplication.Room.MyDatabase import com.example.myapplication.Room.MyDatabase
import com.example.myapplication.background.createNotificationChannel
class MainActivity : ComponentActivity() { class MainActivity : ComponentActivity() {
companion object { companion object {
...@@ -38,6 +39,9 @@ class MainActivity : ComponentActivity() { ...@@ -38,6 +39,9 @@ class MainActivity : ComponentActivity() {
database = MyDatabase.getDatabase(this) database = MyDatabase.getDatabase(this)
// Timer Notification Channel
createNotificationChannel(this)
setContent { setContent {
MyApplicationTheme { MyApplicationTheme {
Surface( Surface(
......
...@@ -25,6 +25,7 @@ import com.example.myapplication.Room.Task ...@@ -25,6 +25,7 @@ import com.example.myapplication.Room.Task
import com.example.myapplication.Room.TaskViewModel import com.example.myapplication.Room.TaskViewModel
import com.example.myapplication.UI_Components.Dialogs.MyAlertDialog import com.example.myapplication.UI_Components.Dialogs.MyAlertDialog
import com.example.myapplication.UI_Components.Title import com.example.myapplication.UI_Components.Title
import com.example.myapplication.background.startPomodoro
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
@Composable @Composable
...@@ -130,8 +131,9 @@ fun TimerScreen(todayTasks: List<Task>, settingsTimer: SettingsTimer, notificati ...@@ -130,8 +131,9 @@ fun TimerScreen(todayTasks: List<Task>, settingsTimer: SettingsTimer, notificati
isRunning = !isRunning isRunning = !isRunning
pauseText = if (pauseText == "Pause") "Start" else "Pause" pauseText = if (pauseText == "Pause") "Start" else "Pause"
if(mediaPlayer != null) if(mediaPlayer != null) if(isRunning) mediaPlayer?.start() else mediaPlayer?.pause()
if(isRunning) mediaPlayer?.start() else mediaPlayer?.pause()
if (pauseText=="Pause") startPomodoro(context)
}, },
modifier = Modifier.weight(1f), modifier = Modifier.weight(1f),
colors = ButtonDefaults.buttonColors(containerColor = Color(0xFF7F56D9)) colors = ButtonDefaults.buttonColors(containerColor = Color(0xFF7F56D9))
......
package com.example.myapplication.background
import android.app.NotificationManager
import android.content.Context
import androidx.core.app.NotificationCompat
import androidx.work.Worker
import androidx.work.WorkerParameters
import com.example.myapplication.R
class PomodoroWorker(context: Context, workerParams: WorkerParameters) :
Worker(context, workerParams) {
override fun doWork(): Result {
// Benachrichtigung start
showNotification("Pomodoro beginnt!", "Let's GO!")
// Timer-Logik oder andere Hintergrundaufgaben
val pomodoroDuration = 25 * 60 * 1000L // 25 Minuten in Millisekunden
Thread.sleep(pomodoroDuration)
// Benachrichtigung anzeigen
showNotification("Pomodoro beendet!", "Zeit für eine Pause.")
return Result.success()
}
private fun showNotification(title: String, message: String) {
val notificationManager = applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val notificationBuilder = NotificationCompat.Builder(applicationContext, "POMODORO_CHANNEL")
.setContentTitle(title)
.setContentText(message)
.setSmallIcon(R.drawable.ic_notification)
.setPriority(NotificationCompat.PRIORITY_HIGH)
notificationManager.notify(1, notificationBuilder.build())
}
}
package com.example.myapplication.background
import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.os.Build
fun createNotificationChannel(context: Context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channelId = "POMODORO_CHANNEL"
val channelName = "Pomodoro Notifications"
val channelDescription = "Channel for Pomodoro notifications"
val notificationChannel = NotificationChannel(
channelId,
channelName,
NotificationManager.IMPORTANCE_HIGH
).apply {
description = channelDescription
}
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(notificationChannel)
}
}
\ No newline at end of file
package com.example.myapplication.background
import android.content.Context
import androidx.work.OneTimeWorkRequest
import androidx.work.WorkManager
fun startPomodoro(context: Context) {
val workRequest = OneTimeWorkRequest.Builder(PomodoroWorker::class.java)
.build()
WorkManager.getInstance(context).enqueue(workRequest)
}
\ No newline at end of file
app/src/main/res/drawable/ic_notification.png

106 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment