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