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.keyguard 18 19 import android.app.ActivityTaskManager 20 import android.content.pm.PackageManager 21 import android.os.PowerManager 22 import android.telecom.TelecomManager 23 import android.telephony.TelephonyManager 24 import android.testing.AndroidTestingRunner 25 import android.testing.TestableLooper 26 import androidx.test.filters.SmallTest 27 import com.android.internal.logging.MetricsLogger 28 import com.android.internal.widget.LockPatternUtils 29 import com.android.systemui.SysuiTestCase 30 import com.android.systemui.shade.ShadeController 31 import com.android.systemui.statusbar.policy.ConfigurationController 32 import com.android.systemui.util.concurrency.FakeExecutor 33 import com.android.systemui.util.mockito.any 34 import com.android.systemui.util.mockito.eq 35 import com.android.systemui.util.time.FakeSystemClock 36 import org.junit.Before 37 import org.junit.Test 38 import org.junit.runner.RunWith 39 import org.mockito.Mock 40 import org.mockito.Mockito 41 import org.mockito.Mockito.anyInt 42 import org.mockito.Mockito.never 43 import org.mockito.Mockito.verify 44 import org.mockito.MockitoAnnotations 45 46 @SmallTest 47 @RunWith(AndroidTestingRunner::class) 48 @TestableLooper.RunWithLooper 49 class EmergencyButtonControllerTest : SysuiTestCase() { 50 lateinit var underTest: EmergencyButtonController 51 @Mock lateinit var emergencyButton: EmergencyButton 52 @Mock lateinit var configurationController: ConfigurationController 53 @Mock lateinit var keyguardUpdateMonitor: KeyguardUpdateMonitor 54 @Mock lateinit var telephonyManager: TelephonyManager 55 @Mock lateinit var powerManager: PowerManager 56 @Mock lateinit var activityTaskManager: ActivityTaskManager 57 @Mock lateinit var shadeController: ShadeController 58 @Mock lateinit var telecomManager: TelecomManager 59 @Mock lateinit var metricsLogger: MetricsLogger 60 @Mock lateinit var lockPatternUtils: LockPatternUtils 61 @Mock lateinit var packageManager: PackageManager 62 val fakeSystemClock = FakeSystemClock() 63 val mainExecutor = FakeExecutor(fakeSystemClock) 64 val backgroundExecutor = FakeExecutor(fakeSystemClock) 65 66 @Before 67 fun setup() { 68 MockitoAnnotations.initMocks(this) 69 underTest = 70 EmergencyButtonController( 71 emergencyButton, 72 configurationController, 73 keyguardUpdateMonitor, 74 telephonyManager, 75 powerManager, 76 activityTaskManager, 77 shadeController, 78 telecomManager, 79 metricsLogger, 80 lockPatternUtils, 81 mainExecutor, 82 backgroundExecutor 83 ) 84 context.setMockPackageManager(packageManager) 85 Mockito.`when`(emergencyButton.context).thenReturn(context) 86 } 87 88 @Test 89 fun testUpdateEmergencyButton() { 90 Mockito.`when`(telecomManager.isInCall).thenReturn(true) 91 Mockito.`when`(lockPatternUtils.isSecure(anyInt())).thenReturn(true) 92 Mockito.`when`(packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) 93 .thenReturn(true) 94 underTest.updateEmergencyCallButton() 95 backgroundExecutor.runAllReady() 96 verify(emergencyButton, never()) 97 .updateEmergencyCallButton( 98 /* isInCall= */ any(), 99 /* hasTelephonyRadio= */ any(), 100 /* simLocked= */ any(), 101 /* isSecure= */ any() 102 ) 103 mainExecutor.runAllReady() 104 verify(emergencyButton) 105 .updateEmergencyCallButton( 106 /* isInCall= */ eq(true), 107 /* hasTelephonyRadio= */ eq(true), 108 /* simLocked= */ any(), 109 /* isSecure= */ eq(true) 110 ) 111 } 112 } 113