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

Commit 16594a60 authored by Alejandro Nijamkin's avatar Alejandro Nijamkin
Browse files

[flexiglass] Lockscreen shortcuts are visible again.

It's not clear when lockscreen shortcuts stopped being visible in
Flexiglass but this CL fixes that problem.

The root cause is that KeyguardQuickAffordanceInteractor uses
isKeyguardShowing from KeyguardInteractor and that feeds on state that's
not being kept up-to-date when Flexiglass is on.

Fix: 335679293
Test: manually verified that the lockscreen shortcuts are visible and
can be long-pressed properly
Flag: ACONFIG com.android.systemui.scene_container DEVELOPMENT

Change-Id: I9106fcb1bebed2302db5646f4643c4f255eed88f
parent d66f0827
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -46,13 +46,17 @@ import com.android.systemui.keyguard.shared.model.KeyguardQuickAffordancePickerR
import com.android.systemui.keyguard.shared.quickaffordance.ActivationState
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancePosition
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLogger
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.kosmos.testScope
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.res.R
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.settings.UserFileManager
import com.android.systemui.settings.UserTracker
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.shared.keyguard.shared.model.KeyguardQuickAffordanceSlots
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.testKosmos
import com.android.systemui.util.FakeSharedPreferences
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
@@ -60,8 +64,6 @@ import com.android.systemui.util.settings.FakeSettings
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.test.StandardTestDispatcher
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Before
@@ -86,9 +88,11 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
    @Mock private lateinit var shadeInteractor: ShadeInteractor
    @Mock private lateinit var logger: KeyguardQuickAffordancesMetricsLogger

    private val kosmos = testKosmos()

    private lateinit var underTest: KeyguardQuickAffordanceInteractor

    private lateinit var testScope: TestScope
    private val testScope = kosmos.testScope
    private lateinit var repository: FakeKeyguardRepository
    private lateinit var homeControls: FakeKeyguardQuickAffordanceConfig
    private lateinit var quickAccessWallet: FakeKeyguardQuickAffordanceConfig
@@ -125,8 +129,6 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
            )
        qrCodeScanner =
            FakeKeyguardQuickAffordanceConfig(BuiltInKeyguardQuickAffordanceKeys.QR_CODE_SCANNER)
        val testDispatcher = StandardTestDispatcher()
        testScope = TestScope(testDispatcher)

        dockManager = DockManagerFake()
        biometricSettingsRepository = FakeBiometricSettingsRepository()
@@ -165,7 +167,7 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
                legacySettingSyncer =
                    KeyguardQuickAffordanceLegacySettingSyncer(
                        scope = testScope.backgroundScope,
                        backgroundDispatcher = testDispatcher,
                        backgroundDispatcher = kosmos.testDispatcher,
                        secureSettings = FakeSettings(),
                        selectionsManager = localUserSelectionManager,
                    ),
@@ -195,8 +197,9 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
                devicePolicyManager = devicePolicyManager,
                dockManager = dockManager,
                biometricSettingsRepository = biometricSettingsRepository,
                backgroundDispatcher = testDispatcher,
                backgroundDispatcher = kosmos.testDispatcher,
                appContext = context,
                sceneInteractor = { kosmos.sceneInteractor },
            )

        whenever(shadeInteractor.anyExpansion).thenReturn(MutableStateFlow(0f))
+20 −1
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.content.Context
import android.content.Intent
import android.util.Log
import com.android.app.tracing.coroutines.withContext
import com.android.compose.animation.scene.ObservableTransitionState
import com.android.internal.widget.LockPatternUtils
import com.android.systemui.animation.DialogTransitionAnimator
import com.android.systemui.animation.Expandable
@@ -45,6 +46,9 @@ import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAfforda
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLogger
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.res.R
import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.settings.UserTracker
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.shared.customization.data.content.CustomizationProviderContract as Contract
@@ -82,6 +86,7 @@ constructor(
    private val biometricSettingsRepository: BiometricSettingsRepository,
    @Background private val backgroundDispatcher: CoroutineDispatcher,
    @Application private val appContext: Context,
    private val sceneInteractor: Lazy<SceneInteractor>,
) {

    /**
@@ -102,7 +107,21 @@ constructor(
        return combine(
            quickAffordanceAlwaysVisible(position),
            keyguardInteractor.isDozing,
            keyguardInteractor.isKeyguardShowing,
            if (SceneContainerFlag.isEnabled) {
                sceneInteractor
                    .get()
                    .transitionState
                    .map {
                        when (it) {
                            is ObservableTransitionState.Idle -> it.scene == Scenes.Lockscreen
                            is ObservableTransitionState.Transition ->
                                it.fromScene == Scenes.Lockscreen || it.toScene == Scenes.Lockscreen
                        }
                    }
                    .distinctUntilChanged()
            } else {
                keyguardInteractor.isKeyguardShowing
            },
            shadeInteractor.anyExpansion.map { it < 1.0f }.distinctUntilChanged(),
            biometricSettingsRepository.isCurrentUserInLockdown,
        ) { affordance, isDozing, isKeyguardShowing, isQuickSettingsVisible, isUserInLockdown ->
+2 −0
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ import com.android.systemui.keyguard.ui.preview.KeyguardPreviewRendererFactory
import com.android.systemui.keyguard.ui.preview.KeyguardRemotePreviewManager
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.res.R
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.settings.UserFileManager
import com.android.systemui.settings.UserTracker
import com.android.systemui.shade.domain.interactor.shadeInteractor
@@ -203,6 +204,7 @@ class CustomizationProviderTest : SysuiTestCase() {
                biometricSettingsRepository = biometricSettingsRepository,
                backgroundDispatcher = testDispatcher,
                appContext = mContext,
                sceneInteractor = { kosmos.sceneInteractor },
            )
        underTest.previewManager =
            KeyguardRemotePreviewManager(
+2 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ import com.android.systemui.keyguard.data.repository.KeyguardQuickAffordanceRepo
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancePosition
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLogger
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.settings.FakeUserTracker
import com.android.systemui.settings.UserFileManager
import com.android.systemui.settings.UserTracker
@@ -329,6 +330,7 @@ class KeyguardQuickAffordanceInteractorParameterizedTest : SysuiTestCase() {
                biometricSettingsRepository = biometricSettingsRepository,
                backgroundDispatcher = testDispatcher,
                appContext = mContext,
                sceneInteractor = { kosmos.sceneInteractor },
            )
    }

+2 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAfforda
import com.android.systemui.keyguard.shared.quickaffordance.KeyguardQuickAffordancesMetricsLogger
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.res.R
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.settings.UserFileManager
import com.android.systemui.settings.UserTracker
import com.android.systemui.shade.domain.interactor.shadeInteractor
@@ -233,6 +234,7 @@ class KeyguardBottomAreaViewModelTest : SysuiTestCase() {
                        biometricSettingsRepository = biometricSettingsRepository,
                        backgroundDispatcher = testDispatcher,
                        appContext = mContext,
                        sceneInteractor = { kosmos.sceneInteractor },
                    ),
                bottomAreaInteractor = KeyguardBottomAreaInteractor(repository = repository),
                burnInHelperWrapper = burnInHelperWrapper,
Loading