SnoozeHelperTest.java revision 7967230de20aeb6993d8332347752c8e508769e4
172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds/* 272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds * Copyright (C) 2016 The Android Open Source Project 372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds * 472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds * Licensed under the Apache License, Version 2.0 (the "License"); 572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds * you may not use this file except in compliance with the License. 672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds * You may obtain a copy of the License at 772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds * 872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds * http://www.apache.org/licenses/LICENSE-2.0 972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds * 1072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds * Unless required by applicable law or agreed to in writing, software 1172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds * distributed under the License is distributed on an "AS IS" BASIS, 1272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds * See the License for the specific language governing permissions and 1472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds * limitations under the License. 1572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds */ 1672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldspackage com.android.server.notification; 1772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 1872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport org.junit.Before; 1972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport org.junit.Test; 2072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport org.junit.runner.RunWith; 2172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport org.mockito.Mock; 2272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport org.mockito.MockitoAnnotations; 2372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 2472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.app.AlarmManager; 2572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.app.Notification; 2672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.app.NotificationChannel; 2785769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynoldsimport android.app.NotificationManager; 2872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.app.PendingIntent; 2972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.content.Context; 3072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.os.UserHandle; 3172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.service.notification.StatusBarNotification; 3272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.support.test.InstrumentationRegistry; 3372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.support.test.runner.AndroidJUnit4; 3472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.test.suitebuilder.annotation.SmallTest; 3572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 3672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static junit.framework.Assert.assertFalse; 3772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static junit.framework.Assert.assertTrue; 3872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static org.mockito.Matchers.any; 3972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static org.mockito.Matchers.anyInt; 40b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynoldsimport static org.mockito.Matchers.anyLong; 4172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static org.mockito.Matchers.eq; 4272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static org.mockito.Mockito.never; 4372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static org.mockito.Mockito.times; 4472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static org.mockito.Mockito.verify; 4572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 4672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 4772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds@SmallTest 4872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds@RunWith(AndroidJUnit4.class) 4972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldspublic class SnoozeHelperTest { 5072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Mock SnoozeHelper.Callback mCallback; 5172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Mock AlarmManager mAm; 5272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Mock ManagedServices.UserProfiles mUserProfiles; 5372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 5472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds private SnoozeHelper mSnoozeHelper; 5572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 5672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds private Context getContext() { 5772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds return InstrumentationRegistry.getTargetContext(); 5872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 5972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 6072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Before 6172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds public void setUp() { 6272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds MockitoAnnotations.initMocks(this); 6372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 6472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds mSnoozeHelper = new SnoozeHelper(getContext(), mCallback, mUserProfiles); 6572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds mSnoozeHelper.setAlarmManager(mAm); 6672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 6772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 6872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Test 69b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds public void testSnoozeForTime() throws Exception { 7072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 717967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r, 1000); 7272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds verify(mAm, times(1)).setExactAndAllowWhileIdle( 7372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds anyInt(), eq((long) 1000), any(PendingIntent.class)); 7472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 7572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 7672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 7772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 7872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Test 79b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds public void testSnooze() throws Exception { 80b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 817967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r); 82b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds verify(mAm, never()).setExactAndAllowWhileIdle( 83b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds anyInt(), anyLong(), any(PendingIntent.class)); 84b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 85b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 86b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds } 87b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds 88b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds @Test 8972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds public void testCancelByApp() throws Exception { 9072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 9172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM); 927967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r, 1000); 937967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r2 , 1000); 9472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 9572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 9672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 9772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r2.sbn.getPackageName(), r2.getKey())); 9872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 9972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds mSnoozeHelper.cancel(UserHandle.USER_SYSTEM, r.sbn.getPackageName(), "one", 1); 10072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds // 3 = one for each snooze, above + one for cancel itself. 10172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds verify(mAm, times(3)).cancel(any(PendingIntent.class)); 10272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertFalse(mSnoozeHelper.isSnoozed( 10372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 10472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 10572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r2.sbn.getPackageName(), r2.getKey())); 10672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 10772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 10872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Test 10972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds public void testCancelAllForUser() throws Exception { 11072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 11172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM); 11272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r3 = getNotificationRecord("pkg", 3, "three", UserHandle.ALL); 1137967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r, 1000); 1147967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r2, 1000); 1157967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r3, 1000); 11672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 11772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 11872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 11972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r2.sbn.getPackageName(), r2.getKey())); 12072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 12172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_ALL, r3.sbn.getPackageName(), r3.getKey())); 12272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 12372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds mSnoozeHelper.cancel(UserHandle.USER_SYSTEM, false); 12472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds // 5 = once for each snooze above (3) + once for each notification canceled (2). 12572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds verify(mAm, times(5)).cancel(any(PendingIntent.class)); 12672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertFalse(mSnoozeHelper.isSnoozed( 12772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 12872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertFalse(mSnoozeHelper.isSnoozed( 12972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r2.sbn.getPackageName(), r2.getKey())); 13072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 13172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_ALL, r3.sbn.getPackageName(), r3.getKey())); 13272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 13372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 13472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Test 13572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds public void testCancelAllByApp() throws Exception { 13672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 13772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM); 13872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r3 = getNotificationRecord("pkg2", 3, "three", UserHandle.SYSTEM); 1397967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r, 1000); 1407967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r2, 1000); 1417967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r3, 1000); 14272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 14372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 14472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 14572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r2.sbn.getPackageName(), r2.getKey())); 14672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 14772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r3.sbn.getPackageName(), r3.getKey())); 14872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 14972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds mSnoozeHelper.cancel(UserHandle.USER_SYSTEM, "pkg2"); 15072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds // 4 = once for each snooze above (3) + once for each notification canceled (1). 15172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds verify(mAm, times(4)).cancel(any(PendingIntent.class)); 15272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 15372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 15472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 15572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r2.sbn.getPackageName(), r2.getKey())); 15672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertFalse(mSnoozeHelper.isSnoozed( 15772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r3.sbn.getPackageName(), r3.getKey())); 15872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 15972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 16072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Test 16172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds public void testRepost() throws Exception { 16272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 1637967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r, 1000); 16472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r2 = getNotificationRecord("pkg", 2, "one", UserHandle.ALL); 1657967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r2, 1000); 166b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds mSnoozeHelper.repost(r.getKey(), UserHandle.USER_SYSTEM); 16772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds verify(mCallback, times(1)).repost(UserHandle.USER_SYSTEM, r); 16872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 16972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 17072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Test 1717967230de20aeb6993d8332347752c8e508769e4Julia Reynolds public void testRepost_noUser() throws Exception { 1727967230de20aeb6993d8332347752c8e508769e4Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 1737967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r, 1000); 1747967230de20aeb6993d8332347752c8e508769e4Julia Reynolds NotificationRecord r2 = getNotificationRecord("pkg", 2, "one", UserHandle.ALL); 1757967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r2, 1000); 1767967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.repost(r.getKey()); 1777967230de20aeb6993d8332347752c8e508769e4Julia Reynolds verify(mCallback, times(1)).repost(UserHandle.USER_SYSTEM, r); 1787967230de20aeb6993d8332347752c8e508769e4Julia Reynolds } 1797967230de20aeb6993d8332347752c8e508769e4Julia Reynolds 1807967230de20aeb6993d8332347752c8e508769e4Julia Reynolds @Test 18172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds public void testUpdate() throws Exception { 18272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 1837967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r , 1000); 18472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds r.getNotification().category = "NEW CATEGORY"; 18572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 18672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds mSnoozeHelper.update(UserHandle.USER_SYSTEM, r); 18772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds verify(mCallback, never()).repost(anyInt(), any(NotificationRecord.class)); 18872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 189b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds mSnoozeHelper.repost(r.getKey(), UserHandle.USER_SYSTEM); 19072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds verify(mCallback, times(1)).repost(UserHandle.USER_SYSTEM, r); 19172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 19272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 19372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds private NotificationRecord getNotificationRecord(String pkg, int id, String tag, 19472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle user) { 19572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds Notification n = new Notification.Builder(getContext()) 19672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds .setContentTitle("A") 19772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds .setGroup("G") 19872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds .setSortKey("A") 19972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds .setWhen(1205) 20072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds .build(); 20172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds return new NotificationRecord(getContext(), new StatusBarNotification( 202423b9fc83d736326b8ddadbfcd6fd5f181bf9fecJulia Reynolds pkg, pkg, getDefaultChannel(), id, tag, 0, 0, n, user, null, 203423b9fc83d736326b8ddadbfcd6fd5f181bf9fecJulia Reynolds System.currentTimeMillis())); 204423b9fc83d736326b8ddadbfcd6fd5f181bf9fecJulia Reynolds } 205423b9fc83d736326b8ddadbfcd6fd5f181bf9fecJulia Reynolds 206423b9fc83d736326b8ddadbfcd6fd5f181bf9fecJulia Reynolds private NotificationChannel getDefaultChannel() { 207423b9fc83d736326b8ddadbfcd6fd5f181bf9fecJulia Reynolds return new NotificationChannel(NotificationChannel.DEFAULT_CHANNEL_ID, "name", 208423b9fc83d736326b8ddadbfcd6fd5f181bf9fecJulia Reynolds NotificationManager.IMPORTANCE_LOW); 20972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 21072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 21172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds} 212