Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5038c72 authored by Fabian Kozynski's avatar Fabian Kozynski
Browse files

[DO NOT MERGE] Disallow clicks on privacy chip before provisioned

While the device is provisioning, do not allow clicks on the privacy
chip.

Test: atest HeaderPrivacyIconsControllerTest
Bug: 253043058
Change-Id: I9c8f642976f3332f4d5c9db89a4917dae501f251
parent 09c67441
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ import com.android.systemui.privacy.PrivacyItemController
import com.android.systemui.privacy.logging.PrivacyLogger
import com.android.systemui.statusbar.phone.StatusIconContainer
import javax.inject.Inject
import com.android.systemui.statusbar.policy.DeviceProvisionedController

interface ChipVisibilityListener {
    fun onChipVisibilityRefreshed(visible: Boolean)
@@ -32,7 +33,8 @@ class HeaderPrivacyIconsController @Inject constructor(
    private val privacyChip: OngoingPrivacyChip,
    private val privacyDialogController: PrivacyDialogController,
    private val privacyLogger: PrivacyLogger,
    private val iconContainer: StatusIconContainer
    private val iconContainer: StatusIconContainer,
    private val deviceProvisionedController: DeviceProvisionedController
) {

    var chipVisibilityListener: ChipVisibilityListener? = null
@@ -75,6 +77,8 @@ class HeaderPrivacyIconsController @Inject constructor(

    fun onParentVisible() {
        privacyChip.setOnClickListener {
            // Do not expand dialog while device is not provisioned
            if (!deviceProvisionedController.isDeviceProvisioned) return@setOnClickListener
            // If the privacy chip is visible, it means there were some indicators
            uiEventLogger.log(PrivacyChipEvent.ONGOING_INDICATORS_CHIP_CLICK)
            privacyDialogController.showDialog(privacyChip.context)
+19 −1
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ 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.statusbar.policy.DeviceProvisionedController
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.argumentCaptor
import com.android.systemui.util.mockito.capture
@@ -18,6 +19,7 @@ import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.never
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
import org.mockito.Mockito.`when` as whenever
@@ -38,6 +40,8 @@ class HeaderPrivacyIconsControllerTest : SysuiTestCase() {
    private lateinit var privacyLogger: PrivacyLogger
    @Mock
    private lateinit var iconContainer: StatusIconContainer
    @Mock
    private lateinit var deviceProvisionedController: DeviceProvisionedController

    private lateinit var cameraSlotName: String
    private lateinit var microphoneSlotName: String
@@ -50,6 +54,7 @@ class HeaderPrivacyIconsControllerTest : SysuiTestCase() {
        MockitoAnnotations.initMocks(this)
        whenever(privacyChip.context).thenReturn(context)
        whenever(privacyChip.resources).thenReturn(context.resources)
        whenever(deviceProvisionedController.isDeviceProvisioned).thenReturn(true)

        cameraSlotName = context.getString(com.android.internal.R.string.status_bar_camera)
        microphoneSlotName = context.getString(com.android.internal.R.string.status_bar_microphone)
@@ -61,7 +66,8 @@ class HeaderPrivacyIconsControllerTest : SysuiTestCase() {
                privacyChip,
                privacyDialogController,
                privacyLogger,
                iconContainer
                iconContainer,
                deviceProvisionedController
        )
    }

@@ -121,6 +127,18 @@ class HeaderPrivacyIconsControllerTest : SysuiTestCase() {
        verify(privacyDialogController).showDialog(any(Context::class.java))
    }

    @Test
    fun testNoDialogWhenDeviceNotProvisioned() {
        whenever(deviceProvisionedController.isDeviceProvisioned).thenReturn(false)
        controller.onParentVisible()

        val captor = argumentCaptor<View.OnClickListener>()
        verify(privacyChip).setOnClickListener(capture(captor))

        captor.value.onClick(privacyChip)
        verify(privacyDialogController, never()).showDialog(any(Context::class.java))
    }

    private fun setPrivacyController(micCamera: Boolean, location: Boolean) {
        whenever(privacyItemController.micCameraAvailable).thenReturn(micCamera)
        whenever(privacyItemController.locationAvailable).thenReturn(location)