From 29ec86b673d65fcc286b23583e27a63272c9faa1 Mon Sep 17 00:00:00 2001 From: Elias Nahum Date: Fri, 3 Sep 2021 09:19:19 -0400 Subject: [PATCH] Properly handle notification snooze on Android (#5656) --- .../rnbeta/CustomPushNotification.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/android/app/src/main/java/com/mattermost/rnbeta/CustomPushNotification.java b/android/app/src/main/java/com/mattermost/rnbeta/CustomPushNotification.java index b4cc35110..588c0c9f9 100644 --- a/android/app/src/main/java/com/mattermost/rnbeta/CustomPushNotification.java +++ b/android/app/src/main/java/com/mattermost/rnbeta/CustomPushNotification.java @@ -1,10 +1,12 @@ package com.mattermost.rnbeta; import android.app.Notification; +import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; +import android.service.notification.StatusBarNotification; import android.util.Log; import androidx.annotation.Nullable; @@ -49,10 +51,23 @@ public class CustomPushNotification extends PushNotification { return; } - notifications.remove(notificationId); - saveNotificationsMap(context, notificationsInChannel); - final NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); + final NotificationManager notificationManager = context.getSystemService(NotificationManager.class); notificationManager.cancel(notificationId); + notifications.remove(notificationId); + final StatusBarNotification[] statusNotifications = notificationManager.getActiveNotifications(); + boolean hasMore = false; + for (final StatusBarNotification status : statusNotifications) { + if (status.getNotification().extras.getString("channel_id").equals(channelId)) { + hasMore = true; + break; + } + } + + if (!hasMore) { + notificationsInChannel.remove(channelId); + } + + saveNotificationsMap(context, notificationsInChannel); } }