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

Commit 9eb05607 authored by Chandru S's avatar Chandru S
Browse files

Update KeyguardDismissActionInteractor to work with compose bouncer

Test: everything builds, verified that fingerprint auth dismisses keyguard and bouncer.
Bug: 310005730
Fixes: 358607623
Fixes: 361793240
Flag: com.android.systemui.compose_bouncer
Flag: com.android.systemui.scene_container
Change-Id: Iba982234448bd0527d29aceb7f03a9f2bf6d6f61
parent 65388c2c
Loading
Loading
Loading
Loading
+33 −12
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
package com.android.systemui.keyguard.domain.interactor

import com.android.systemui.bouncer.domain.interactor.AlternateBouncerInteractor
import com.android.systemui.bouncer.shared.flag.ComposeBouncerFlags
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryInteractor
@@ -32,6 +33,7 @@ import com.android.systemui.scene.domain.resolver.NotifShadeSceneFamilyResolver
import com.android.systemui.scene.domain.resolver.QuickSettingsSceneFamilyResolver
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.util.kotlin.Utils.Companion.sampleFilter
import com.android.systemui.util.kotlin.sample
import javax.inject.Inject
@@ -44,6 +46,7 @@ import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.filterNot
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.merge
import kotlinx.coroutines.flow.stateIn
@@ -58,12 +61,14 @@ constructor(
    transitionInteractor: KeyguardTransitionInteractor,
    val dismissInteractor: KeyguardDismissInteractor,
    @Application private val applicationScope: CoroutineScope,
    sceneInteractor: SceneInteractor,
    deviceEntryInteractor: DeviceEntryInteractor,
    quickSettingsSceneFamilyResolver: QuickSettingsSceneFamilyResolver,
    notifShadeSceneFamilyResolver: NotifShadeSceneFamilyResolver,
    sceneInteractor: dagger.Lazy<SceneInteractor>,
    deviceEntryInteractor: dagger.Lazy<DeviceEntryInteractor>,
    quickSettingsSceneFamilyResolver: dagger.Lazy<QuickSettingsSceneFamilyResolver>,
    notifShadeSceneFamilyResolver: dagger.Lazy<NotifShadeSceneFamilyResolver>,
    powerInteractor: PowerInteractor,
    alternateBouncerInteractor: AlternateBouncerInteractor,
    keyguardInteractor: dagger.Lazy<KeyguardInteractor>,
    shadeInteractor: dagger.Lazy<ShadeInteractor>,
) {
    val dismissAction: Flow<DismissAction> = repository.dismissAction

@@ -98,15 +103,31 @@ constructor(
     * device is unlocked. Else, false.
     */
    private val isOnShadeWhileUnlocked: Flow<Boolean> =
        if (SceneContainerFlag.isEnabled) {
            combine(
                sceneInteractor.currentScene,
                deviceEntryInteractor.isUnlocked,
                    sceneInteractor.get().currentScene,
                    deviceEntryInteractor.get().isUnlocked,
                ) { scene, isUnlocked ->
                    isUnlocked &&
                    (quickSettingsSceneFamilyResolver.includesScene(scene) ||
                        notifShadeSceneFamilyResolver.includesScene(scene))
                        (quickSettingsSceneFamilyResolver.get().includesScene(scene) ||
                            notifShadeSceneFamilyResolver.get().includesScene(scene))
                }
                .distinctUntilChanged()
        } else if (ComposeBouncerFlags.isOnlyComposeBouncerEnabled()) {
            shadeInteractor.get().isAnyExpanded.sample(
                keyguardInteractor.get().isKeyguardDismissible
            ) { isAnyExpanded, isKeyguardDismissible ->
                isAnyExpanded && isKeyguardDismissible
            }
        } else {
            flow {
                error(
                    "This should not be used when both SceneContainerFlag " +
                        "and ComposeBouncerFlag are disabled"
                )
            }
        }

    val executeDismissAction: Flow<() -> KeyguardDone> =
        merge(
                finishedTransitionToGone,
+8 −5
Original line number Diff line number Diff line
@@ -22,8 +22,8 @@ import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.authentication.data.repository.fakeAuthenticationRepository
import com.android.systemui.authentication.shared.model.AuthenticationMethodModel
import com.android.systemui.bouncer.domain.interactor.alternateBouncerInteractor
import com.android.systemui.bouncer.data.repository.fakeKeyguardBouncerRepository
import com.android.systemui.bouncer.domain.interactor.alternateBouncerInteractor
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.deviceentry.domain.interactor.deviceEntryInteractor
import com.android.systemui.flags.EnableSceneContainer
@@ -42,6 +42,7 @@ import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.domain.resolver.notifShadeSceneFamilyResolver
import com.android.systemui.scene.domain.resolver.quickSettingsSceneFamilyResolver
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.domain.interactor.shadeInteractor
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -77,12 +78,14 @@ class KeyguardDismissActionInteractorTest : SysuiTestCase() {
                transitionInteractor = kosmos.keyguardTransitionInteractor,
                dismissInteractor = dismissInteractor,
                applicationScope = testScope.backgroundScope,
                sceneInteractor = kosmos.sceneInteractor,
                deviceEntryInteractor = kosmos.deviceEntryInteractor,
                quickSettingsSceneFamilyResolver = kosmos.quickSettingsSceneFamilyResolver,
                notifShadeSceneFamilyResolver = kosmos.notifShadeSceneFamilyResolver,
                sceneInteractor = { kosmos.sceneInteractor },
                deviceEntryInteractor = { kosmos.deviceEntryInteractor },
                quickSettingsSceneFamilyResolver = { kosmos.quickSettingsSceneFamilyResolver },
                notifShadeSceneFamilyResolver = { kosmos.notifShadeSceneFamilyResolver },
                powerInteractor = kosmos.powerInteractor,
                alternateBouncerInteractor = kosmos.alternateBouncerInteractor,
                keyguardInteractor = { kosmos.keyguardInteractor },
                shadeInteractor = { kosmos.shadeInteractor },
            )
    }

+7 −4
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.domain.resolver.notifShadeSceneFamilyResolver
import com.android.systemui.scene.domain.resolver.quickSettingsSceneFamilyResolver
import com.android.systemui.shade.domain.interactor.shadeInteractor
import kotlinx.coroutines.ExperimentalCoroutinesApi

@ExperimentalCoroutinesApi
@@ -35,11 +36,13 @@ val Kosmos.keyguardDismissActionInteractor by
            transitionInteractor = keyguardTransitionInteractor,
            dismissInteractor = keyguardDismissInteractor,
            applicationScope = testScope.backgroundScope,
            sceneInteractor = sceneInteractor,
            deviceEntryInteractor = deviceEntryInteractor,
            quickSettingsSceneFamilyResolver = quickSettingsSceneFamilyResolver,
            notifShadeSceneFamilyResolver = notifShadeSceneFamilyResolver,
            sceneInteractor = { sceneInteractor },
            deviceEntryInteractor = { deviceEntryInteractor },
            quickSettingsSceneFamilyResolver = { quickSettingsSceneFamilyResolver },
            notifShadeSceneFamilyResolver = { notifShadeSceneFamilyResolver },
            powerInteractor = powerInteractor,
            alternateBouncerInteractor = alternateBouncerInteractor,
            keyguardInteractor = { keyguardInteractor },
            shadeInteractor = { shadeInteractor },
        )
    }