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