1c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds/*
2c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds * Copyright (C) 2018 The Android Open Source Project
3c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds *
4c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds * Licensed under the Apache License, Version 2.0 (the "License");
5c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds * you may not use this file except in compliance with the License.
6c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds * You may obtain a copy of the License at
7c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds *
8c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds *      http://www.apache.org/licenses/LICENSE-2.0
9c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds *
10c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds * Unless required by applicable law or agreed to in writing, software
11c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds * distributed under the License is distributed on an "AS IS" BASIS,
12c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds * See the License for the specific language governing permissions and
14c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds * limitations under the License.
15c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds */
16c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
17c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynoldspackage com.android.server.notification;
18c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
19c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynoldsimport static android.app.NotificationManager.IMPORTANCE_LOW;
20ccc6ae64ff1dd957fabb24b3c889a69d2d42765dJulia Reynoldsimport static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_NOTIFICATION_LIST;
21ccc6ae64ff1dd957fabb24b3c889a69d2d42765dJulia Reynoldsimport static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_PEEK;
22c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
23c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynoldsimport static junit.framework.Assert.assertEquals;
24c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynoldsimport static junit.framework.Assert.assertFalse;
25c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynoldsimport static junit.framework.Assert.assertTrue;
26c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
27c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynoldsimport static org.mockito.ArgumentMatchers.any;
28c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynoldsimport static org.mockito.Mockito.when;
29c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
30c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynoldsimport android.app.Notification;
31c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynoldsimport android.app.NotificationChannel;
32c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynoldsimport android.app.NotificationManager;
33c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynoldsimport android.os.UserHandle;
34c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynoldsimport android.service.notification.StatusBarNotification;
35c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
36c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynoldsimport com.android.server.UiServiceTestCase;
37c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
38c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynoldsimport org.junit.Before;
39c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynoldsimport org.junit.Test;
40c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynoldsimport org.mockito.Mock;
41c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynoldsimport org.mockito.MockitoAnnotations;
42c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
43c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynoldspublic class ZenModeExtractorTest extends UiServiceTestCase {
44c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
45c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds    @Mock
46c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds    ZenModeHelper mZenModeHelper;
47c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
48c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds    @Before
49c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds    public void setUp() {
50c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        MockitoAnnotations.initMocks(this);
51c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds    }
52c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
53c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds    @Test
54c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds    public void testExtractIntercepted() {
55c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        ZenModeExtractor extractor = new ZenModeExtractor();
56c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        extractor.setZenHelper(mZenModeHelper);
57c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        NotificationRecord r = generateRecord();
58c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
59c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        assertFalse(r.isIntercepted());
60c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
61c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        when(mZenModeHelper.shouldIntercept(any())).thenReturn(true);
62ccc6ae64ff1dd957fabb24b3c889a69d2d42765dJulia Reynolds        when(mZenModeHelper.getNotificationPolicy()).thenReturn(
63ccc6ae64ff1dd957fabb24b3c889a69d2d42765dJulia Reynolds                new NotificationManager.Policy(0,0,0));
64c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
65c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        extractor.process(r);
66c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
67c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        assertTrue(r.isIntercepted());
68c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds    }
69c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
70c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds    @Test
71c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds    public void testExtractVisualDisturbancesNotIntercepted() {
72c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        ZenModeExtractor extractor = new ZenModeExtractor();
73c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        extractor.setZenHelper(mZenModeHelper);
74c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        NotificationRecord r = generateRecord();
75c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
76c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        when(mZenModeHelper.shouldIntercept(any())).thenReturn(false);
77ccc6ae64ff1dd957fabb24b3c889a69d2d42765dJulia Reynolds        when(mZenModeHelper.getNotificationPolicy()).thenReturn(
78ccc6ae64ff1dd957fabb24b3c889a69d2d42765dJulia Reynolds                new NotificationManager.Policy(0,0,0));
79c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
80c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        extractor.process(r);
81c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
82c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        assertEquals(0, r.getSuppressedVisualEffects());
83c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds    }
84c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
85c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds    @Test
86c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds    public void testExtractVisualDisturbancesIntercepted() {
87c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        ZenModeExtractor extractor = new ZenModeExtractor();
88c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        extractor.setZenHelper(mZenModeHelper);
89c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        NotificationRecord r = generateRecord();
90c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
91c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        when(mZenModeHelper.shouldIntercept(any())).thenReturn(true);
92ccc6ae64ff1dd957fabb24b3c889a69d2d42765dJulia Reynolds        when(mZenModeHelper.getNotificationPolicy()).thenReturn(
93ccc6ae64ff1dd957fabb24b3c889a69d2d42765dJulia Reynolds                new NotificationManager.Policy(0,0,0, SUPPRESSED_EFFECT_PEEK
94ccc6ae64ff1dd957fabb24b3c889a69d2d42765dJulia Reynolds                        | SUPPRESSED_EFFECT_NOTIFICATION_LIST));
95c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
96c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        extractor.process(r);
97c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
98ccc6ae64ff1dd957fabb24b3c889a69d2d42765dJulia Reynolds        assertEquals(NotificationManager.Policy.SUPPRESSED_EFFECT_PEEK
99ccc6ae64ff1dd957fabb24b3c889a69d2d42765dJulia Reynolds                | NotificationManager.Policy.SUPPRESSED_EFFECT_NOTIFICATION_LIST,
100c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds                r.getSuppressedVisualEffects());
101c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds    }
102c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds
103c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds    private NotificationRecord generateRecord() {
104c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        NotificationChannel channel = new NotificationChannel("a", "a", IMPORTANCE_LOW);
105c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        final Notification.Builder builder = new Notification.Builder(getContext())
106c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds                .setContentTitle("foo")
107c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds                .setSmallIcon(android.R.drawable.sym_def_app_icon);
108c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        Notification n = builder.build();
109c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        StatusBarNotification sbn = new StatusBarNotification("", "", 0, "", 0,
110c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds                0, n, UserHandle.ALL, null, System.currentTimeMillis());
111c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds        return new NotificationRecord(getContext(), sbn, channel);
112c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds    }
113c861a3ddbc9b6cb193e71dbb5da6162d119e2e98Julia Reynolds}
114