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; 305098977b20699c2ed32a621524abd5a1b2ab7de4Julia Reynoldsimport android.os.SystemClock; 3172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.os.UserHandle; 3272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.service.notification.StatusBarNotification; 3372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.support.test.runner.AndroidJUnit4; 3472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport android.test.suitebuilder.annotation.SmallTest; 35a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynoldsimport android.util.Slog; 3672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 37cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynoldsimport static junit.framework.Assert.assertEquals; 3872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static junit.framework.Assert.assertFalse; 3972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static junit.framework.Assert.assertTrue; 4072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static org.mockito.Matchers.any; 4172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static org.mockito.Matchers.anyInt; 42b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynoldsimport static org.mockito.Matchers.anyLong; 4372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static org.mockito.Matchers.eq; 4472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static org.mockito.Mockito.never; 4572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static org.mockito.Mockito.times; 4672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynoldsimport static org.mockito.Mockito.verify; 47cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynoldsimport static org.mockito.Mockito.when; 4872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 4972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 5072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds@SmallTest 5172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds@RunWith(AndroidJUnit4.class) 5289aa2261903fd09b08a2210a7a1b35d329f8330aChris Wrenpublic class SnoozeHelperTest extends NotificationTestCase { 53af759c52ce01fe6b5144957e38da956af01a217bGeoffrey Pitsch private static final String TEST_CHANNEL_ID = "test_channel_id"; 54af759c52ce01fe6b5144957e38da956af01a217bGeoffrey Pitsch 5572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Mock SnoozeHelper.Callback mCallback; 5672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Mock AlarmManager mAm; 5772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Mock ManagedServices.UserProfiles mUserProfiles; 5872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 5972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds private SnoozeHelper mSnoozeHelper; 6072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 6172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Before 6272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds public void setUp() { 6372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds MockitoAnnotations.initMocks(this); 6472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 6572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds mSnoozeHelper = new SnoozeHelper(getContext(), mCallback, mUserProfiles); 6672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds mSnoozeHelper.setAlarmManager(mAm); 6772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 6872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 6972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Test 70b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds public void testSnoozeForTime() throws Exception { 7172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 727967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r, 1000); 735098977b20699c2ed32a621524abd5a1b2ab7de4Julia Reynolds ArgumentCaptor<Long> captor = ArgumentCaptor.forClass(Long.class); 7472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds verify(mAm, times(1)).setExactAndAllowWhileIdle( 755098977b20699c2ed32a621524abd5a1b2ab7de4Julia Reynolds anyInt(), captor.capture(), any(PendingIntent.class)); 765098977b20699c2ed32a621524abd5a1b2ab7de4Julia Reynolds long actualSnoozedUntilDuration = captor.getValue() - SystemClock.elapsedRealtime(); 774024b6696ce1be3b29194b8dc21e3d1f97776e69Julia Reynolds assertTrue(Math.abs(actualSnoozedUntilDuration - 1000) < 25); 7872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 7972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 8072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 8172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 8272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Test 83b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds public void testSnooze() throws Exception { 84b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 857967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r); 86b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds verify(mAm, never()).setExactAndAllowWhileIdle( 87b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds anyInt(), anyLong(), any(PendingIntent.class)); 88b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 89b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 90b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds } 91b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds 92b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds @Test 9372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds public void testCancelByApp() throws Exception { 9472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 9572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM); 967967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r, 1000); 977967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r2 , 1000); 9872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 9972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 10072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 10172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r2.sbn.getPackageName(), r2.getKey())); 10272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 10372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds mSnoozeHelper.cancel(UserHandle.USER_SYSTEM, r.sbn.getPackageName(), "one", 1); 104a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds // 2 = one for each snooze, above, zero for the cancel. 105a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds verify(mAm, times(2)).cancel(any(PendingIntent.class)); 106a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 10772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 10872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 10972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r2.sbn.getPackageName(), r2.getKey())); 11072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 11172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 11272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Test 11372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds public void testCancelAllForUser() throws Exception { 11472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 11572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM); 11672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r3 = getNotificationRecord("pkg", 3, "three", UserHandle.ALL); 1177967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r, 1000); 1187967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r2, 1000); 1197967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r3, 1000); 12072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 12172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 12272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 12372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r2.sbn.getPackageName(), r2.getKey())); 12472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 12572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_ALL, r3.sbn.getPackageName(), r3.getKey())); 12672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 12772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds mSnoozeHelper.cancel(UserHandle.USER_SYSTEM, false); 128a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds // 3 = once for each snooze above (3), only. 129a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds verify(mAm, times(3)).cancel(any(PendingIntent.class)); 130a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 13172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 132a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 13372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r2.sbn.getPackageName(), r2.getKey())); 13472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 13572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_ALL, r3.sbn.getPackageName(), r3.getKey())); 13672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 13772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 13872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Test 13972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds public void testCancelAllByApp() throws Exception { 14072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 14172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM); 14272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r3 = getNotificationRecord("pkg2", 3, "three", UserHandle.SYSTEM); 1437967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r, 1000); 1447967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r2, 1000); 1457967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r3, 1000); 14672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 14772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 14872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 14972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r2.sbn.getPackageName(), r2.getKey())); 15072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 15172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r3.sbn.getPackageName(), r3.getKey())); 15272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 15372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds mSnoozeHelper.cancel(UserHandle.USER_SYSTEM, "pkg2"); 154a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds // 3 = once for each snooze above (3), only. 155a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds verify(mAm, times(3)).cancel(any(PendingIntent.class)); 15672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 15772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 15872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 15972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r2.sbn.getPackageName(), r2.getKey())); 160a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 16172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds UserHandle.USER_SYSTEM, r3.sbn.getPackageName(), r3.getKey())); 16272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 16372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 16472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Test 165a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds public void testCancelDoesNotUnsnooze() throws Exception { 166a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 167a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds mSnoozeHelper.snooze(r, 1000); 168a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 169a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 170a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds 171a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds mSnoozeHelper.cancel(UserHandle.USER_SYSTEM, r.sbn.getPackageName(), "one", 1); 172a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds 173a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 174a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 175a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds } 176a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds 177a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds @Test 178a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds public void testCancelDoesNotRepost() throws Exception { 179a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 180a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM); 181a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds mSnoozeHelper.snooze(r, 1000); 182a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds mSnoozeHelper.snooze(r2 , 1000); 183a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 184a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds UserHandle.USER_SYSTEM, r.sbn.getPackageName(), r.getKey())); 185a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds assertTrue(mSnoozeHelper.isSnoozed( 186a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds UserHandle.USER_SYSTEM, r2.sbn.getPackageName(), r2.getKey())); 187a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds 188a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds mSnoozeHelper.cancel(UserHandle.USER_SYSTEM, r.sbn.getPackageName(), "one", 1); 189a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds 190a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds mSnoozeHelper.repost(r.getKey(), UserHandle.USER_SYSTEM); 191a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds verify(mCallback, never()).repost(UserHandle.USER_SYSTEM, r); 192a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds } 193a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds 194a8b766fb73641ab67194a54391305bdc9cfc1cddJulia Reynolds @Test 19572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds public void testRepost() throws Exception { 19672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 1977967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r, 1000); 19872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r2 = getNotificationRecord("pkg", 2, "one", UserHandle.ALL); 1997967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r2, 1000); 200b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds mSnoozeHelper.repost(r.getKey(), UserHandle.USER_SYSTEM); 20172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds verify(mCallback, times(1)).repost(UserHandle.USER_SYSTEM, r); 20272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 20372f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 20472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds @Test 2057967230de20aeb6993d8332347752c8e508769e4Julia Reynolds public void testRepost_noUser() throws Exception { 2067967230de20aeb6993d8332347752c8e508769e4Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 2077967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r, 1000); 2087967230de20aeb6993d8332347752c8e508769e4Julia Reynolds NotificationRecord r2 = getNotificationRecord("pkg", 2, "one", UserHandle.ALL); 2097967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r2, 1000); 2107967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.repost(r.getKey()); 2117967230de20aeb6993d8332347752c8e508769e4Julia Reynolds verify(mCallback, times(1)).repost(UserHandle.USER_SYSTEM, r); 2127967230de20aeb6993d8332347752c8e508769e4Julia Reynolds } 2137967230de20aeb6993d8332347752c8e508769e4Julia Reynolds 2147967230de20aeb6993d8332347752c8e508769e4Julia Reynolds @Test 21572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds public void testUpdate() throws Exception { 21672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 2177967230de20aeb6993d8332347752c8e508769e4Julia Reynolds mSnoozeHelper.snooze(r , 1000); 21872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds r.getNotification().category = "NEW CATEGORY"; 21972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 22072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds mSnoozeHelper.update(UserHandle.USER_SYSTEM, r); 22172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds verify(mCallback, never()).repost(anyInt(), any(NotificationRecord.class)); 22272f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 223b6c1f99bd96d2f38980f4473baf3aa908d059db2Julia Reynolds mSnoozeHelper.repost(r.getKey(), UserHandle.USER_SYSTEM); 22472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds verify(mCallback, times(1)).repost(UserHandle.USER_SYSTEM, r); 22572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 22672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds 227cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds @Test 228cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds public void testGetSnoozedByUser() throws Exception { 229cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 230cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM); 231cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds NotificationRecord r3 = getNotificationRecord("pkg2", 3, "three", UserHandle.SYSTEM); 232cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds NotificationRecord r4 = getNotificationRecord("pkg2", 3, "three", UserHandle.CURRENT); 233cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds mSnoozeHelper.snooze(r, 1000); 234cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds mSnoozeHelper.snooze(r2, 1000); 235cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds mSnoozeHelper.snooze(r3, 1000); 236cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds mSnoozeHelper.snooze(r4, 1000); 237cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds when(mUserProfiles.getCurrentProfileIds()).thenReturn( 238cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds new int[] {UserHandle.USER_SYSTEM}); 239cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds assertEquals(3, mSnoozeHelper.getSnoozed().size()); 240cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds when(mUserProfiles.getCurrentProfileIds()).thenReturn( 241cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds new int[] {UserHandle.USER_CURRENT}); 242cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds assertEquals(1, mSnoozeHelper.getSnoozed().size()); 243cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds } 244cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds 245cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds @Test 246cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds public void testGetSnoozedByUser_managedProfiles() throws Exception { 247cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds when(mUserProfiles.getCurrentProfileIds()).thenReturn( 248cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds new int[] {UserHandle.USER_SYSTEM, UserHandle.USER_CURRENT}); 249cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds NotificationRecord r = getNotificationRecord("pkg", 1, "one", UserHandle.SYSTEM); 250cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds NotificationRecord r2 = getNotificationRecord("pkg", 2, "two", UserHandle.SYSTEM); 251cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds NotificationRecord r3 = getNotificationRecord("pkg2", 3, "three", UserHandle.SYSTEM); 252cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds NotificationRecord r4 = getNotificationRecord("pkg2", 3, "three", UserHandle.CURRENT); 253cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds mSnoozeHelper.snooze(r, 1000); 254cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds mSnoozeHelper.snooze(r2, 1000); 255cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds mSnoozeHelper.snooze(r3, 1000); 256cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds mSnoozeHelper.snooze(r4, 1000); 257cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds assertEquals(4, mSnoozeHelper.getSnoozed().size()); 258cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds } 259cf63ff1532e793560f62e1c75f3402b48b0f09baJulia Reynolds 260a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds @Test 261a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds public void repostGroupSummary_onlyFellowGroupChildren() throws Exception { 262a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds NotificationRecord r = getNotificationRecord( 263a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds "pkg", 1, "one", UserHandle.SYSTEM, "group1", false); 264a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds NotificationRecord r2 = getNotificationRecord( 265a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds "pkg", 2, "two", UserHandle.SYSTEM, "group1", false); 266a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds mSnoozeHelper.snooze(r, 1000); 267a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds mSnoozeHelper.snooze(r2, 1000); 268a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds mSnoozeHelper.repostGroupSummary("pkg", UserHandle.USER_SYSTEM, "group1"); 269a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds 270a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds verify(mCallback, never()).repost(UserHandle.USER_SYSTEM, r); 271a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds } 272a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds 273a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds @Test 274a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds public void repostGroupSummary_repostsSummary() throws Exception { 275a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds when(mUserProfiles.getCurrentProfileIds()).thenReturn( 276a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds new int[] {UserHandle.USER_SYSTEM}); 277a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds NotificationRecord r = getNotificationRecord( 278a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds "pkg", 1, "one", UserHandle.SYSTEM, "group1", true); 279a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds NotificationRecord r2 = getNotificationRecord( 280a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds "pkg", 2, "two", UserHandle.SYSTEM, "group1", false); 281a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds mSnoozeHelper.snooze(r, 1000); 282a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds mSnoozeHelper.snooze(r2, 1000); 283a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds assertEquals(2, mSnoozeHelper.getSnoozed().size()); 284a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds assertEquals(2, mSnoozeHelper.getSnoozed(UserHandle.USER_SYSTEM, "pkg").size()); 285a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds 286a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds mSnoozeHelper.repostGroupSummary("pkg", UserHandle.USER_SYSTEM, r.getGroupKey()); 287a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds 288a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds verify(mCallback, times(1)).repost(UserHandle.USER_SYSTEM, r); 289a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds verify(mCallback, never()).repost(UserHandle.USER_SYSTEM, r2); 290a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds 291a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds assertEquals(1, mSnoozeHelper.getSnoozed().size()); 292a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds assertEquals(1, mSnoozeHelper.getSnoozed(UserHandle.USER_SYSTEM, "pkg").size()); 293a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds } 294a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds 29572f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds private NotificationRecord getNotificationRecord(String pkg, int id, String tag, 296a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds UserHandle user, String groupKey, boolean groupSummary) { 297af759c52ce01fe6b5144957e38da956af01a217bGeoffrey Pitsch Notification n = new Notification.Builder(getContext(), TEST_CHANNEL_ID) 29872f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds .setContentTitle("A") 29972f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds .setGroup("G") 30072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds .setSortKey("A") 30172f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds .setWhen(1205) 302a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds .setGroup(groupKey) 303a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds .setGroupSummary(groupSummary) 30472f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds .build(); 305af759c52ce01fe6b5144957e38da956af01a217bGeoffrey Pitsch final NotificationChannel notificationChannel = new NotificationChannel( 306af759c52ce01fe6b5144957e38da956af01a217bGeoffrey Pitsch TEST_CHANNEL_ID, "name", NotificationManager.IMPORTANCE_LOW); 30772f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds return new NotificationRecord(getContext(), new StatusBarNotification( 308924eed1ca6d3fec5dae7eb0f9c11b8f23f628697Julia Reynolds pkg, pkg, id, tag, 0, 0, n, user, null, 309a22f644c79213138c232f3067b5f780a9c43b04cGeoffrey Pitsch System.currentTimeMillis()), notificationChannel); 31072f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds } 311a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds 312a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds private NotificationRecord getNotificationRecord(String pkg, int id, String tag, 313a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds UserHandle user) { 314a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds return getNotificationRecord(pkg, id, tag, user, null, false); 315a78cdffd802ee7a30747ab369e6edd2358a86f20Julia Reynolds } 31672f1cbb3b988d6daa61c45a69aa9f8024c029b06Julia Reynolds} 317