1 /* 2 * Copyright (C) 2022 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.qs.tiles 18 19 import android.os.Handler 20 import android.testing.AndroidTestingRunner 21 import android.testing.TestableLooper 22 import androidx.test.filters.SmallTest 23 import com.android.internal.logging.MetricsLogger 24 import com.android.systemui.R 25 import com.android.systemui.SysuiTestCase 26 import com.android.systemui.classifier.FalsingManagerFake 27 import com.android.systemui.plugins.ActivityStarter 28 import com.android.systemui.plugins.qs.QSTile 29 import com.android.systemui.plugins.statusbar.StatusBarStateController 30 import com.android.systemui.qs.QSHost 31 import com.android.systemui.qs.QsEventLoggerFake 32 import com.android.systemui.qs.logging.QSLogger 33 import com.android.systemui.qs.tileimpl.QSTileImpl 34 import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController 35 import com.android.systemui.statusbar.policy.KeyguardStateController 36 import com.google.common.truth.Truth.assertThat 37 import org.junit.After 38 import org.junit.Before 39 import org.junit.Test 40 import org.junit.runner.RunWith 41 import org.mockito.Mock 42 import org.mockito.MockitoAnnotations 43 import org.mockito.Mockito.`when` as whenever 44 45 @RunWith(AndroidTestingRunner::class) 46 @TestableLooper.RunWithLooper(setAsMainLooper = true) 47 @SmallTest 48 class CameraToggleTileTest : SysuiTestCase() { 49 companion object { 50 /* isBlocked */ 51 const val CAMERA_TOGGLE_ENABLED: Boolean = false 52 const val CAMERA_TOGGLE_DISABLED: Boolean = true 53 } 54 55 @Mock 56 private lateinit var host: QSHost 57 @Mock 58 private lateinit var metricsLogger: MetricsLogger 59 @Mock 60 private lateinit var statusBarStateController: StatusBarStateController 61 @Mock 62 private lateinit var activityStarter: ActivityStarter 63 @Mock 64 private lateinit var qsLogger: QSLogger 65 @Mock 66 private lateinit var privacyController: IndividualSensorPrivacyController 67 @Mock 68 private lateinit var keyguardStateController: KeyguardStateController 69 @Mock 70 private lateinit var uiEventLogger: QsEventLoggerFake 71 72 private lateinit var testableLooper: TestableLooper 73 private lateinit var tile: CameraToggleTile 74 75 @Before 76 fun setUp() { 77 MockitoAnnotations.initMocks(this) 78 testableLooper = TestableLooper.get(this) 79 whenever(host.context).thenReturn(mContext) 80 81 tile = CameraToggleTile( 82 host, 83 uiEventLogger, 84 testableLooper.looper, 85 Handler(testableLooper.looper), 86 metricsLogger, 87 FalsingManagerFake(), 88 statusBarStateController, 89 activityStarter, 90 qsLogger, 91 privacyController, 92 keyguardStateController) 93 } 94 95 @After 96 fun tearDown() { 97 tile.destroy() 98 testableLooper.processAllMessages() 99 } 100 101 @Test 102 fun testIcon_whenCameraAccessEnabled_isOnState() { 103 val state = QSTile.BooleanState() 104 105 tile.handleUpdateState(state, CAMERA_TOGGLE_ENABLED) 106 107 assertThat(state.icon) 108 .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_camera_access_icon_on)) 109 } 110 111 @Test 112 fun testIcon_whenCameraAccessDisabled_isOffState() { 113 val state = QSTile.BooleanState() 114 115 tile.handleUpdateState(state, CAMERA_TOGGLE_DISABLED) 116 117 assertThat(state.icon) 118 .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_camera_access_icon_off)) 119 } 120 } 121