1 /* 2 * Copyright (C) 2023 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.systemui.statusbar.notification.icon.ui.viewbinder 17 18 import android.testing.AndroidTestingRunner 19 import android.testing.TestableLooper.RunWithLooper 20 import androidx.test.filters.SmallTest 21 import com.android.systemui.SysuiTestCase 22 import com.android.systemui.demomode.DemoModeController 23 import com.android.systemui.flags.FeatureFlags 24 import com.android.systemui.plugins.DarkIconDispatcher 25 import com.android.systemui.plugins.statusbar.StatusBarStateController 26 import com.android.systemui.statusbar.NotificationListener 27 import com.android.systemui.statusbar.NotificationMediaManager 28 import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator 29 import com.android.systemui.statusbar.notification.collection.provider.SectionStyleProvider 30 import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerAlwaysOnDisplayViewModel 31 import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerShelfViewModel 32 import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerStatusBarViewModel 33 import com.android.systemui.statusbar.phone.DozeParameters 34 import com.android.systemui.statusbar.phone.KeyguardBypassController 35 import com.android.systemui.statusbar.phone.NotificationIconContainer 36 import com.android.systemui.statusbar.phone.ScreenOffAnimationController 37 import com.android.systemui.statusbar.window.StatusBarWindowController 38 import com.android.systemui.util.mockito.whenever 39 import com.android.wm.shell.bubbles.Bubbles 40 import java.util.Optional 41 import org.junit.Assert.assertFalse 42 import org.junit.Assert.assertTrue 43 import org.junit.Before 44 import org.junit.Test 45 import org.junit.runner.RunWith 46 import org.mockito.Mock 47 import org.mockito.Mockito.verify 48 import org.mockito.MockitoAnnotations 49 50 @SmallTest 51 @RunWith(AndroidTestingRunner::class) 52 @RunWithLooper(setAsMainLooper = true) 53 class NotificationIconAreaControllerViewBinderWrapperImplTest : SysuiTestCase() { 54 @Mock private lateinit var notifListener: NotificationListener 55 @Mock private lateinit var statusBarStateController: StatusBarStateController 56 @Mock private lateinit var wakeUpCoordinator: NotificationWakeUpCoordinator 57 @Mock private lateinit var keyguardBypassController: KeyguardBypassController 58 @Mock private lateinit var notifMediaManager: NotificationMediaManager 59 @Mock private lateinit var dozeParams: DozeParameters 60 @Mock private lateinit var sectionStyleProvider: SectionStyleProvider 61 @Mock private lateinit var darkIconDispatcher: DarkIconDispatcher 62 @Mock private lateinit var statusBarWindowController: StatusBarWindowController 63 @Mock private lateinit var screenOffAnimController: ScreenOffAnimationController 64 @Mock private lateinit var bubbles: Bubbles 65 @Mock private lateinit var demoModeController: DemoModeController 66 @Mock private lateinit var aodIcons: NotificationIconContainer 67 @Mock private lateinit var featureFlags: FeatureFlags 68 69 private val shelfViewModel = NotificationIconContainerShelfViewModel() 70 private val statusBarViewModel = NotificationIconContainerStatusBarViewModel() 71 private val aodViewModel = NotificationIconContainerAlwaysOnDisplayViewModel() 72 73 private lateinit var underTest: NotificationIconAreaControllerViewBinderWrapperImpl 74 75 @Before 76 fun setup() { 77 MockitoAnnotations.initMocks(this) 78 underTest = 79 NotificationIconAreaControllerViewBinderWrapperImpl( 80 mContext, 81 statusBarStateController, 82 wakeUpCoordinator, 83 keyguardBypassController, 84 notifMediaManager, 85 notifListener, 86 dozeParams, 87 sectionStyleProvider, 88 Optional.of(bubbles), 89 demoModeController, 90 darkIconDispatcher, 91 featureFlags, 92 statusBarWindowController, 93 screenOffAnimController, 94 shelfViewModel, 95 statusBarViewModel, 96 aodViewModel, 97 ) 98 } 99 100 @Test 101 fun testNotificationIcons_settingHideIcons() { 102 underTest.settingsListener.onStatusBarIconsBehaviorChanged(true) 103 assertFalse(underTest.shouldShowLowPriorityIcons()) 104 } 105 106 @Test 107 fun testNotificationIcons_settingShowIcons() { 108 underTest.settingsListener.onStatusBarIconsBehaviorChanged(false) 109 assertTrue(underTest.shouldShowLowPriorityIcons()) 110 } 111 112 @Test 113 fun testAppearResetsTranslation() { 114 underTest.setupAodIcons(aodIcons) 115 whenever(dozeParams.shouldControlScreenOff()).thenReturn(false) 116 underTest.appearAodIcons() 117 verify(aodIcons).translationY = 0f 118 verify(aodIcons).alpha = 1.0f 119 } 120 } 121