通知更新

This commit is contained in:
2025-10-20 22:56:43 +08:00
parent 1ac177be8b
commit 9082f15b63
6 changed files with 29 additions and 52 deletions

View File

@@ -3,7 +3,7 @@ package com.taskttl.core.alarm
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import com.taskttl.core.notification.NotificationManager
import com.taskttl.core.notification.AppNotificationManager
import com.taskttl.core.notification.NotificationPayload
import com.taskttl.core.notification.NotificationRepeatType
import kotlinx.coroutines.CoroutineScope
@@ -20,7 +20,7 @@ class AlarmReceiver : BroadcastReceiver() {
// 使用协程调用统一通知方法
CoroutineScope(Dispatchers.Main).launch {
NotificationManager.scheduleNotification(
AppNotificationManager.scheduleNotification(
NotificationPayload(
id = id,
title = title,
@@ -30,38 +30,5 @@ class AlarmReceiver : BroadcastReceiver() {
)
)
}
// val id = intent.getStringExtra("id") ?: return
// val title = intent.getStringExtra("title") ?: "TaskTTL"
// val message = intent.getStringExtra("message") ?: ""
//
// val channelId = "taskttl_channel"
//
// // 确保通道存在
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// val nm = context.getSystemService(Context.NOTIFICATION_SERVICE) as android.app.NotificationManager
// if (nm.getNotificationChannel(channelId) == null) {
// val channel = android.app.NotificationChannel(
// channelId,
// "TaskTTL Notifications",
// android.app.NotificationManager.IMPORTANCE_HIGH
// )
// channel.description = "TaskTTL 提醒通知"
// nm.createNotificationChannel(channel)
// }
// }
//
// // 构建通知
// val builder = NotificationCompat.Builder(context, channelId)
// .setContentTitle(title)
// .setContentText(message)
// .setSmallIcon(R.mipmap.ic_launcher)
// .setAutoCancel(true)
// .setPriority(NotificationCompat.PRIORITY_HIGH)
//
// val nm = context.getSystemService(Context.NOTIFICATION_SERVICE) as android.app.NotificationManager
// nm.notify(id.hashCode(), builder.build())
}
}

View File

@@ -3,6 +3,7 @@ package com.taskttl.core.notification
import android.Manifest
import android.app.Activity
import android.app.AlarmManager
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
@@ -12,7 +13,11 @@ import android.os.Build
import androidx.core.app.ActivityCompat
import androidx.core.app.NotificationCompat
import androidx.core.content.ContextCompat
import androidx.work.*
import androidx.work.ExistingPeriodicWorkPolicy
import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkManager
import androidx.work.workDataOf
import com.taskttl.MainApplication
import com.taskttl.R
import com.taskttl.core.alarm.AlarmReceiver
@@ -20,7 +25,7 @@ import com.taskttl.core.utils.LogUtils
import java.util.concurrent.TimeUnit
import kotlin.math.max
actual object NotificationManager {
actual object AppNotificationManager {
private val channelId = "taskttl_channel"
@@ -35,13 +40,14 @@ actual object NotificationManager {
private fun setupNotificationChannel() {
val activity = MainApplication.currentActivity() ?: return
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val nm = activity.getSystemService(Context.NOTIFICATION_SERVICE) as android.app.NotificationManager
val nm =
activity.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if (nm.getNotificationChannel(channelId) == null) {
val channel = android.app.NotificationChannel(
channelId,
"TaskTTL Notifications",
android.app.NotificationManager.IMPORTANCE_HIGH
).apply { description = "TaskTTL 提醒通知" }
NotificationManager.IMPORTANCE_HIGH
)
nm.createNotificationChannel(channel)
LogUtils.d("DevTTL_NotificationTest", "Notification channel created")
}
@@ -137,10 +143,11 @@ actual object NotificationManager {
else -> 24 * 60 * 60 * 1000L
}
val request = PeriodicWorkRequestBuilder<NotificationWorker>(interval, TimeUnit.MILLISECONDS)
.setInputData(data)
.addTag(payload.id)
.build()
val request =
PeriodicWorkRequestBuilder<NotificationWorker>(interval, TimeUnit.MILLISECONDS)
.setInputData(data)
.addTag(payload.id)
.build()
workManager.enqueueUniquePeriodicWork(
payload.id,
@@ -153,7 +160,8 @@ actual object NotificationManager {
/** 立即显示通知 */
private fun showImmediateNotification(payload: NotificationPayload) {
val activity = getActivity()
val nm = activity.getSystemService(Context.NOTIFICATION_SERVICE) as android.app.NotificationManager
val nm =
activity.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val notification = NotificationCompat.Builder(activity, channelId)
.setContentTitle(payload.title)
@@ -184,14 +192,16 @@ actual object NotificationManager {
)
alarmManager.cancel(pendingIntent)
val nm = activity.getSystemService(Context.NOTIFICATION_SERVICE) as android.app.NotificationManager
val nm =
activity.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
nm.cancel(id.hashCode())
}
actual suspend fun cancelAll() {
val activity = getActivity()
WorkManager.getInstance(activity).cancelAllWork()
val nm = activity.getSystemService(Context.NOTIFICATION_SERVICE) as android.app.NotificationManager
val nm =
activity.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
nm.cancelAll()
}
}

View File

@@ -1,5 +1,6 @@
package com.taskttl.core.notification
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
@@ -48,7 +49,7 @@ class NotificationWorker(
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
.setPriority(NotificationCompat.PRIORITY_HIGH)
val nm = context.getSystemService(Context.NOTIFICATION_SERVICE) as android.app.NotificationManager
val nm = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
nm.notify(id.hashCode(), builder.build())
}
}

View File

@@ -4,9 +4,9 @@ package com.taskttl.core.notification
* 通知管理器
* @author admin
* @date 2025/10/16
* @constructor 创建[NotificationManager]
* @constructor 创建[AppNotificationManager]
*/
expect object NotificationManager {
expect object AppNotificationManager {
/**
* 日程通知
* @param [payload] 有效载荷

View File

@@ -1,6 +1,5 @@
package com.taskttl.data.di
import com.taskttl.core.notification.NotificationManager
import com.taskttl.data.repository.OnboardingRepository
import com.taskttl.data.repository.SettingsRepository
import com.taskttl.data.repository.impl.OnboardingRepositoryImpl

View File

@@ -2,7 +2,7 @@ package com.taskttl.core.notification
import platform.UserNotifications.*
actual class NotificationManager {
actual object AppNotificationManager {
actual suspend fun scheduleNotification(payload: NotificationPayload) {
val content = UNMutableNotificationContent().apply {
title = payload.title