blob: 92743ae51c95312cc1536c58a397c9ae67a2f1fb [file] [log] [blame]
package com.android.systemui.qs
import android.content.Context
import android.testing.AndroidTestingRunner
import android.view.View
import androidx.test.filters.SmallTest
import com.android.internal.logging.UiEventLogger
import com.android.systemui.SysuiTestCase
import com.android.systemui.privacy.OngoingPrivacyChip
import com.android.systemui.privacy.PrivacyDialogController
import com.android.systemui.privacy.PrivacyItemController
import com.android.systemui.privacy.logging.PrivacyLogger
import com.android.systemui.statusbar.phone.StatusIconContainer
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.argumentCaptor
import com.android.systemui.util.mockito.capture
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
import org.mockito.Mockito.`when` as whenever
@SmallTest
@RunWith(AndroidTestingRunner::class)
class HeaderPrivacyIconsControllerTest : SysuiTestCase() {
@Mock
private lateinit var privacyItemController: PrivacyItemController
@Mock
private lateinit var uiEventLogger: UiEventLogger
@Mock
private lateinit var privacyChip: OngoingPrivacyChip
@Mock
private lateinit var privacyDialogController: PrivacyDialogController
@Mock
private lateinit var privacyLogger: PrivacyLogger
@Mock
private lateinit var iconContainer: StatusIconContainer
private lateinit var cameraSlotName: String
private lateinit var microphoneSlotName: String
private lateinit var locationSlotName: String
private lateinit var controller: HeaderPrivacyIconsController
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
whenever(privacyChip.context).thenReturn(context)
whenever(privacyChip.resources).thenReturn(context.resources)
cameraSlotName = context.getString(com.android.internal.R.string.status_bar_camera)
microphoneSlotName = context.getString(com.android.internal.R.string.status_bar_microphone)
locationSlotName = context.getString(com.android.internal.R.string.status_bar_location)
controller = HeaderPrivacyIconsController(
privacyItemController,
uiEventLogger,
privacyChip,
privacyDialogController,
privacyLogger,
iconContainer
)
}
@Test
fun testIgnoredSlotsOnParentVisible_noIndicators() {
setPrivacyController(micCamera = false, location = false)
controller.onParentVisible()
verify(iconContainer).removeIgnoredSlot(cameraSlotName)
verify(iconContainer).removeIgnoredSlot(microphoneSlotName)
verify(iconContainer).removeIgnoredSlot(locationSlotName)
}
@Test
fun testIgnoredSlotsOnParentVisible_onlyMicCamera() {
setPrivacyController(micCamera = true, location = false)
controller.onParentVisible()
verify(iconContainer).addIgnoredSlot(cameraSlotName)
verify(iconContainer).addIgnoredSlot(microphoneSlotName)
verify(iconContainer).removeIgnoredSlot(locationSlotName)
}
@Test
fun testIgnoredSlotsOnParentVisible_onlyLocation() {
setPrivacyController(micCamera = false, location = true)
controller.onParentVisible()
verify(iconContainer).removeIgnoredSlot(cameraSlotName)
verify(iconContainer).removeIgnoredSlot(microphoneSlotName)
verify(iconContainer).addIgnoredSlot(locationSlotName)
}
@Test
fun testIgnoredSlotsOnParentVisible_locationMicCamera() {
setPrivacyController(micCamera = true, location = true)
controller.onParentVisible()
verify(iconContainer).addIgnoredSlot(cameraSlotName)
verify(iconContainer).addIgnoredSlot(microphoneSlotName)
verify(iconContainer).addIgnoredSlot(locationSlotName)
}
@Test
fun testPrivacyChipClicked() {
controller.onParentVisible()
val captor = argumentCaptor<View.OnClickListener>()
verify(privacyChip).setOnClickListener(capture(captor))
captor.value.onClick(privacyChip)
verify(privacyDialogController).showDialog(any(Context::class.java))
}
private fun setPrivacyController(micCamera: Boolean, location: Boolean) {
whenever(privacyItemController.micCameraAvailable).thenReturn(micCamera)
whenever(privacyItemController.locationAvailable).thenReturn(location)
}
}