Update NotificationRecord of snooze even after it is cancelled
Symptom: If a snoozed notification is cancelled and new notification that has same key is registered, the system continue to snooze the notification. But the notification won't be notified when the snoozing period expires. Root cause: SnoozeHelper doesn't update NotificationRecord if the existing record has already been cancelled. SnoozeHelper continue to use existing cancelled record. So SnoozeHelper doesn't repost notification when the snoozing period expires. Solution: SnoozeHelper updates NotificationRecord even if the existing record has been cancelled. Fixes: 140462813 Change-Id: I4b58aed20eec08819e36dac9dda250ac046205b8
This commit is contained in:
@@ -231,9 +231,6 @@ public class SnoozeHelper {
|
||||
return;
|
||||
}
|
||||
NotificationRecord existing = pkgRecords.get(record.getKey());
|
||||
if (existing != null && existing.isCanceled) {
|
||||
return;
|
||||
}
|
||||
pkgRecords.put(record.getKey(), record);
|
||||
}
|
||||
|
||||
|
||||
@@ -226,6 +226,26 @@ public class SnoozeHelperTest extends UiServiceTestCase {
|
||||
verify(mCallback, times(1)).repost(UserHandle.USER_SYSTEM, r);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateAfterCancel() throws Exception {
|
||||
// snooze a notification
|
||||
NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
|
||||
mSnoozeHelper.snooze(r , 1000);
|
||||
|
||||
// cancel the notification
|
||||
mSnoozeHelper.cancel(UserHandle.USER_SYSTEM, false);
|
||||
|
||||
// update the notification
|
||||
r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
|
||||
mSnoozeHelper.update(UserHandle.USER_SYSTEM, r);
|
||||
|
||||
// verify callback is called when repost (snooze is expired)
|
||||
verify(mCallback, never()).repost(anyInt(), any(NotificationRecord.class));
|
||||
mSnoozeHelper.repost(r.getKey(), UserHandle.USER_SYSTEM);
|
||||
verify(mCallback, times(1)).repost(UserHandle.USER_SYSTEM, r);
|
||||
assertFalse(r.isCanceled);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetSnoozedByUser() throws Exception {
|
||||
NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM);
|
||||
|
||||
Reference in New Issue
Block a user