mirror of
https://github.com/tauri-apps/plugins-workspace.git
synced 2026-04-23 11:36:13 +02:00
fix(notification): scheduled notifications not working (#909)
* fix(notification): scheduled notifications not working * do not use toJSON since it doesnt work on isolation pattern * fmt
This commit is contained in:
committed by
GitHub
parent
61edbbec0a
commit
8dea78ac7d
@@ -80,8 +80,6 @@ class Notification {
|
||||
return null
|
||||
}
|
||||
|
||||
val isScheduled = schedule != null
|
||||
|
||||
companion object {
|
||||
fun buildNotificationPendingList(notifications: List<Notification>): List<PendingNotification> {
|
||||
val pendingNotifications = mutableListOf<PendingNotification>()
|
||||
|
||||
@@ -268,7 +268,7 @@ class NotificationPlugin(private val activity: Activity): Plugin(activity) {
|
||||
@PermissionCallback
|
||||
private fun permissionsCallback(invoke: Invoke) {
|
||||
val permissionsResultJSON = JSObject()
|
||||
permissionsResultJSON.put("display", getPermissionState())
|
||||
permissionsResultJSON.put("permissionState", getPermissionState())
|
||||
invoke.resolve(permissionsResultJSON)
|
||||
}
|
||||
|
||||
|
||||
@@ -5,9 +5,9 @@
|
||||
package app.tauri.notification
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.ClipData.Item
|
||||
import android.text.format.DateUtils
|
||||
import com.fasterxml.jackson.annotation.JsonFormat
|
||||
import com.fasterxml.jackson.annotation.JsonProperty
|
||||
import com.fasterxml.jackson.core.JsonGenerator
|
||||
import com.fasterxml.jackson.core.JsonParser
|
||||
import com.fasterxml.jackson.core.JsonProcessingException
|
||||
@@ -17,6 +17,7 @@ import com.fasterxml.jackson.databind.JsonNode
|
||||
import com.fasterxml.jackson.databind.SerializerProvider
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize
|
||||
import com.fasterxml.jackson.databind.deser.std.StdDeserializer
|
||||
import com.fasterxml.jackson.databind.ser.std.StdSerializer
|
||||
import java.io.IOException
|
||||
import java.text.SimpleDateFormat
|
||||
@@ -24,11 +25,25 @@ import java.util.Calendar
|
||||
import java.util.Date
|
||||
import java.util.TimeZone
|
||||
|
||||
|
||||
const val JS_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
|
||||
|
||||
enum class NotificationInterval {
|
||||
Year, Month, TwoWeeks, Week, Day, Hour, Minute, Second
|
||||
@JsonProperty("year")
|
||||
Year,
|
||||
@JsonProperty("month")
|
||||
Month,
|
||||
@JsonProperty("twoWeeks")
|
||||
TwoWeeks,
|
||||
@JsonProperty("week")
|
||||
Week,
|
||||
@JsonProperty("day")
|
||||
Day,
|
||||
@JsonProperty("hour")
|
||||
Hour,
|
||||
@JsonProperty("minute")
|
||||
Minute,
|
||||
@JsonProperty("second")
|
||||
Second
|
||||
}
|
||||
|
||||
fun getIntervalTime(interval: NotificationInterval, count: Int): Long {
|
||||
@@ -50,9 +65,24 @@ fun getIntervalTime(interval: NotificationInterval, count: Int): Long {
|
||||
@JsonSerialize(using = NotificationScheduleSerializer::class)
|
||||
sealed class NotificationSchedule {
|
||||
// At specific moment of time (with repeating option)
|
||||
class At(@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = JS_DATE_FORMAT) var date: Date, val repeating: Boolean = false, val allowWhileIdle: Boolean = false): NotificationSchedule()
|
||||
class Interval(val interval: DateMatch, val allowWhileIdle: Boolean = false): NotificationSchedule()
|
||||
class Every(val interval: NotificationInterval, val count: Int = 0, val allowWhileIdle: Boolean = false): NotificationSchedule()
|
||||
@JsonDeserialize
|
||||
class At: NotificationSchedule() {
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = JS_DATE_FORMAT)
|
||||
lateinit var date: Date
|
||||
var repeating: Boolean = false
|
||||
var allowWhileIdle: Boolean = false
|
||||
}
|
||||
@JsonDeserialize
|
||||
class Interval: NotificationSchedule() {
|
||||
lateinit var interval: DateMatch
|
||||
var allowWhileIdle: Boolean = false
|
||||
}
|
||||
@JsonDeserialize
|
||||
class Every: NotificationSchedule() {
|
||||
lateinit var interval: NotificationInterval
|
||||
var count: Int = 0
|
||||
var allowWhileIdle: Boolean = false
|
||||
}
|
||||
|
||||
fun isRemovable(): Boolean {
|
||||
return when (this) {
|
||||
|
||||
@@ -20,7 +20,7 @@ class NotificationStorage(private val context: Context, private val jsonMapper:
|
||||
val storage = getStorage(NOTIFICATION_STORE_ID)
|
||||
val editor = storage.edit()
|
||||
for (request in localNotifications) {
|
||||
if (request.isScheduled) {
|
||||
if (request.schedule != null) {
|
||||
val key: String = request.id.toString()
|
||||
editor.putString(key, request.sourceJson.toString())
|
||||
}
|
||||
|
||||
@@ -212,7 +212,7 @@ class TauriNotificationManager(
|
||||
createActionIntents(notification, mBuilder)
|
||||
// notificationId is a unique int for each notification that you must define
|
||||
val buildNotification = mBuilder.build()
|
||||
if (notification.isScheduled) {
|
||||
if (notification.schedule != null) {
|
||||
triggerScheduledNotification(buildNotification, notification)
|
||||
} else {
|
||||
notificationManager.notify(notification.id, buildNotification)
|
||||
@@ -473,7 +473,7 @@ class TimedNotificationPublisher : BroadcastReceiver() {
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
val notificationManager =
|
||||
context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
||||
val notification = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||
val notification = if (SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||
intent.getParcelableExtra(
|
||||
NOTIFICATION_KEY,
|
||||
android.app.Notification::class.java
|
||||
|
||||
Reference in New Issue
Block a user