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 17 package com.android.systemui.biometrics 18 19 import android.testing.TestableLooper 20 import androidx.test.ext.junit.runners.AndroidJUnit4 21 import androidx.test.filters.SmallTest 22 import com.android.systemui.RoboPilotTest 23 import com.android.systemui.SysuiTestCase 24 import com.android.systemui.dump.DumpManager 25 import com.android.systemui.plugins.statusbar.StatusBarStateController 26 import com.android.systemui.shade.ShadeExpansionChangeEvent 27 import com.android.systemui.shade.ShadeExpansionStateManager 28 import com.android.systemui.statusbar.phone.SystemUIDialogManager 29 import com.android.systemui.util.mockito.any 30 import com.android.systemui.util.mockito.whenever 31 import com.android.systemui.util.mockito.withArgCaptor 32 import org.junit.Assert.assertFalse 33 import org.junit.Before 34 import org.junit.Rule 35 import org.junit.Test 36 import org.junit.runner.RunWith 37 import org.mockito.Mock 38 import org.mockito.Mockito.verify 39 import org.mockito.junit.MockitoJUnit 40 41 @SmallTest 42 @RoboPilotTest 43 @RunWith(AndroidJUnit4::class) 44 @TestableLooper.RunWithLooper 45 class UdfpsBpViewControllerTest : SysuiTestCase() { 46 47 @JvmField @Rule var rule = MockitoJUnit.rule() 48 49 @Mock lateinit var udfpsBpView: UdfpsBpView 50 @Mock lateinit var statusBarStateController: StatusBarStateController 51 @Mock lateinit var shadeExpansionStateManager: ShadeExpansionStateManager 52 @Mock lateinit var systemUIDialogManager: SystemUIDialogManager 53 @Mock lateinit var dumpManager: DumpManager 54 55 private lateinit var udfpsBpViewController: UdfpsBpViewController 56 57 @Before 58 fun setup() { 59 whenever(shadeExpansionStateManager.addExpansionListener(any())) 60 .thenReturn(ShadeExpansionChangeEvent(0f, false, false, 0f)) 61 udfpsBpViewController = 62 UdfpsBpViewController( 63 udfpsBpView, 64 statusBarStateController, 65 shadeExpansionStateManager, 66 systemUIDialogManager, 67 dumpManager 68 ) 69 } 70 71 @Test 72 fun testPauseAuthWhenNotificationShadeDragging() { 73 udfpsBpViewController.onViewAttached() 74 val shadeExpansionListener = withArgCaptor { 75 verify(shadeExpansionStateManager).addExpansionListener(capture()) 76 } 77 78 // When shade is tracking, should pause auth 79 shadeExpansionListener.onPanelExpansionChanged( 80 ShadeExpansionChangeEvent( 81 fraction = 0f, 82 expanded = false, 83 tracking = true, 84 dragDownPxAmount = 10f 85 ) 86 ) 87 assert(udfpsBpViewController.shouldPauseAuth()) 88 89 // When shade is not tracking, don't pause auth even if expanded 90 shadeExpansionListener.onPanelExpansionChanged( 91 ShadeExpansionChangeEvent( 92 fraction = 0f, 93 expanded = true, 94 tracking = false, 95 dragDownPxAmount = 10f 96 ) 97 ) 98 assertFalse(udfpsBpViewController.shouldPauseAuth()) 99 } 100 } 101