SnoozeHelperTest.java revision 4024b6696ce1be3b29194b8dc21e3d1f97776e69
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; 215098977b20699c2ed32a621524abd5a1b2ab7de4Julia Reynoldsimport org.mockito.ArgumentCaptor; 2272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport org.mockito.Mock; 2372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport org.mockito.MockitoAnnotations; 2472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 2572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.app.AlarmManager; 2672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.app.Notification; 2772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.app.NotificationChannel; 2885769915e7ef10bef2b5338ed8f04d9b787924fbJulia Reynoldsimport android.app.NotificationManager; 2972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.app.PendingIntent; 3072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.content.Context; 315098977b20699c2ed32a621524abd5a1b2ab7de4Julia Reynoldsimport android.os.SystemClock; 3272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.os.UserHandle; 3372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.service.notification.StatusBarNotification; 3472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.support.test.InstrumentationRegistry; 3572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.support.test.runner.AndroidJUnit4; 3672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.test.suitebuilder.annotation.SmallTest; 3772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 38cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynoldsimport static junit.framework.Assert.assertEquals; 3972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static junit.framework.Assert.assertFalse; 4072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static junit.framework.Assert.assertTrue; 4172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static org.mockito.Matchers.any; 4272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static org.mockito.Matchers.anyInt; 43b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynoldsimport static org.mockito.Matchers.anyLong; 4472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static org.mockito.Matchers.eq; 4572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static org.mockito.Mockito.never; 4672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static org.mockito.Mockito.times; 4772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static org.mockito.Mockito.verify; 48cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynoldsimport static org.mockito.Mockito.when; 4972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 5072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 5172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds@SmallTest 5272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds@RunWith(AndroidJUnit4.class) 5372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldspublic class SnoozeHelperTest { 5472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Mock SnoozeHelper.Callback mCallback; 5572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Mock AlarmManager mAm; 5672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Mock ManagedServices.UserProfiles mUserProfiles; 5772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 5872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds private SnoozeHelper mSnoozeHelper; 5972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 6072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds private Context getContext() { 6172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds return InstrumentationRegistry.getTargetContext(); 6272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 6372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 6472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Before 6572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds public void setUp() { 6672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds MockitoAnnotations.initMocks(this); 6772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 6872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds mSnoozeHelper = new SnoozeHelper(getContext(), mCallback, mUserProfiles); 6972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds mSnoozeHelper.setAlarmManager(mAm); 7072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 7172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 7272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Test 73b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds public void testSnoozeForTime() throws Exception { 7472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 757967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r, 1000); 765098977b20699c2ed32a621524abd5a1b2ab7de4Julia Reynolds ArgumentCaptor<Long> captor = ArgumentCaptor.forClass(Long.class); 7772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds verify(mAm, times(1)).setExactAndAllowWhileIdle( 785098977b20699c2ed32a621524abd5a1b2ab7de4Julia Reynolds anyInt(), captor.capture(), any(PendingIntent.class)); 795098977b20699c2ed32a621524abd5a1b2ab7de4Julia Reynolds long actualSnoozedUntilDuration = captor.getValue() - SystemClock.elapsedRealtime(); 804024b6696ce1be3b29194b8dc21e3d1f97776e69Julia Reynolds assertTrue(Math.abs(actualSnoozedUntilDuration - 1000) < 25); 8172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 8272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 8372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 8472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 8572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Test 86b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds public void testSnooze() throws Exception { 87b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 887967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r); 89b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds verify(mAm, never()).setExactAndAllowWhileIdle( 90b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds anyInt(), anyLong(), any(PendingIntent.class)); 91b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 92b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 93b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds } 94b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds 95b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds @Test 9672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds public void testCancelByApp() throws Exception { 9772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 9872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM); 997967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r, 1000); 1007967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r2 , 1000); 10172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 10272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 10372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 10472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r2.sbn.getPackageName(), r2.getKey())); 10572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 10672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds mSnoozeHelper.cancel(UserHandle.USER_SYSTEM, r.sbn.getPackageName(), "one", 1); 10772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds // 3 = one for each snooze, above + one for cancel itself. 10872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds verify(mAm, times(3)).cancel(any(PendingIntent.class)); 10972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertFalse(mSnoozeHelper.isSnoozed( 11072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 11172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 11272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r2.sbn.getPackageName(), r2.getKey())); 11372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 11472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 11572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Test 11672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds public void testCancelAllForUser() throws Exception { 11772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 11872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM); 11972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r3 = getNotificationRecord("pkg", 3, "three", UserHandle.ALL); 1207967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r, 1000); 1217967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r2, 1000); 1227967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r3, 1000); 12372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 12472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 12572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 12672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r2.sbn.getPackageName(), r2.getKey())); 12772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 12872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_ALL, r3.sbn.getPackageName(), r3.getKey())); 12972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 13072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds mSnoozeHelper.cancel(UserHandle.USER_SYSTEM, false); 13172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds // 5 = once for each snooze above (3) + once for each notification canceled (2). 13272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds verify(mAm, times(5)).cancel(any(PendingIntent.class)); 13372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertFalse(mSnoozeHelper.isSnoozed( 13472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 13572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertFalse(mSnoozeHelper.isSnoozed( 13672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r2.sbn.getPackageName(), r2.getKey())); 13772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 13872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_ALL, r3.sbn.getPackageName(), r3.getKey())); 13972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 14072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 14172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Test 14272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds public void testCancelAllByApp() throws Exception { 14372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 14472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM); 14572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r3 = getNotificationRecord("pkg2", 3, "three", UserHandle.SYSTEM); 1467967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r, 1000); 1477967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r2, 1000); 1487967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r3, 1000); 14972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 15072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 15172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 15272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r2.sbn.getPackageName(), r2.getKey())); 15372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 15472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r3.sbn.getPackageName(), r3.getKey())); 15572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 15672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds mSnoozeHelper.cancel(UserHandle.USER_SYSTEM, "pkg2"); 15772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds // 4 = once for each snooze above (3) + once for each notification canceled (1). 15872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds verify(mAm, times(4)).cancel(any(PendingIntent.class)); 15972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 16072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 16172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 16272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r2.sbn.getPackageName(), r2.getKey())); 16372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertFalse(mSnoozeHelper.isSnoozed( 16472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r3.sbn.getPackageName(), r3.getKey())); 16572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 16672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 16772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Test 16872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds public void testRepost() throws Exception { 16972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 1707967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r, 1000); 17172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r2 = getNotificationRecord("pkg", 2, "one", UserHandle.ALL); 1727967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r2, 1000); 173b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds mSnoozeHelper.repost(r.getKey(), UserHandle.USER_SYSTEM); 17472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds verify(mCallback, times(1)).repost(UserHandle.USER_SYSTEM, r); 17572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 17672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 17772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Test 1787967230de20aeb6993d8332347752c8e508769e4Julia Reynolds public void testRepost_noUser() throws Exception { 1797967230de20aeb6993d8332347752c8e508769e4Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 1807967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r, 1000); 1817967230de20aeb6993d8332347752c8e508769e4Julia Reynolds NotificationRecord r2 = getNotificationRecord("pkg", 2, "one", UserHandle.ALL); 1827967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r2, 1000); 1837967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.repost(r.getKey()); 1847967230de20aeb6993d8332347752c8e508769e4Julia Reynolds verify(mCallback, times(1)).repost(UserHandle.USER_SYSTEM, r); 1857967230de20aeb6993d8332347752c8e508769e4Julia Reynolds } 1867967230de20aeb6993d8332347752c8e508769e4Julia Reynolds 1877967230de20aeb6993d8332347752c8e508769e4Julia Reynolds @Test 18872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds public void testUpdate() throws Exception { 18972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 1907967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r , 1000); 19172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds r.getNotification().category = "NEW CATEGORY"; 19272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 19372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds mSnoozeHelper.update(UserHandle.USER_SYSTEM, r); 19472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds verify(mCallback, never()).repost(anyInt(), any(NotificationRecord.class)); 19572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 196b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds mSnoozeHelper.repost(r.getKey(), UserHandle.USER_SYSTEM); 19772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds verify(mCallback, times(1)).repost(UserHandle.USER_SYSTEM, r); 19872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 19972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 200cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds @Test 201cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds public void testGetSnoozedByUser() throws Exception { 202cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 203cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM); 204cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds NotificationRecord r3 = getNotificationRecord("pkg2", 3, "three", UserHandle.SYSTEM); 205cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds NotificationRecord r4 = getNotificationRecord("pkg2", 3, "three", UserHandle.CURRENT); 206cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds mSnoozeHelper.snooze(r, 1000); 207cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds mSnoozeHelper.snooze(r2, 1000); 208cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds mSnoozeHelper.snooze(r3, 1000); 209cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds mSnoozeHelper.snooze(r4, 1000); 210cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds when(mUserProfiles.getCurrentProfileIds()).thenReturn( 211cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds new int[] {UserHandle.USER_SYSTEM}); 212cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds assertEquals(3, mSnoozeHelper.getSnoozed().size()); 213cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds when(mUserProfiles.getCurrentProfileIds()).thenReturn( 214cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds new int[] {UserHandle.USER_CURRENT}); 215cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds assertEquals(1, mSnoozeHelper.getSnoozed().size()); 216cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds } 217cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds 218cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds @Test 219cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds public void testGetSnoozedByUser_managedProfiles() throws Exception { 220cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds when(mUserProfiles.getCurrentProfileIds()).thenReturn( 221cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds new int[] {UserHandle.USER_SYSTEM, UserHandle.USER_CURRENT}); 222cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 223cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM); 224cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds NotificationRecord r3 = getNotificationRecord("pkg2", 3, "three", UserHandle.SYSTEM); 225cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds NotificationRecord r4 = getNotificationRecord("pkg2", 3, "three", UserHandle.CURRENT); 226cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds mSnoozeHelper.snooze(r, 1000); 227cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds mSnoozeHelper.snooze(r2, 1000); 228cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds mSnoozeHelper.snooze(r3, 1000); 229cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds mSnoozeHelper.snooze(r4, 1000); 230cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds assertEquals(4, mSnoozeHelper.getSnoozed().size()); 231cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds } 232cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds 23372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds private NotificationRecord getNotificationRecord(String pkg, int id, String tag, 23472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle user) { 23572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds Notification n = new Notification.Builder(getContext()) 23672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds .setContentTitle("A") 23772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds .setGroup("G") 23872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds .setSortKey("A") 23972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds .setWhen(1205) 24072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds .build(); 24172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds return new NotificationRecord(getContext(), new StatusBarNotification( 242924eed1ca6d3fec5dae7eb0f9c11b8f23f628697Julia Reynolds pkg, pkg, id, tag, 0, 0, n, user, null, 243924eed1ca6d3fec5dae7eb0f9c11b8f23f628697Julia Reynolds System.currentTimeMillis()), getDefaultChannel()); 244423b9fc83d736326b8ddadbfcd6fd5f181bf9fecJulia Reynolds } 245423b9fc83d736326b8ddadbfcd6fd5f181bf9fecJulia Reynolds 246423b9fc83d736326b8ddadbfcd6fd5f181bf9fecJulia Reynolds private NotificationChannel getDefaultChannel() { 247423b9fc83d736326b8ddadbfcd6fd5f181bf9fecJulia Reynolds return new NotificationChannel(NotificationChannel.DEFAULT_CHANNEL_ID, "name", 248423b9fc83d736326b8ddadbfcd6fd5f181bf9fecJulia Reynolds NotificationManager.IMPORTANCE_LOW); 24972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 25072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 25172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds} 252