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

Commit 49e72cb0 authored by Matt Pietal's avatar Matt Pietal Committed by Android (Google) Code Review
Browse files

Merge "Perf tweaks -Consolidate some KeyguardTransition collects" into main

parents 90eb985c 64a6ed16
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@ import static com.android.systemui.log.LogBufferHelperKt.logcatLogBuffer;
import static com.google.common.truth.Truth.assertThat;

import static kotlinx.coroutines.flow.FlowKt.emptyFlow;
import static kotlinx.coroutines.flow.SharedFlowKt.MutableSharedFlow;
import static kotlinx.coroutines.flow.StateFlowKt.MutableStateFlow;

import static org.mockito.ArgumentMatchers.any;
@@ -85,6 +84,7 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor;
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor;
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor;
import com.android.systemui.keyguard.domain.interactor.NaturalScrollingSettingObserver;
import com.android.systemui.keyguard.shared.model.KeyguardState;
import com.android.systemui.keyguard.ui.transitions.BlurConfig;
import com.android.systemui.keyguard.ui.viewmodel.DreamingToLockscreenTransitionViewModel;
import com.android.systemui.keyguard.ui.viewmodel.KeyguardTouchHandlingViewModel;
@@ -170,7 +170,6 @@ import com.android.wm.shell.animation.FlingAnimationUtils;
import dagger.Lazy;

import kotlinx.coroutines.CoroutineDispatcher;
import kotlinx.coroutines.channels.BufferOverflow;
import kotlinx.coroutines.test.TestScope;

import org.junit.After;
@@ -340,7 +339,7 @@ public class NotificationPanelViewControllerBaseTest extends SysuiTestCase {
        when(mKeyguardTransitionInteractor.isInTransition(any(), any()))
                .thenReturn(emptyFlow());
        when(mKeyguardTransitionInteractor.getCurrentKeyguardState()).thenReturn(
                MutableSharedFlow(0, 0, BufferOverflow.SUSPEND));
                MutableStateFlow(KeyguardState.LOCKSCREEN));
        when(mDeviceEntryFaceAuthInteractor.isBypassEnabled()).thenReturn(MutableStateFlow(false));
        DeviceEntryUdfpsInteractor deviceEntryUdfpsInteractor =
                mock(DeviceEntryUdfpsInteractor.class);
+5 −4
Original line number Diff line number Diff line
@@ -245,7 +245,6 @@ class VisualStabilityCoordinatorTest(flags: FlagsParameterization) : SysuiTestCa
        }

    @Test
    @BrokenWithSceneContainer(bugId = 377868472) // mReorderingAllowed is broken with SceneContainer
    fun testLockscreenPartlyShowing_groupAndSectionChangesNotAllowed() =
        testScope.runTest {
            // GIVEN the panel true expanded and device isn't pulsing
@@ -263,7 +262,6 @@ class VisualStabilityCoordinatorTest(flags: FlagsParameterization) : SysuiTestCa
        }

    @Test
    @BrokenWithSceneContainer(bugId = 377868472) // mReorderingAllowed is broken with SceneContainer
    fun testLockscreenFullyShowing_groupAndSectionChangesNotAllowed() =
        testScope.runTest {
            // GIVEN the panel true expanded and device isn't pulsing
@@ -1001,12 +999,15 @@ class VisualStabilityCoordinatorTest(flags: FlagsParameterization) : SysuiTestCa
        } else {
            statusBarStateListener.onExpandedChanged(panelExpanded || lockscreenShowing > 0.0f)
        }
        testScope.testScheduler.runCurrent()
    }

    private fun makeLockscreenTransitionStep(value: Float): TransitionStep {
        return when (value) {
            0.0f -> TransitionStep(KeyguardState.GONE)
            1.0f -> TransitionStep(KeyguardState.LOCKSCREEN)
            0.0f ->
                TransitionStep(from = KeyguardState.LOCKSCREEN, to = KeyguardState.GONE, value = 1f)
            1.0f ->
                TransitionStep(from = KeyguardState.GONE, to = KeyguardState.LOCKSCREEN, value = 1f)
            else ->
                TransitionStep(
                    KeyguardState.GONE,
+14 −14
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@ import com.android.systemui.bouncer.shared.constants.KeyguardBouncerConstants.EX
import com.android.systemui.bouncer.shared.model.BouncerDismissActionModel
import com.android.systemui.bouncer.shared.model.BouncerShowMessageModel
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.log.dagger.BouncerTableLog
import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.log.table.logDiffsForTable
@@ -137,7 +137,7 @@ open class KeyguardBouncerRepositoryImpl
@Inject
constructor(
    private val clock: SystemClock,
    @Application private val applicationScope: CoroutineScope,
    @Background private val backgroundScope: CoroutineScope,
    @BouncerTableLog private val buffer: TableLogBuffer,
) : KeyguardBouncerRepository {
    override var bouncerDismissActionModel: BouncerDismissActionModel? = null
@@ -292,47 +292,47 @@ constructor(
        primaryBouncerShow
            .logDiffsForTable(buffer, "", "PrimaryBouncerShow", false)
            .onEach { Log.d(TAG, "Keyguard Bouncer is ${if (it) "showing" else "hiding."}") }
            .launchIn(applicationScope)
            .launchIn(backgroundScope)
        primaryBouncerShowingSoon
            .logDiffsForTable(buffer, "", "PrimaryBouncerShowingSoon", false)
            .launchIn(applicationScope)
            .launchIn(backgroundScope)
        primaryBouncerStartingToHide
            .logDiffsForTable(buffer, "", "PrimaryBouncerStartingToHide", false)
            .launchIn(applicationScope)
            .launchIn(backgroundScope)
        primaryBouncerStartingDisappearAnimation
            .map { it != null }
            .logDiffsForTable(buffer, "", "PrimaryBouncerStartingDisappearAnimation", false)
            .launchIn(applicationScope)
            .launchIn(backgroundScope)
        primaryBouncerScrimmed
            .logDiffsForTable(buffer, "", "PrimaryBouncerScrimmed", false)
            .launchIn(applicationScope)
            .launchIn(backgroundScope)
        panelExpansionAmount
            .map { (it * 1000).toInt() }
            .logDiffsForTable(buffer, "", "PanelExpansionAmountMillis", -1)
            .launchIn(applicationScope)
            .launchIn(backgroundScope)
        keyguardPosition
            .filterNotNull()
            .map { it.toInt() }
            .logDiffsForTable(buffer, "", "KeyguardPosition", -1)
            .launchIn(applicationScope)
            .launchIn(backgroundScope)
        isBackButtonEnabled
            .filterNotNull()
            .logDiffsForTable(buffer, "", "IsBackButtonEnabled", false)
            .launchIn(applicationScope)
            .launchIn(backgroundScope)
        showMessage
            .map { it?.message }
            .logDiffsForTable(buffer, "", "ShowMessage", null)
            .launchIn(applicationScope)
            .launchIn(backgroundScope)
        resourceUpdateRequests
            .logDiffsForTable(buffer, "", "ResourceUpdateRequests", false)
            .launchIn(applicationScope)
            .launchIn(backgroundScope)
        alternateBouncerVisible
            .logDiffsForTable(buffer, "", "AlternateBouncerVisible", false)
            .launchIn(applicationScope)
            .launchIn(backgroundScope)
        lastShownSecurityMode
            .map { it.name }
            .logDiffsForTable(buffer, "", "lastShownSecurityMode", null)
            .launchIn(applicationScope)
            .launchIn(backgroundScope)
    }

    companion object {
+4 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ import com.android.systemui.bouncer.ui.viewmodel.BouncerOverlayContentViewModel
import com.android.systemui.bouncer.ui.viewmodel.KeyguardBouncerViewModel
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.ui.viewmodel.GlanceableHubToPrimaryBouncerTransitionViewModel
import com.android.systemui.keyguard.ui.viewmodel.PrimaryBouncerToGoneTransitionViewModel
@@ -22,6 +23,7 @@ import com.android.systemui.user.domain.interactor.SelectedUserInteractor
import dagger.Lazy
import java.util.Optional
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope

/** Helper data class that allows to lazy load all the dependencies of the legacy bouncer. */
@@ -29,6 +31,7 @@ import kotlinx.coroutines.CoroutineScope
data class LegacyBouncerDependencies
@Inject
constructor(
    @Main val mainDispatcher: CoroutineDispatcher,
    val viewModel: KeyguardBouncerViewModel,
    val primaryBouncerToGoneTransitionViewModel: PrimaryBouncerToGoneTransitionViewModel,
    val glanceableHubToPrimaryBouncerTransitionViewModel:
@@ -82,6 +85,7 @@ constructor(
        } else {
            val deps = legacyBouncerDependencies.get()
            KeyguardBouncerViewBinder.bind(
                deps.mainDispatcher,
                view,
                deps.viewModel,
                deps.primaryBouncerToGoneTransitionViewModel,
+28 −27
Original line number Diff line number Diff line
@@ -40,13 +40,14 @@ import com.android.systemui.log.BouncerLogger
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.plugins.AuthContextPlugin
import com.android.systemui.user.domain.interactor.SelectedUserInteractor
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.awaitCancellation
import kotlinx.coroutines.flow.filter

/** Binds the bouncer container to its view model. */
object KeyguardBouncerViewBinder {
    @JvmStatic
    fun bind(
        mainImmediateDispatcher: CoroutineDispatcher,
        view: ViewGroup,
        viewModel: KeyguardBouncerViewModel,
        primaryBouncerToGoneTransitionViewModel: PrimaryBouncerToGoneTransitionViewModel,
@@ -117,6 +118,32 @@ object KeyguardBouncerViewBinder {
                    securityContainerController.showPromptReason(reason)
                }
            }

        view.repeatWhenAttached(mainImmediateDispatcher) {
            repeatOnLifecycle(Lifecycle.State.CREATED) {
                launch {
                    viewModel.bouncerExpansionAmount.collect { expansion ->
                        securityContainerController.setExpansion(expansion)
                        if (expansion == EXPANSION_VISIBLE) {
                            securityContainerController.onResume(KeyguardSecurityView.SCREEN_ON)
                        }
                    }
                }

                launch {
                    primaryBouncerToGoneTransitionViewModel.bouncerAlpha.collect { alpha ->
                        securityContainerController.setAlpha(alpha)
                    }
                }

                launch {
                    viewModel.keyguardPosition.collect { position ->
                        securityContainerController.updateKeyguardPosition(position)
                    }
                }
            }
        }

        view.repeatWhenAttached {
            repeatOnLifecycle(Lifecycle.State.CREATED) {
                try {
@@ -190,38 +217,12 @@ object KeyguardBouncerViewBinder {
                        }
                    }

                    launch {
                        viewModel.bouncerExpansionAmount.collect { expansion ->
                            securityContainerController.setExpansion(expansion)
                        }
                    }

                    launch {
                        primaryBouncerToGoneTransitionViewModel.bouncerAlpha.collect { alpha ->
                            securityContainerController.setAlpha(alpha)
                        }
                    }

                    launch {
                        viewModel.bouncerExpansionAmount
                            .filter { it == EXPANSION_VISIBLE }
                            .collect {
                                securityContainerController.onResume(KeyguardSecurityView.SCREEN_ON)
                            }
                    }

                    launch {
                        viewModel.isInteractable.collect { isInteractable ->
                            securityContainerController.setInteractable(isInteractable)
                        }
                    }

                    launch {
                        viewModel.keyguardPosition.collect { position ->
                            securityContainerController.updateKeyguardPosition(position)
                        }
                    }

                    launch {
                        viewModel.updateResources.collect {
                            securityContainerController.updateResources()
Loading