pull/340/head
Lucas Nogueira 2 years ago
parent ecdeb35cc3
commit fea1d84682
No known key found for this signature in database
GPG Key ID: 7C32FCA95C8C95D7

@ -16,7 +16,7 @@ class Notification {
var title: String? = null
var body: String? = null
var largeBody: String? = null
var summaryText: String? = null
var summary: String? = null
var id: Int? = null
private var sound: String? = null
private var smallIcon: String? = null
@ -24,7 +24,7 @@ class Notification {
var iconColor: String? = null
var actionTypeId: String? = null
var group: String? = null
var inboxList: List<String>? = null
var inboxLines: List<String>? = null
var isGroupSummary = false
var isOngoing = false
var isAutoCancel = false
@ -145,7 +145,7 @@ class Notification {
if (if (group != null) group != that.group else that.group != null) return false
if (if (extra != null) extra != that.extra else that.extra != null) return false
if (if (attachments != null) attachments != that.attachments else that.attachments != null) return false
if (if (inboxList != null) inboxList != that.inboxList else that.inboxList != null) return false
if (if (inboxLines != null) inboxLines != that.inboxLines else that.inboxLines != null) return false
if (isGroupSummary != that.isGroupSummary) return false
if (isOngoing != that.isOngoing) return false
if (isAutoCancel != that.isAutoCancel) return false
@ -226,12 +226,12 @@ class Notification {
notification.id = jsonObject.getInteger("id")
notification.body = jsonObject.getString("body")
notification.largeBody = jsonObject.getString("largeBody")
notification.summaryText = jsonObject.getString("summaryText")
notification.summary = jsonObject.getString("summary")
notification.actionTypeId = jsonObject.getString("actionTypeId")
notification.group = jsonObject.getString("group")
notification.setSound(jsonObject.getString("sound"))
notification.title = jsonObject.getString("title")
notification.setSmallIcon(jsonObject.getString("smallIcon"))
notification.setSmallIcon(jsonObject.getString("icon"))
notification.setLargeIcon(jsonObject.getString("largeIcon"))
notification.iconColor = jsonObject.getString("iconColor")
notification.attachments = NotificationAttachment.getAttachments(jsonObject)
@ -245,12 +245,12 @@ class Notification {
notification.isOngoing = jsonObject.getBoolean("ongoing", false)
notification.isAutoCancel = jsonObject.getBoolean("autoCancel", true)
try {
val inboxList = jsonObject.getJSONArray("inboxList")
val inboxLines = jsonObject.getJSONArray("inboxLines")
val inboxStringList: MutableList<String> = ArrayList()
for (i in 0 until inboxList.length()) {
inboxStringList.add(inboxList.getString(i))
for (i in 0 until inboxLines.length()) {
inboxStringList.add(inboxLines.getString(i))
}
notification.inboxList = inboxStringList
notification.inboxLines = inboxStringList
} catch (_: Exception) {
}
return notification

@ -172,16 +172,15 @@ class TauriNotificationManager(
mBuilder.setStyle(
NotificationCompat.BigTextStyle()
.bigText(notification.largeBody)
.setSummaryText(notification.summaryText)
.setSummaryText(notification.summary)
)
}
if (notification.inboxList != null) {
} else if (notification.inboxLines != null) {
val inboxStyle = NotificationCompat.InboxStyle()
for (line in notification.inboxList ?: listOf()) {
for (line in notification.inboxLines ?: listOf()) {
inboxStyle.addLine(line)
}
inboxStyle.setBigContentTitle(notification.title)
inboxStyle.setSummaryText(notification.summaryText)
inboxStyle.setSummaryText(notification.summary)
mBuilder.setStyle(inboxStyle)
}
val sound = notification.getSound(context, getDefaultSound(context))
@ -202,7 +201,7 @@ class TauriNotificationManager(
if (group != null) {
mBuilder.setGroup(group)
if (notification.isGroupSummary) {
mBuilder.setSubText(notification.summaryText)
mBuilder.setSubText(notification.summary)
}
}
mBuilder.setVisibility(NotificationCompat.VISIBILITY_PRIVATE)
@ -455,7 +454,7 @@ class TauriNotificationManager(
private fun getDefaultSmallIcon(context: Context): Int {
if (defaultSmallIconID != AssetUtils.RESOURCE_ID_ZERO_VALUE) return defaultSmallIconID
var resId: Int = AssetUtils.RESOURCE_ID_ZERO_VALUE
val smallIconConfigResourceName = AssetUtils.getResourceBaseName(config.getString("smallIcon"))
val smallIconConfigResourceName = AssetUtils.getResourceBaseName(config.getString("icon"))
if (smallIconConfigResourceName != null) {
resId = AssetUtils.getResourceID(context, smallIconConfigResourceName, "drawable")
}

@ -32,12 +32,179 @@ import { invoke } from '@tauri-apps/api/tauri'
* @since 1.0.0
*/
interface Options {
/** Notification title. */
/**
* The notification identifier to reference this object later.
*
* On Android, it is a 32 bit integer.
*/
id?: number
/**
* Identifier of the {@link Channel} that deliveres this notification.
*
* If the channel does not exist, the notification won't fire.
* Make sure the channel exists with {@link listChannels} and {@link createChannel}.
*/
channelId?: string
/**
* Notification title.
*/
title: string
/** Optional notification body. */
/**
* Optional notification body.
* */
body?: string
/** Optional notification icon. */
/**
* Schedule this notification to fire on a later time or a fixed interval.
*/
schedule?: Schedule
/**
* Multiline text.
* Changes the notification style to big text.
* Cannot be used with `inboxLines`.
*/
largeBody?: string
/**
* Detail text for the notification with `largeBody`, `inboxLines` or `groupSummary`.
*/
summary?: string
/**
* Defines an action type for this notification.
*/
actionTypeId?: string
/**
* Identifier used to group multiple notifications on Android.
*/
group?: string
/**
* Instructs the system that this notification is the summary of a group on Android.
*/
groupSummary?: boolean
/**
* The sound resource name. Only available on mobile.
*/
sound?: string
/**
* List of lines to add to the notification.
* Changes the notification style to inbox.
* Cannot be used with `largeBody`.
*
* Only supports up to 5 lines.
*/
inboxLines?: string[]
/**
* Notification icon.
*
* On Android the icon must be placed in the app's `res/drawable` folder.
*/
icon?: string
/**
* Notification large icon (Android).
*
* The icon must be placed in the app's `res/drawable` folder.
*/
largeIcon?: string
/**
* Icon color on Android.
*/
iconColor?: string
/**
* Notification attachments.
*/
attachments?: Attachment[]
/**
* Extra payload to store in the notification.
*/
extra?: { [key: string]: any }
/**
* If true, the notification cannot be dismissed by the user on Android.
*
* An application service must manage the dismissal of the notification.
* It is typically used to indicate a background task that is pending (e.g. a file download)
* or the user is engaged with (e.g. playing music).
*/
ongoing?: boolean
/**
* Automatically cancel the notification when the user clicks on it.
*/
autoCancel?: boolean
}
type ScheduleInterval = {
year?: number
month?: number
day?: number
/**
* 1 - Sunday
* 2 - Monday
* 3 - Tuesday
* 4 - Wednesday
* 5 - Thursday
* 6 - Friday
* 7 - Saturday
*/
weekday?: number
hour?: number
minute?: number
second?: number
}
enum ScheduleEvery {
Year = 'Year',
Month = 'Month',
TwoWeeks = 'TwoWeeks',
Week = 'Week',
Day = 'Day',
Hour = 'Hour',
Minute = 'Minute',
Second = 'Second'
}
type ScheduleData = {
kind: 'at',
data: {
date: Date
repeating: boolean
}
} | {
kind: 'interval',
data: ScheduleInterval
} | {
kind: 'every',
data: {
interval: ScheduleEvery
}
}
class Schedule {
kind: string
data: unknown
private constructor(schedule: ScheduleData) {
this.kind = schedule.kind
this.data = schedule.data
}
static at(date: Date, repeating = false) {
return new Schedule({ kind: 'at', data: { date, repeating }})
}
static interval(interval: ScheduleInterval) {
return new Schedule({ kind: 'interval', data: interval })
}
static every(kind: ScheduleEvery) {
return new Schedule({ kind: 'every', data: { interval: kind }})
}
}
/**
* Attachment of a notification.
*/
interface Attachment {
/** Attachment identifier. */
id: string
/** Attachment URL. Accepts the `asset` and `file` protocols. */
url: string
}
/** Possible permission values. */
@ -108,6 +275,6 @@ function sendNotification(options: Options | string): void {
}
}
export type { Options, Permission }
export type { Attachment, Options, Permission }
export { sendNotification, requestPermission, isPermissionGranted }

Loading…
Cancel
Save