diff --git a/app/src/main/java/com/github/gotify/NotificationSupport.java b/app/src/main/java/com/github/gotify/NotificationSupport.java index 9037cad7..fdd34df2 100644 --- a/app/src/main/java/com/github/gotify/NotificationSupport.java +++ b/app/src/main/java/com/github/gotify/NotificationSupport.java @@ -14,7 +14,11 @@ public static final class Group { public static final class Channel { public static final String FOREGROUND = "gotify_foreground"; - public static final String MESSAGES = "gotify_messages"; + public static final String MESSAGES_IMPORTANCE_MIN = "gotify_messages_min_importance"; + public static final String MESSAGES_IMPORTANCE_LOW = "gotify_messages_low_importance"; + public static final String MESSAGES_IMPORTANCE_DEFAULT = + "gotify_messages_default_importance"; + public static final String MESSAGES_IMPORTANCE_HIGH = "gotify_messages_high_importance"; } public static final class ID { @@ -32,19 +36,71 @@ public static void createChannels(NotificationManager notificationManager) { Channel.FOREGROUND, "Gotify foreground notification", NotificationManager.IMPORTANCE_LOW); - // High importance for message notifications so that they are shown as heads-up - // notifications and sorted towards the top of the notification shade - NotificationChannel messages = + + NotificationChannel messagesImportanceMin = + new NotificationChannel( + Channel.MESSAGES_IMPORTANCE_MIN, + "Min priority messages (<1)", + NotificationManager.IMPORTANCE_MIN); + + NotificationChannel messagesImportanceLow = + new NotificationChannel( + Channel.MESSAGES_IMPORTANCE_LOW, + "Low priority messages (1-3)", + NotificationManager.IMPORTANCE_LOW); + + NotificationChannel messagesImportanceDefault = new NotificationChannel( - Channel.MESSAGES, - "Gotify messages", + Channel.MESSAGES_IMPORTANCE_DEFAULT, + "Normal priority messages (4-7)", + NotificationManager.IMPORTANCE_DEFAULT); + messagesImportanceDefault.enableLights(true); + messagesImportanceDefault.setLightColor(Color.CYAN); + messagesImportanceDefault.enableVibration(true); + + NotificationChannel messagesImportanceHigh = + new NotificationChannel( + Channel.MESSAGES_IMPORTANCE_HIGH, + "High priority messages (>7)", NotificationManager.IMPORTANCE_HIGH); - messages.enableLights(true); - messages.setLightColor(Color.CYAN); + messagesImportanceHigh.enableLights(true); + messagesImportanceHigh.setLightColor(Color.CYAN); + messagesImportanceHigh.enableVibration(true); + notificationManager.createNotificationChannel(foreground); - notificationManager.createNotificationChannel(messages); + notificationManager.createNotificationChannel(messagesImportanceMin); + notificationManager.createNotificationChannel(messagesImportanceLow); + notificationManager.createNotificationChannel(messagesImportanceDefault); + notificationManager.createNotificationChannel(messagesImportanceHigh); } catch (Exception e) { Log.e("Could not create channel", e); } } + + /** + * Map {@link com.github.gotify.client.model.Message#getPriority() Gotify message priorities to + * Android channels. + * + *
+ * Gotify Priority | Android Importance + * <= 0 | min + * 1-3 | low + * 4-7 | default + * >= 8 | high + *+ * + * @param priority the Gotify priority to convert to a notification channel as a long. + * @return the identifier of the notification channel as a String. + */ + public static String convertPriorityToChannel(long priority) { + if (priority < 1) { + return Channel.MESSAGES_IMPORTANCE_MIN; + } else if (priority < 4) { + return Channel.MESSAGES_IMPORTANCE_LOW; + } else if (priority < 8) { + return Channel.MESSAGES_IMPORTANCE_DEFAULT; + } else { + return Channel.MESSAGES_IMPORTANCE_HIGH; + } + } } diff --git a/app/src/main/java/com/github/gotify/service/WebSocketService.java b/app/src/main/java/com/github/gotify/service/WebSocketService.java index 92426f33..a08d805d 100644 --- a/app/src/main/java/com/github/gotify/service/WebSocketService.java +++ b/app/src/main/java/com/github/gotify/service/WebSocketService.java @@ -117,9 +117,11 @@ private void notifyMissedNotifications() { } private void onGroupedMessages(List