通知更新

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

View File

@@ -1,5 +1,6 @@
package com.taskttl.core.notification package com.taskttl.core.notification
import android.app.NotificationManager
import android.app.PendingIntent import android.app.PendingIntent
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
@@ -48,7 +49,7 @@ class NotificationWorker(
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
.setPriority(NotificationCompat.PRIORITY_HIGH) .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()) nm.notify(id.hashCode(), builder.build())
} }
} }

View File

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

View File

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

View File

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