diff --git a/src/android/org/kde/knotifications/KNotification.java b/src/android/org/kde/knotifications/KNotification.java --- a/src/android/org/kde/knotifications/KNotification.java +++ b/src/android/org/kde/knotifications/KNotification.java @@ -37,6 +37,13 @@ public String channelName; public String channelDescription; public String group; + public int urgency; + + // see knotification.h + public static final int LowUrgency = 10; + public static final int NormalUrgency = 50; + public static final int HighUrgency = 70; + public static final int CriticalUrgency = 90; public void setIconFromData(byte[] data, int length) { diff --git a/src/android/org/kde/knotifications/NotifyByAndroid.java b/src/android/org/kde/knotifications/NotifyByAndroid.java --- a/src/android/org/kde/knotifications/NotifyByAndroid.java +++ b/src/android/org/kde/knotifications/NotifyByAndroid.java @@ -73,6 +73,23 @@ if (Build.VERSION.SDK_INT >= 26) { NotificationChannel channel = new NotificationChannel(notification.channelId, notification.channelName, NotificationManager.IMPORTANCE_DEFAULT); channel.setDescription(notification.channelDescription); + + switch (notification.urgency) { + case KNotification.CriticalUrgency: + channel.setImportance(NotificationManager.IMPORTANCE_HIGH); + break; + case KNotification.NormalUrgency: + channel.setImportance(NotificationManager.IMPORTANCE_LOW); + break; + case KNotification.LowUrgency: + channel.setImportance(NotificationManager.IMPORTANCE_MIN); + break; + case KNotification.HighUrgency: + default: + channel.setImportance(NotificationManager.IMPORTANCE_DEFAULT); + break; + } + m_notificationManager.createNotificationChannel(channel); } } @@ -101,6 +118,25 @@ builder.setGroup(notification.group); } + // legacy priority handling for versions without NotificationChannel support + if (Build.VERSION.SDK_INT < 26) { + switch (notification.urgency) { + case KNotification.CriticalUrgency: + builder.setPriority(Notification.PRIORITY_HIGH); + break; + case KNotification.NormalUrgency: + builder.setPriority(Notification.PRIORITY_LOW); + break; + case KNotification.LowUrgency: + builder.setPriority(Notification.PRIORITY_MIN); + break; + case KNotification.HighUrgency: + default: + builder.setPriority(Notification.PRIORITY_DEFAULT); + break; + } + } + // taping the notification shows the app Intent intent = new Intent(m_ctx.getPackageName() + NOTIFICATION_OPENED); intent.putExtra(NOTIFICATION_ID_EXTRA, notification.id); diff --git a/src/notifybyandroid.cpp b/src/notifybyandroid.cpp --- a/src/notifybyandroid.cpp +++ b/src/notifybyandroid.cpp @@ -105,6 +105,7 @@ n.setField("id", notification->id()); n.setField("text", QAndroidJniObject::fromString(stripRichText(notification->text())).object()); n.setField("title", QAndroidJniObject::fromString(stripRichText(notification->title())).object()); + n.setField("urgency", (jint)(notification->urgency() == KNotification::DefaultUrgency ? KNotification::HighUrgency : notification->urgency())); n.setField("channelId", QAndroidJniObject::fromString(notification->eventId()).object()); n.setField("channelName", QAndroidJniObject::fromString(config->readEntry(QLatin1String("Name"))).object());