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

Commit d8b6ae8c authored by Shawn Lee's avatar Shawn Lee Committed by Android (Google) Code Review
Browse files

Merge "Fix jank added by combining shade expansion in QuickAffordanceInteractor" into main

parents 88a6e1f8 4802c3ea
Loading
Loading
Loading
Loading
+26 −4
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import com.android.systemui.animation.DialogLaunchAnimator
import com.android.systemui.common.shared.model.ContentDescription
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.coroutines.collectValues
import com.android.systemui.dock.DockManager
import com.android.systemui.dock.DockManagerFake
import com.android.systemui.flags.FakeFeatureFlags
@@ -49,16 +50,17 @@ import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.res.R
import com.android.systemui.settings.UserFileManager
import com.android.systemui.settings.UserTracker
import com.android.systemui.shade.domain.interactor.ShadeInteractor
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
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
@@ -82,6 +84,7 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
    @Mock private lateinit var activityStarter: ActivityStarter
    @Mock private lateinit var launchAnimator: DialogLaunchAnimator
    @Mock private lateinit var devicePolicyManager: DevicePolicyManager
    @Mock private lateinit var shadeInteractor: ShadeInteractor
    @Mock private lateinit var logger: KeyguardQuickAffordancesMetricsLogger

    private lateinit var underTest: KeyguardQuickAffordanceInteractor
@@ -95,8 +98,6 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
    private lateinit var dockManager: DockManagerFake
    private lateinit var biometricSettingsRepository: FakeBiometricSettingsRepository

    private val kosmos = testKosmos()

    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)
@@ -183,7 +184,7 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
        underTest =
            KeyguardQuickAffordanceInteractor(
                keyguardInteractor = withDeps.keyguardInteractor,
                shadeInteractor = kosmos.shadeInteractor,
                shadeInteractor = shadeInteractor,
                lockPatternUtils = lockPatternUtils,
                keyguardStateController = keyguardStateController,
                userTracker = userTracker,
@@ -198,6 +199,8 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
                backgroundDispatcher = testDispatcher,
                appContext = context,
            )

        whenever(shadeInteractor.anyExpansion).thenReturn(MutableStateFlow(0f))
    }

    @Test
@@ -343,6 +346,25 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
            assertThat(collectedValue()).isEqualTo(KeyguardQuickAffordanceModel.Hidden)
        }

    @Test
    fun quickAffordance_updateOncePerShadeExpansion() =
        testScope.runTest {
            val shadeExpansion = MutableStateFlow(0f)
            whenever(shadeInteractor.anyExpansion).thenReturn(shadeExpansion)

            val collectedValue by
                collectValues(
                    underTest.quickAffordance(KeyguardQuickAffordancePosition.BOTTOM_START)
                )

            val initialSize = collectedValue.size
            for (i in 0..10) {
                shadeExpansion.value = i / 10f
            }

            assertThat(collectedValue.size).isEqualTo(initialSize + 1)
        }

    @Test
    fun quickAffordanceAlwaysVisible_notVisible_restrictedByPolicyManager() =
        testScope.runTest {
+4 −3
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
@@ -102,10 +103,10 @@ constructor(
            quickAffordanceAlwaysVisible(position),
            keyguardInteractor.isDozing,
            keyguardInteractor.isKeyguardShowing,
            shadeInteractor.anyExpansion,
            shadeInteractor.anyExpansion.map { it < 1.0f }.distinctUntilChanged(),
            biometricSettingsRepository.isCurrentUserInLockdown,
        ) { affordance, isDozing, isKeyguardShowing, qsExpansion, isUserInLockdown ->
            if (!isDozing && isKeyguardShowing && (qsExpansion < 1.0f) && !isUserInLockdown) {
        ) { affordance, isDozing, isKeyguardShowing, isQuickSettingsVisible, isUserInLockdown ->
            if (!isDozing && isKeyguardShowing && isQuickSettingsVisible && !isUserInLockdown) {
                affordance
            } else {
                KeyguardQuickAffordanceModel.Hidden