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

Unverified Commit d1020a96 authored by Fabian Kozynski's avatar Fabian Kozynski Committed by Kevin F. Haggerty
Browse files

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
(cherry picked from commit ea4a8ec1)
Merged-In: I9c8f642976f3332f4d5c9db89a4917dae501f251
parent 693e82f7
Loading
Loading
Loading
Loading
+6 −2
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 −2
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
@@ -38,6 +39,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 +53,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 +65,8 @@ class HeaderPrivacyIconsControllerTest : SysuiTestCase() {
                privacyChip,
                privacyDialogController,
                privacyLogger,
                iconContainer
                iconContainer,
                deviceProvisionedController
        )
    }

@@ -121,6 +126,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)