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