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

Commit 3e304dff authored by Aaron Liu's avatar Aaron Liu
Browse files

[Bouncer] Fix flicker tests.

Fixes an issue where dismissaction is set to null before it's called
when bouncer is unlocked.
Fixes an issue where we call updateState everytime expansion changes.
This was causing an overstack flow issue. Also it's super not performant
to call this everytime expansion changes.

Bug: 240298500
Test: Passed flicker tests for cts test. Passed presubmit.
Test: Tested showing the bouncer.
Test: Tested opening notification from lockscreen.
Change-Id: Iede30acdf11689c5da7abd2d5e5b4619aa10b34a
parent d779fab0
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.keyguard.data

import android.view.KeyEvent
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.plugins.ActivityStarter
import java.lang.ref.WeakReference
import javax.inject.Inject

@@ -45,4 +46,9 @@ interface BouncerViewDelegate {
    fun dispatchBackKeyEventPreIme(): Boolean
    fun showNextSecurityScreenOrFinish(): Boolean
    fun resume()
    fun setDismissAction(
        onDismissAction: ActivityStarter.OnDismissAction?,
        cancelAction: Runnable?,
    )
    fun willDismissWithActions(): Boolean
}
+0 −7
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import com.android.keyguard.KeyguardUpdateMonitor
import com.android.keyguard.KeyguardUpdateMonitorCallback
import com.android.keyguard.ViewMediatorCallback
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.keyguard.shared.model.BouncerCallbackActionsModel
import com.android.systemui.keyguard.shared.model.BouncerShowMessageModel
import com.android.systemui.keyguard.shared.model.KeyguardBouncerModel
import com.android.systemui.statusbar.phone.KeyguardBouncer.EXPANSION_HIDDEN
@@ -54,8 +53,6 @@ constructor(
    val hide = _hide.asStateFlow()
    private val _startingToHide = MutableStateFlow(false)
    val startingToHide = _startingToHide.asStateFlow()
    private val _onDismissAction = MutableStateFlow<BouncerCallbackActionsModel?>(null)
    val onDismissAction = _onDismissAction.asStateFlow()
    private val _disappearAnimation = MutableStateFlow<Runnable?>(null)
    val startingDisappearAnimation = _disappearAnimation.asStateFlow()
    private val _keyguardPosition = MutableStateFlow(0f)
@@ -120,10 +117,6 @@ constructor(
        _startingToHide.value = startingToHide
    }

    fun setOnDismissAction(bouncerCallbackActionsModel: BouncerCallbackActionsModel?) {
        _onDismissAction.value = bouncerCallbackActionsModel
    }

    fun setStartDisappearAnimation(runnable: Runnable?) {
        _disappearAnimation.value = runnable
    }
+2 −7
Original line number Diff line number Diff line
@@ -30,7 +30,6 @@ import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.keyguard.DismissCallbackRegistry
import com.android.systemui.keyguard.data.BouncerView
import com.android.systemui.keyguard.data.repository.KeyguardBouncerRepository
import com.android.systemui.keyguard.shared.model.BouncerCallbackActionsModel
import com.android.systemui.keyguard.shared.model.BouncerShowMessageModel
import com.android.systemui.keyguard.shared.model.KeyguardBouncerModel
import com.android.systemui.plugins.ActivityStarter
@@ -94,8 +93,6 @@ constructor(
    val showMessage: Flow<BouncerShowMessageModel> = repository.showMessage.filterNotNull()
    val startingDisappearAnimation: Flow<Runnable> =
        repository.startingDisappearAnimation.filterNotNull()
    val onDismissAction: Flow<BouncerCallbackActionsModel> =
        repository.onDismissAction.filterNotNull()
    val resourceUpdateRequests: Flow<Boolean> = repository.resourceUpdateRequests.filter { it }
    val keyguardPosition: Flow<Float> = repository.keyguardPosition

@@ -149,7 +146,6 @@ constructor(
        }
        keyguardStateController.notifyBouncerShowing(true)
        callbackInteractor.dispatchStartingToShow()

        Trace.endSection()
    }

@@ -168,7 +164,6 @@ constructor(
        keyguardStateController.notifyBouncerShowing(false /* showing */)
        cancelShowRunnable()
        repository.setShowingSoon(false)
        repository.setOnDismissAction(null)
        repository.setVisible(false)
        repository.setHide(true)
        repository.setShow(null)
@@ -227,7 +222,7 @@ constructor(
        onDismissAction: ActivityStarter.OnDismissAction?,
        cancelAction: Runnable?
    ) {
        repository.setOnDismissAction(BouncerCallbackActionsModel(onDismissAction, cancelAction))
        bouncerView.delegate?.setDismissAction(onDismissAction, cancelAction)
    }

    /** Update the resources of the views. */
@@ -305,7 +300,7 @@ constructor(

    /** Return whether bouncer will dismiss with actions */
    fun willDismissWithAction(): Boolean {
        return repository.onDismissAction.value?.onDismissAction != null
        return bouncerView.delegate?.willDismissWithActions() == true
    }

    /** Returns whether the bouncer should be full screen. */
+12 −9
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import com.android.keyguard.dagger.KeyguardBouncerComponent
import com.android.systemui.keyguard.data.BouncerViewDelegate
import com.android.systemui.keyguard.ui.viewmodel.KeyguardBouncerViewModel
import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.statusbar.phone.KeyguardBouncer.EXPANSION_VISIBLE
import kotlinx.coroutines.awaitCancellation
import kotlinx.coroutines.flow.collect
@@ -75,6 +76,17 @@ object KeyguardBouncerViewBinder {
                    hostViewController.showPrimarySecurityScreen()
                    hostViewController.onResume()
                }

                override fun setDismissAction(
                    onDismissAction: ActivityStarter.OnDismissAction?,
                    cancelAction: Runnable?
                ) {
                    hostViewController.setOnDismissAction(onDismissAction, cancelAction)
                }

                override fun willDismissWithActions(): Boolean {
                    return hostViewController.hasDismissActions()
                }
            }
        view.repeatWhenAttached {
            repeatOnLifecycle(Lifecycle.State.STARTED) {
@@ -121,15 +133,6 @@ object KeyguardBouncerViewBinder {
                        viewModel.startingToHide.collect { hostViewController.onStartingToHide() }
                    }

                    launch {
                        viewModel.setDismissAction.collect {
                            hostViewController.setOnDismissAction(
                                it.onDismissAction,
                                it.cancelAction
                            )
                        }
                    }

                    launch {
                        viewModel.startDisappearAnimation.collect {
                            hostViewController.startDisappearAnimation(it)
+0 −4
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import android.view.View
import com.android.systemui.keyguard.data.BouncerView
import com.android.systemui.keyguard.data.BouncerViewDelegate
import com.android.systemui.keyguard.domain.interactor.BouncerInteractor
import com.android.systemui.keyguard.shared.model.BouncerCallbackActionsModel
import com.android.systemui.keyguard.shared.model.BouncerShowMessageModel
import com.android.systemui.keyguard.shared.model.KeyguardBouncerModel
import com.android.systemui.statusbar.phone.KeyguardBouncer.EXPANSION_VISIBLE
@@ -63,9 +62,6 @@ constructor(
    /** Observe whether bouncer is starting to hide. */
    val startingToHide: Flow<Unit> = interactor.startingToHide

    /** Observe whether we want to set the dismiss action to the bouncer. */
    val setDismissAction: Flow<BouncerCallbackActionsModel> = interactor.onDismissAction

    /** Observe whether we want to start the disappear animation. */
    val startDisappearAnimation: Flow<Runnable> = interactor.startingDisappearAnimation

Loading