1f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk/* 2f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk * Copyright (C) 2017 The Android Open Source Project 3f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk * 4f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 5f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk * except in compliance with the License. You may obtain a copy of the License at 6f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk * 7f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk * http://www.apache.org/licenses/LICENSE-2.0 8f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk * 9f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk * Unless required by applicable law or agreed to in writing, software distributed under the 10f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 11f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk * KIND, either express or implied. See the License for the specific language governing 12f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk * permissions and limitations under the License. 13f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk */ 14f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk 15f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monkpackage com.android.systemui.statusbar.policy; 16f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk 179cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynoldsimport static junit.framework.Assert.assertFalse; 189cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynoldsimport static junit.framework.Assert.assertTrue; 199cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds 20f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monkimport static org.mockito.ArgumentMatchers.eq; 21f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monkimport static org.mockito.Mockito.mock; 22f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monkimport static org.mockito.Mockito.verify; 239cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynoldsimport static org.mockito.Mockito.when; 24f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk 259cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynoldsimport android.app.NotificationManager; 26f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monkimport android.os.Handler; 276dceace0eddd08156e6b71c17e3de4ed5f4f2f41Jason Monkimport android.os.Looper; 289cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynoldsimport android.provider.Settings; 29f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monkimport android.service.notification.ZenModeConfig; 30f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monkimport android.support.test.filters.SmallTest; 31f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monkimport android.testing.AndroidTestingRunner; 32f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monkimport android.testing.TestableLooper.RunWithLooper; 33f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk 34f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monkimport com.android.systemui.SysuiTestCase; 35f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monkimport com.android.systemui.statusbar.policy.ZenModeController.Callback; 36f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk 379cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynoldsimport org.junit.Before; 38f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monkimport org.junit.Test; 39f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monkimport org.junit.runner.RunWith; 409cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynoldsimport org.mockito.Mock; 419cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynoldsimport org.mockito.MockitoAnnotations; 42f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk 43f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk@SmallTest 44f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk@RunWith(AndroidTestingRunner.class) 45f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk@RunWithLooper 46f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monkpublic class ZenModeControllerImplTest extends SysuiTestCase { 47f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk 48f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk private Callback mCallback; 499cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds @Mock 509cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds NotificationManager mNm; 519cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds @Mock 529cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds ZenModeConfig mConfig; 539cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds 549cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds private ZenModeControllerImpl mController; 559cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds 569cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds @Before 579cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds public void setUp() { 589cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds MockitoAnnotations.initMocks(this); 599cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds mContext.addMockSystemService(NotificationManager.class, mNm); 609cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds when(mNm.getZenModeConfig()).thenReturn(mConfig); 619cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds 626dceace0eddd08156e6b71c17e3de4ed5f4f2f41Jason Monk mController = new ZenModeControllerImpl(mContext, Handler.createAsync(Looper.myLooper())); 639cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds } 64f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk 65f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk @Test 66f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk public void testRemoveDuringCallback() { 67f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk mCallback = new Callback() { 68f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk @Override 69f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk public void onConfigChanged(ZenModeConfig config) { 709cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds mController.removeCallback(mCallback); 71f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk } 72f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk }; 739cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds mController.addCallback(mCallback); 74f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk Callback mockCallback = mock(Callback.class); 759cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds mController.addCallback(mockCallback); 769cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds mController.fireConfigChanged(null); 77f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk verify(mockCallback).onConfigChanged(eq(null)); 78f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk } 79f66d377a6828fcad07fa16f619a88ab97bb96983Jason Monk 809cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds @Test 819cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds public void testAreNotificationsHiddenInShade_zenOffShadeSuppressed() { 829cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds mConfig.suppressedVisualEffects = 839cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds NotificationManager.Policy.SUPPRESSED_EFFECT_NOTIFICATION_LIST; 849cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds mController.updateZenMode(Settings.Global.ZEN_MODE_OFF); 859cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds mController.updateZenModeConfig(); 869cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds 879cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds assertFalse(mController.areNotificationsHiddenInShade()); 889cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds } 899cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds 909cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds @Test 919cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds public void testAreNotificationsHiddenInShade_zenOnShadeNotSuppressed() { 929cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds mConfig.suppressedVisualEffects = 939cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds NotificationManager.Policy.SUPPRESSED_EFFECT_STATUS_BAR; 949cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds mController.updateZenMode(Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS); 959cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds mController.updateZenModeConfig(); 969cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds 979cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds assertFalse(mController.areNotificationsHiddenInShade()); 989cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds } 999cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds 1009cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds @Test 1019cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds public void testAreNotificationsHiddenInShade_zenOnShadeSuppressed() { 1029cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds mConfig.suppressedVisualEffects = 1039cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds NotificationManager.Policy.SUPPRESSED_EFFECT_NOTIFICATION_LIST; 1049cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds mController.updateZenMode(Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS); 1059cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds mController.updateZenModeConfig(); 1069cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds 1079cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds assertTrue(mController.areNotificationsHiddenInShade()); 1089cf1756ffc06010c7035312f712c497a25dc46f1Julia Reynolds } 10980313ca38fc303dd2761512fedd4021e2dd7e350Beverly 11080313ca38fc303dd2761512fedd4021e2dd7e350Beverly @Test 11180313ca38fc303dd2761512fedd4021e2dd7e350Beverly public void testAddNullCallback() { 11280313ca38fc303dd2761512fedd4021e2dd7e350Beverly mController.addCallback(null); 11380313ca38fc303dd2761512fedd4021e2dd7e350Beverly mController.fireConfigChanged(null); 11480313ca38fc303dd2761512fedd4021e2dd7e350Beverly } 11580313ca38fc303dd2761512fedd4021e2dd7e350Beverly} 116