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

Commit be3c0092 authored by Nicolo' Mazzucato's avatar Nicolo' Mazzucato
Browse files

Use shade dialog context when opening a PrivacyChip dialog

When the flag was on, the shade window context was being used, but it had the wrong window type and dialogs were failing to be created. Now the correct context associated with the shade is being used.

Bug: 362719719
Bug: 383294128
Test: PrivacyChipInteractorTest, HeaderPrivacyIconsControllerTest
Flag: com.android.systemui.shade_window_goes_around
Change-Id: Ief736b5c5d8352ae19adf77ba520e283f1713f7a
parent f71aa0da
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -21,8 +21,10 @@ import com.android.systemui.privacy.PrivacyDialogController
import com.android.systemui.privacy.PrivacyDialogControllerV2
import com.android.systemui.privacy.PrivacyItemController
import com.android.systemui.privacy.logging.PrivacyLogger
import com.android.systemui.shade.data.repository.shadeDialogContextInteractor
import com.android.systemui.statusbar.phone.StatusIconContainer
import com.android.systemui.statusbar.policy.DeviceProvisionedController
import com.android.systemui.testKosmos
import com.android.systemui.util.concurrency.FakeExecutor
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.argumentCaptor
@@ -49,6 +51,7 @@ private fun <T> any(): T = Mockito.any<T>()
@RunWith(AndroidJUnit4::class)
class HeaderPrivacyIconsControllerTest : SysuiTestCase() {

    private val kosmos = testKosmos()
    @Mock
    private lateinit var privacyItemController: PrivacyItemController
    @Mock
@@ -113,7 +116,8 @@ class HeaderPrivacyIconsControllerTest : SysuiTestCase() {
                broadcastDispatcher,
                safetyCenterManager,
                deviceProvisionedController,
                featureFlags
                featureFlags,
                kosmos.shadeDialogContextInteractor,
        )

        backgroundExecutor.runAllReady()
+7 −3
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import javax.inject.Inject
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.shade.ShadeViewProviderModule.Companion.SHADE_HEADER
import com.android.systemui.shade.domain.interactor.ShadeDialogContextInteractor
import com.android.systemui.statusbar.policy.DeviceProvisionedController
import javax.inject.Named

@@ -63,7 +64,8 @@ class HeaderPrivacyIconsController @Inject constructor(
    private val broadcastDispatcher: BroadcastDispatcher,
    private val safetyCenterManager: SafetyCenterManager,
    private val deviceProvisionedController: DeviceProvisionedController,
    private val featureFlags: FeatureFlags
    private val featureFlags: FeatureFlags,
    private val shadeDialogContextInteractor: ShadeDialogContextInteractor,
) {

    var chipVisibilityListener: ChipVisibilityListener? = null
@@ -75,6 +77,8 @@ class HeaderPrivacyIconsController @Inject constructor(
    private val cameraSlot = privacyChip.resources.getString(R.string.status_bar_camera)
    private val micSlot = privacyChip.resources.getString(R.string.status_bar_microphone)
    private val locationSlot = privacyChip.resources.getString(R.string.status_bar_location)
    private val dialogContext: Context
        get() = shadeDialogContextInteractor.context

    private val safetyCenterReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
@@ -149,12 +153,12 @@ class HeaderPrivacyIconsController @Inject constructor(
            uiEventLogger.log(PrivacyChipEvent.ONGOING_INDICATORS_CHIP_CLICK)
            if (safetyCenterEnabled) {
                if (featureFlags.isEnabled(Flags.ENABLE_NEW_PRIVACY_DIALOG)) {
                    privacyDialogControllerV2.showDialog(privacyChip.context, privacyChip)
                    privacyDialogControllerV2.showDialog(dialogContext, privacyChip)
                } else {
                    showSafetyCenter()
                }
            } else {
                privacyDialogController.showDialog(privacyChip.context)
                privacyDialogController.showDialog(dialogContext)
            }
        }
        setChipVisibility(privacyChip.visibility == View.VISIBLE)
+3 −2
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ constructor(
    private val privacyDialogController: PrivacyDialogController,
    private val privacyDialogControllerV2: PrivacyDialogControllerV2,
    private val deviceProvisionedController: DeviceProvisionedController,
    private val shadeDialogContextInteractor: ShadeDialogContextInteractor,
) {
    /** The list of PrivacyItems to be displayed by the privacy chip. */
    val privacyItems: StateFlow<List<PrivacyItem>> = repository.privacyItems
@@ -80,9 +81,9 @@ constructor(
        if (!deviceProvisionedController.isDeviceProvisioned) return

        if (repository.isSafetyCenterEnabled.value) {
            privacyDialogControllerV2.showDialog(privacyChip.context, privacyChip)
            privacyDialogControllerV2.showDialog(shadeDialogContextInteractor.context, privacyChip)
        } else {
            privacyDialogController.showDialog(privacyChip.context)
            privacyDialogController.showDialog(shadeDialogContextInteractor.context)
        }
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.privacy.privacyDialogController
import com.android.systemui.privacy.privacyDialogControllerV2
import com.android.systemui.shade.data.repository.fakePrivacyChipRepository
import com.android.systemui.shade.data.repository.shadeDialogContextInteractor
import com.android.systemui.statusbar.policy.deviceProvisionedController

var Kosmos.privacyChipInteractor: PrivacyChipInteractor by
@@ -31,5 +32,6 @@ var Kosmos.privacyChipInteractor: PrivacyChipInteractor by
            privacyDialogController = privacyDialogController,
            privacyDialogControllerV2 = privacyDialogControllerV2,
            deviceProvisionedController = deviceProvisionedController,
            shadeDialogContextInteractor = shadeDialogContextInteractor,
        )
    }